对不起,如果我真的很愚蠢(我尽量避免使用 Java-ish RegEx,并且主要使用 Perl 来处理这类事情),但我遇到了一个真正困扰我的问题。
我在 OSB 管道中有一个 XQuery 资源,该资源使用我编写的函数,其核心是将 tlv 数据 (NAME;[number];VALUE;NAME;[number];VALUE;...) 提取为所以:
if ($arg != '' and $name != '' and matches($arg, concat('.*;', $name, ';[0-9]+;')))
then substring(normalize-space(substring-before(replace($arg, concat('.*;', $name, ';[0-9]+;'), ''), ';')), 1, 64)
else ''
org.apache.xmlbeans.impl.regex.RegularExpression.matchString
考虑到大量的递归堆栈跟踪,它大约有 50% 的时间工作,并且可能在更大的字符串上失败。
问题是,它有时会在$arg
以前满意的输入上失败,所以我猜它只是内存不足,这取决于当时发生的其他事情,所以这指向一个低效的表达式,而不是一个没有的表达式不工作。
问题是,我找不到比匹配更好的方法来定义它.*NAME;\d+;
- 特别是考虑到 XQuery 和/或 OSB 似乎相当有限(\d 实际上没有工作,因此在我的代码中为 [0-9]) ...除非我遗漏了一些明显的东西。
有任何想法吗?