0

我使用 XSLT 2.0 在 XML 转换期间创建了一个正则表达式来拆分特定字符串:

(@VAL)((.+?)(?=@VAL|$))

此正则表达式应用于一些具有以下相同形式的字符串:

@VAL@TEST1@1111@'Ceci est un texte'@VAL@TEST2@2222@'This is a text'@VAL@TEST3@3333@'Encore du texte'

它提取从 @VAL 开始直到下一个 @VAL 的所有内容(有关 ?= 构造的解释,请参见那里)。所以对于这个例子,正则表达式的结果提供了这三个字符串:

  • @VAL@TEST1@1111@'Ceci est un texte'
  • @VAL@TEST2@2222@'这是一个文本'
  • @VAL@TEST3@3333@'Encore du texte'

不幸的是,即使它与这个在线正则表达式测试器配合得很好,我在执行转换时也会遇到这个错误:

XTDE1140:正则表达式错误:net.sf.saxon.trans.DynamicError:正则表达式“(@VAL)(.+?(?=@VAL|$))”中字符 11 处出错:预期 ()) 失败编译样式表。检测到 1 个错误

那么这个正则表达式有什么问题呢?我不明白为什么要在字符 11 处加上右括号。

欢迎任何帮助。

PS:我使用 saxon8 XSLT 处理器

4

2 回答 2

0

感谢您的额外解释。如果没有零宽度前瞻,我认为有两种方法可以解决这个问题:

(a) 使用“@VAL”作为分隔符进行标记化,并接受这样一个事实,即您必须将“@VAL”添加回每个标记的前面。

(b) 首先用“§@VAL”替换“@VAL”,然后将“§”标记为分隔符。

于 2013-06-26T13:12:37.667 回答
0

XSD/XPath 正则表达式语言不允许构造“(?=”。

老实说,没有查一下,我不记得它是什么意思,因此我不知道你想要达到什么目标。如果你解释问题,而不是你尝试解决的失败,你更有可能得到有用的答案。

于 2013-06-26T11:01:07.817 回答