首页 文章

OSB中的XQuery正则表达式StackOverflowError

提问于
浏览
0

对不起,如果我真的很蠢(我试着避免使用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 回答

  • 0

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

相关问题