0

これはプロファイラーからの結果です:

ビュー「destinationDetails」では、次の正規表現はシステムの高速化された正規表現エンジンでは実行できず、代わりに Java の組み込み正規表現エンジンで実行されます。

 /(?<=dst\s)(.+?)\n/

ほとんどの場合、この非互換性は、正規表現に次のような先読み/後読み構造が含まれているために発生します。 \A, \Z, \b, ^, $, (?=X), (?!X), (?<=X), or (?<!X)

入力ソース: 2011-12-06T00:02:01.726755+05:18 2011 年 12 月 6 日 00:00:33 KOC-TEJ-CBA-ASA-5510-3: %ASA-4-106023: tcp src CBA:10.2 を拒否します。 2.78/1885 dst 外部: 10.31.129.2/1494 by アクセス グループ "CBA_access_in" [0x8104ddd0, 0x0]

プロファイラーの警告をより効率的に克服する方法を誰か説明してもらえますか?

4

1 に答える 1

0

警告メッセージの例を考えると、潜在的な問題として際立っている正規表現の 1 つの要素は、「ゼロ幅の正の後読み」(?<=dst\s)です。これは、「dst\s」が一致の残りの部分に先行するが、一致の一部としてキャプチャされないようにするために使用されます。

thisをどのように置き換える(?<=dst\s)かは、正規表現全体がどのように使用されているかによって大きく異なります。

  • dst\s試合の一部としてキャプチャされないことは本当に重要ですか? 要するに、単に「正規表現が何らかの入力に一致するかどうか、はいまたはいいえ」に対する答えが必要な場合は、何が消費されたかどうかは気にしないでしょう。試してください: /dst\s(.+?)\n/.

  • これがより大きな正規表現の一部である場合、または単純な「はい/いいえ」の一致よりも複雑なことを正規表現で行っている場合は、誰かが賢明な提案を行うためにそれを提示する必要があります.

于 2012-08-07T17:14:17.350 に答える