analyze-string не совпадает, когда регулярное выражение является переменной

#regex #xslt #xslt-2.0

#регулярное выражение #xslt #xslt-2.0

Вопрос:

Приведенный ниже код работает должным образом, и когда в тексте присутствует Internet, он сопоставляется.

 <xsl:template name="IndexTerm">
    <xsl:param name="matchedRegex">
        <xsl:text>(.*)(Internet)(.*)</xsl:text>
    </xsl:param>
    <xsl:param name="text"></xsl:param>
    <xsl:analyze-string select="$text" regex="(.*)(Internet)(.*)" flags="m">
        <xsl:matching-substring>
            <xsl:call-template name="IndexTerm">
                <xsl:with-param name="text">
                    <xsl:value-of select="regex-group(1)"></xsl:value-of>
                </xsl:with-param>
            </xsl:call-template>
                <xsl:element name="a">
                    <xsl:attribute name="id">
                        <xsl:value-of select="generate-id($text)"></xsl:value-of>
                    </xsl:attribute>
                    <xsl:value-of select="regex-group(2)"></xsl:value-of>
                </xsl:element>
                <xsl:value-of select="regex-group(3)"></xsl:value-of>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="."></xsl:value-of>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>
  

когда строка:

 <xsl:analyze-string select="$text" regex="(.*)(Internet)(.*)" flags="m">
  

заменяется на:

 <xsl:analyze-string select="$text" regex="$matchedRegex" flags="m">
  

оно больше не соответствует регулярному выражению. Мне нужно передать его как параметр. Есть ли способ заставить это работать?

Ответ №1:

Используйте шаблон значения атрибута

 regex="{$matchedRegex}"