对不起,如果我真的很蠢(我试着避免使用Java-ish RegEx,并主要使用Perl来处理那种东西),但是我遇到了一个真正困扰我的问题 .
我在OSB管道中有一个XQuery资源,它使用我编写的函数,其中的部分是提取tlv数据(NAME; [number]; VALUE; NAME; [number]; VALUE; ...)as所以:
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 ''
它大约有50%的时间工作,并且可能在更大的字符串上失败,因为它具有大量的递归堆栈跟踪 .
问题是,它有时会在 $arg
输入上失败,因为它只是因为当时正在发生的事情而耗尽内存,所以这指向一个效率低下的表达式而不是一个不起作用的表达式 .
问题是,我看不到更好的方法来定义它而不是匹配 .*NAME;\d+;
- 特别是考虑到XQuery和/或OSB似乎相当有限(\ d没有't actually work, hence [0-9] in my code)...unless I' m缺少明显的东西 .
有任何想法吗?
1 回答
你真的需要 . *在那里?这不会匹配很多东西吗? [ . && [^;]] *或等价物怎么样?即匹配任何 . *匹配除分号 .