<xsl:analyze-string> XSLT

Элемент xsl:analyze-string служит для разбора строк с помощью регулярных выражений.

Синтаксис

XSLT 2.0 и XSLT 3.0

<xsl:analyze-string
    select = "выражение"
    regex = "регулярное выражение"
    flags = "строка с флагами">
    <!-- Содержимое: (xsl:matching-substring?, xsl:non-matching-substring?, xsl:fallback*) -->
</xsl:analyze-string>

Атрибуты

  • selectобязательный атрибут, указывает строку, к которой применяется регулярное выражение.
  • regexобязательный атрибут, содержит регулярное выражение.
  • flagsнеобязательный атрибут, служит для контроля интерпретации регулярного выражения.

Описание и примеры

Для использования в атрибуте regex фигурных скобок, их необходимо продублировать, например regex=".{{1,5}}". Если же регулярное выражение содержит много скобок, то выражение можно "экранировать" в одиночные кавычки regex="{'[0-9]{1,5}[a-z]{3}[0-9]{1,2}'}" или использовать переменные.

Пример

Написать регулярное выражение, которое возьмет все, что в фигурных скобках.

Тестовый xml:

<?xml version="1.0" encoding="utf-8"?>
<tests>
    <test>_{aaa}</test>
    <test>{bbb}_</test>
    <test>_{ccc}_</test>
    <test>{ddd}</test>
    <test>eee</test>
</tests>

Преобразование xslt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />

    <xsl:template match="test">
        <xsl:analyze-string select="." regex="{{(.*?)}}" >
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(1)" />
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:template>
</xsl:stylesheet>

Результат:

aaa
bbb
ccc
ddd

Источник примера: www.rsdn.ru