Извлеките строку sub на основе регулярного выражения в xslt

У меня есть сценарий, где я хочу извлечь sub строку, которая соответствует регулярному выражению.

Ниже приведен пример:

<xsl:value-of select="matches('Process java(Application=JavaApplication_2) is not running in the system.', ''.*AppName=Archiver_[0-9]{1,2}.*'')"/>

Но это дает мне логическое значение как «false».

Я пытался с tokenize, но это становится все сложнее.

Пожалуйста, помогите мне в этом.

2 ответа

  1. См. примеры команд analyze-string Source + Regex

    Вход

    <root>Process java(Application=JavaApplication_2) is not running in the system.</root>
    

    Шаблон

    <xsl:template match="root">
        <xsl:analyze-string select="." regex="Application=JavaApplication_[0-9]{{1,2}}">
            <xsl:matching-substring>
                <xsl:value-of select="."/>
            </xsl:matching-substring>
            <!-- optional -->
            <xsl:non-matching-substring>
                <!-- do sth -->
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </xsl:template>
    
  2. matches()Функция возвращает значение trueor false.

    Чтобы извлечь соответствующую подстроку, попробуйте использовать replace()функцию. Я не уверен, какую подстроку вы пытаетесь извлечь, поэтому я не буду приводить здесь пример, но см.: https://stackoverflow.com/a/39402132/3016153