为什么这会为regex-group(1)返回一个值?

时间:2015-10-26 09:20:15

标签: regex xslt xslt-2.0 saxon

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

<?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]regex-group(1)=1
regex-group(2)=
regex-group(3)=1949
[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 [更新 - 也是撒克逊9.6.0.7])我得到:

import flash.utils.Timer;
import flash.events.TimerEvent;

stop();

var timmyTimer:Timer = new Timer(3000)
var score:int = 0;


timmyTimer.addEventListener(TimerEvent.TIMER, tick)
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;                         

timmyTimer.start();

function tick(t:TimerEvent):void {
if(t.target.delay > 500){ 
t.target.delay -= 100; }
addChild(mcBall);
mcBall.x = Math.floor(Math.random() *(stage.stageWidth - mcBall.width));
mcBall.y = Math.floor(Math.random() *(stage.stageHeight - mcBall.height));
mcBall.nextFrame();
}

stop();

mcBall.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);

function fl_TapHandler(event:TouchEvent):void {
timmyTimer.reset();
score +=1;
updateScores();
mcBall.x = Math.floor(Math.random() *(stage.stageWidth - mcBall.width));
mcBall.y = Math.floor(Math.random() *(stage.stageHeight - mcBall.height));
mcBall.nextFrame();
removeChild(mcBall);
}

function updateScores():void {
lblScore.text = String(score);
}

function endGame():void {
timmyTimer.stop();
gotoAndStop(3);
mcBall.removeEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
removeEventListener(TimerEvent.TIMER, tick);
removeEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
                            removeChild(mcBall);
}

我正在调试其他以前有效的代码:这是撒克逊人的错误吗?或者我错过了导致“1&#39; 1&#39;要退回吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

该漏洞也出现在Saxon-HE版本9.7.0-5中。我不得不降级到版本9.6.0-7以使代码生效。我使用的是版本9.6.0-7,因为氧气中的嵌入式xslt引擎(代码工作正常)使用了那个确切的版本。