正则表达式,xslt 2,基础知识

时间:2018-08-23 15:35:39

标签: regex xslt-2.0 regex-group

我已经浏览了几个示例,并尝试修改搜索以了解什么是什么。

输入:

<Description>Ottelu pelattu 22.4.2018. Gagarin Cupin 5. finaaliottelu. Selostus: Antti Mäkinen.</Description>
<Description>Ottelu pelattu 20.4.2018. Gagarin Cupin 1. finaaliottelu. Selostus: Antti Mäkinen.</Description>
<Description>Ottelu pelattu 22.4.2018. Gagarin Cupin 2. puolivälierä. Selostus: Antti Mäkinen.</Description>`

我想做的就是在我的输出中选择这些:

  • “ Gagarin Cupin 5. finaaliottelu”
  • “加加林杯2.puolivälierä”

中间没有圆点。

我可以使用substring-before / after,但是我知道使用正则表达式会很有用?

我已经做到了,可以满足我的需要:Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*

但是现在如何在XSLT中使用它?我应该使用analyze-string()吗?或以某种方式matches()

XSLT:

<xsl:variable name="episode" select="Description"/>
<xsl:variable name="fetchcup">
                <xsl:analyze-string select="$episode" regex="Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*">
                    <xsl:matching-substring>
                        <xsl:value-of select="regex-group(1)"/>
                    </xsl:matching-substring>
                </xsl:analyze-string>
           </xsl:variable>
<Cup><xsl:value-of select="$fetchcup"/></Cup>

但是说实话,尽管浏览了教程页面和示例,但我仍然感觉缺少一些工作原理的基础知识。如果我踏进门,可以进一步应用。

1 个答案:

答案 0 :(得分:2)

您的正则表达式在Description内的单个xsl:matching-substring元素的上下文中工作,如果要输出匹配的字符串,则可以简单地将.用于上下文项或regex-group(0)(请参阅https://www.w3.org/TR/xslt-30/#func-regex-group)。在您的情况下,regex-group(1)的使用没有意义,因为您的正则表达式没有任何子表达式。

  <xsl:template match="Description">
      <cup>
                <xsl:analyze-string select="." regex="Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*">
                    <xsl:matching-substring>
                        <xsl:value-of select="."/>
                    </xsl:matching-substring>
                </xsl:analyze-string>          
      </cup>
  </xsl:template>

https://xsltfiddle.liberty-development.net/nc4NzQH中的模板输出

<cup>Gagarin Cupin 5. finaaliottelu</cup>
<cup>Gagarin Cupin 1. finaaliottelu</cup>
<cup>Gagarin Cupin 2. puolivälierä</cup>

对于您的三个Description元素,希望我能正确理解这作为所需的输出。