0

私が本当にばかげている場合は申し訳ありませんが (私は 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]) ...明らかな何かが欠けていない限り。

何か案は?

4

1 に答える 1

0

本当にそこに。*が必要ですか?それは多くのものと一致しませんか?[。&&[^;]]*または同等のものはどうですか?つまり、セミコロン以外のすべてに一致します。*一致します。

于 2012-07-10T13:25:40.790 に答える