0

对不起,如果我真的很愚蠢(我尽量避免使用 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]) ...除非我遗漏了一些明显的东西。

有任何想法吗?

4

1 回答 1

0

你真的需要 .* 吗?这不会匹配很多东西吗?[.&&[^;]]* 或等价物怎么样?即匹配任何东西。* 匹配除了分号。

于 2012-07-10T13:25:40.790 回答