0

正規表現のレイジーマッチングに問題があります。例なしで説明するのは難しいです:

私の正規表現:A\d*?(88)?\d*?B


例1:A12388456B

私が欲しいもの:文字列に一致し、グループ1は「88」に一致します

何が起こるか:文字列に一致しますが、グループ1は一致しません。


例2:A123B

私が欲しいもの:文字列に一致し、グループ1は一致しません。

何が起こるか:正しく動作する


基本的に、グループ1が表示された場合は「88」と一致させたいのですが、任意のパターンとも一致させたいと思いますA\d+B

簡単そうに見えますが、困っています。

4

3 に答える 3

1

Javascriptでこの正規表現を試してみてください:

 'A12388456B'.match(/A(?:\d*?(88))?\d*?B/);
 > ["A12388456B", "88"]  // Matches string and 88.

 'A123B'.match(/A(?:\d*?(88))?\d*?B/);
 > ["A123B", undefined]  // Matches string but nothing else.

最初の例では、グループ1が88をキャプチャします。

于 2012-08-09T17:24:28.830 に答える
0

一致させたい最初のグループは、グループとしてマークされていません。

あなたが望むだろう:

(A \ d *)?(88)?\ d *?B

次に、2つのサブグループとメインマッチがあります。

于 2012-08-09T17:19:14.370 に答える
0

正規表現を使用すると、一致が見つかった場合A(?=\d*(88))\d*B、グループ1に含まれます。88

于 2012-08-09T18:21:14.693 に答える