Re: [xsl] Re: Re: Using XSLT to add markup to a document

Subject: Re: [xsl] Re: Re: Using XSLT to add markup to a document
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Tue, 8 Jul 2003 11:55:04 +0100
David,

>> Getting whole-word-only matches is much more complicated, in fact I
>> can't think of a good approach right now, but perhaps someone else
>> can?
>
> schema/xpath regexp don't seem to have the emppty word boundary
> regexp escapes (perhaps they should have...) but you could add
> (\W|^|$) before and after the regexp, couldn't you to match a
> non-word character or end-of-string, and then just replace those
> groups before and after your <special> element.

Yes, I thought of that, but I don't think that it works. Say you did:

  <xsl:analyze-string select="." regex="(\W|^)(foo|bar)(\W|$)">
    <xsl:matching-substring>
      <xsl:value-of select="regex-group(1)" />
      <special><xsl:value-of select="regex-group(2)" /></special>
      <xsl:value-of select="regex-group(3)" />
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="." />
    </xsl:non-matching-substring>
  </xsl:analyze-string>

with the string 'foo bar'. The first matching substring is "foo ".
This leaves the string "bar", but the ^ only matches at the actual
start of the string, not at the start of the
substring-that's-left-after-the-last-match, so it doesn't recognise
the word 'bar'.

Perhaps you need to do non-whole-word processing and then post-process
the result to find the <special> elements that are either first/last
or are immediately preceded/followed by a text node whose last/first
character is a non-word character...

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread