私が本当にばかげている場合は申し訳ありませんが (私は Java っぽい RegEx を避けようとし、主にそのようなものには Perl を使用します)、本当に私を悩ませている問題にぶつかりました。
私が書いた関数を使用する OSB パイプラインに XQuery リソースがあります。それで:
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]) ...明らかな何かが欠けていない限り。
何か案は?