【问题标题】:Why does this return a value for regex-group(1)?为什么这会返回 regex-group(1) 的值?
【发布时间】:2015-10-26 09:20:14
【问题描述】:

我希望以下代码中的前两个正则表达式组值为空(排除其他人的代码问题):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
  exclude-result-prefixes="xs xd"
  version="2.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:analyze-string select="'1949'" regex="([0-9]{{1,2}})?\s?([A-Z]{{1}}[a-z]{{1,8}}\.?)?\s?([0-9]{{4}})">
      <xsl:matching-substring>
        <xsl:text>regex-group(1)=</xsl:text><xsl:value-of select="regex-group(1)"/><xsl:text>&#xd;</xsl:text>
        <xsl:text>regex-group(2)=</xsl:text><xsl:value-of select="regex-group(2)"/><xsl:text>&#xd;</xsl:text>
        <xsl:text>regex-group(3)=</xsl:text><xsl:value-of select="regex-group(3)"/><xsl:text>&#xd;</xsl:text>
      </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:template>

</xsl:stylesheet>

但是(使用 saxon 9.6.0.5 [更新 - 也是 saxon 9.6.0.7])我得到:

regex-group(1)=1
regex-group(2)=
regex-group(3)=1949

我正在调试其他人以前可以运行的代码:这是撒克逊语中的错误吗?还是我遗漏了导致返回“1”的内容?

【问题讨论】:

  • 谢谢神秘奥丁!
  • 是的,这似乎是一个错误,因为对于一个组x 包括在另一个组中捕获的结果yx 必须包含组y,例如((1)949) 如果括号在同一嵌套级别上,则它们不应包含彼此的子集,但如果输入为 11949,则此输出将是正确的
  • 这也是我的想法,但最好在报告之前得到一些确认。

标签: regex xslt xslt-2.0 saxon


【解决方案1】:

由于这在 saxon 9.5.1.7 中给出了预期结果,我认为这是一个错误,所以我打开了 Saxonica 的报告。

【讨论】:

  • Bug 现已修复(在源代码中)。
【解决方案2】:

该错误也在 Saxon-HE 版本 9.7.0-5 中。我必须降级到 9.6.0-7 版本才能使代码正常工作。我使用了 9.6.0-7 版本,因为氧气中的嵌入式 xslt 引擎(代码运行良好)使用了该版本。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 2013-08-09
  • 2015-08-18
  • 2020-01-07
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多