Re: [xsl] Ungready Flag on Regex

Subject: Re: [xsl] Ungready Flag on Regex
From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 22 Oct 2020 22:50:50 -0000
That's not the problem. Changing to <xsl:sequence .../> is worse, it creates some pseudo-atomic-values instead of text() nodes.

Christophe

Le 22/10/2020 C 23:48, Martin Honnen martin.honnen@xxxxxx a C)critB :
On 22.10.2020 23:14, Christophe Marchand cmarchand@xxxxxxxxxx wrote:
For sure, regex are strange to me, even if I think they are really usefull.

So, when a regex king give me the right regex to do exactly what I want,
I take this regex, and I adapt it to other similar use-cases.

My first problem was with comments, and I've adapted it to other kind of
markers :

**bold**
$$code$$
@@link@@

The first two are Ok, but I can not make it run for the third case.

I join the XSL, a XSpec file, I have one scenario that fails. If someone
could :

B 1. give me the solution
B 2. explain me why it was failing
B 3. explain me why the solution works

it would be really a good thing.

In France, we now have a curfew at 9pm. There a lot of beer that can not
be sold ; i may have a barrel for the guy who help me !

Best regards,
Christophe

Le 08/10/2020 C  16:54, Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx
a C)critB :


On 08.10.2020 16:26, Liam R. E. Quin liam@xxxxxxxxxxxxxxxx wrote:
You want [^*]*?

Thinking of the brilliant potential for misunderstanding that this answer entails.

Christophe: I don't understand why you are asking me whether I want
[^*]*.

Jokes aside, I think you need the non-greedy question mark modifier,
but not on [^*]*. You use it to make .* non-greedy. Otherwise it will
stop at the first '*' that it encounters.

This works:

<xsl:template name="xsl:initial-template">
B  <doc>
B B B  <xsl:analyze-string
B B B B B  select="'Comments are delimited by **/* */** or prefixed by
**//**'"
B B B B B  regex="\*\*(.*?)\*\*">
B B B B B  <xsl:matching-substring>
B B B B B B B  <b>
B B B B B B B B B  <xsl:value-of select="regex-group(1)"/>
B B B B B B B  </b>
B B B B B  </xsl:matching-substring>
B B B B B  <xsl:non-matching-substring>
B B B B B B B  <xsl:value-of select="."/>
B B B B B  </xsl:non-matching-substring>
B B B  </xsl:analyze-string>
B  </doc>
</xsl:template>


I think the issue is your use of text value templates


<xsl:non-matching-substring>{pt:replaceTextArobase(.)}</xsl:non-matching-substring>

that strips any elements; you need to use
B  <xsl:non-matching-substring>
B B B  <xsl:sequence select="pt:replaceTextArobase(.)"/>
B  </xsl:non-matching-substring>

Current Thread