XSL Analyze-String - >匹配 - 子串到多个变量

The*_*Fox 7 xslt xslt-2.0

我想知道是否可以analyze-string在RegEx中使用和设置多个组,然后将所有匹配组存储在变量中以供稍后使用.

像这样:

<xsl:analyze-string regex="^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee" select=".">
  <xsl:matching-substring>
    <xsl:variable name="varX">
      <xsl:value-of select="regex-group(1)"/>
    </xsl:variable>                                
    <xsl:variable name="varY">
      <xsl:value-of select="regex-group(2)"/>
    </xsl:variable>        
  </xsl:matching-substring>
</xsl:analyze-string>    
Run Code Online (Sandbox Code Playgroud)

这实际上并不起作用,但这就是我所追求的事情,我知道我可以将其包装analyze-string在一个变量中,但这对于我必须处理RegEx的每个组来说都是愚蠢的,不是很有效,我应该是能够处理一次正则表达式并存储所有组以供以后使用.

有任何想法吗?

Mar*_*nen 8

好吧

<xsl:variable name="groups" as="element(group)*">
<xsl:analyze-string regex="^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee" select=".">
<xsl:matching-substring>
  <group>
     <x><xsl:value-of select="regex-group(1)"/></x>
     <y><xsl:value-of select="regex-group(2)"/></y>
  </group>   
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

救命?这样你就有了一个名为变量的变量groups,它是group带有捕获的元素序列.


Dim*_*hev 5

这种转变表明,xsl:analyze-string没有必要获得想要的结果 - 存在一个更简单和通用的解决方案.:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="*[matches(., '^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee')]">

    <xsl:variable name="vTokens" select=
      "tokenize(replace(., '^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee', '$1 $2'), ' ')"/>

  <xsl:variable name="varX" select="$vTokens[1]"/>  
  <xsl:variable name="varY" select="$vTokens[2]"/>  

  <xsl:sequence select="$varX, $varY"/>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

应用于此XML文档时:

<t>Blah  123   Bloo  4567  Blee</t>
Run Code Online (Sandbox Code Playgroud)

这产生了想要的,正确的结果:

123 4567
Run Code Online (Sandbox Code Playgroud)

在这里,我们不依赖于知道RegEx(可以作为参数提供)和字符串 - 我们只是用RegEx组的分隔字符串替换字符串,然后我们将其标记化并且生成的序列中的每个项目tokenize()都可以很容易被分配给相应的变量.

我们不必在温度中找到想要的结果.树 - 我们只是在结果序列中得到它们.