我使用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(有关?=构造的解释,请参阅there)。因此,对于此示例,正则表达式的结果提供了以下三个字符串:
不幸的是,即使它适用于this online regex tester,我在执行转换时也会遇到此错误:
XTDE1140:正则表达式出错:net.sf.saxon.trans.DynamicError:字符出错 正则表达式中的11“(@VAL)(。+?(?= @ VAL | $))”:expected()) 无法编译样式表。检测到1个错误
那么这个正则表达式的问题是什么?我不明白为什么在第11个字符处需要一个右括号。
欢迎任何帮助。
PS:我使用的是saxon8 XSLT处理器
答案 0 :(得分:0)
XSD / XPath正则表达式语言不允许构造“(?=”。
老实说,如果不抬头,我不记得它意味着什么,因此我不确切地知道你想要实现什么。如果您解释问题,而不是尝试解决方案失败,那么您更有可能得到有用的答案。
答案 1 :(得分:0)
感谢您的额外解释。如果没有零宽度前瞻,我认为有两种方法可以解决这个问题:
(a)使用“@VAL”作为分隔符进行标记,并且必须将“@VAL”添加回每个标记的前面。
(b)首先用“§@ VAL”替换“@VAL”,然后将“§”标记为分隔符。