3

私はこの正規表現を使用しています:

([\w\s]+)(=|!=)([\w\s]+)( (or|and) ([\w\s]+)(=|!=)([\w\ +))*

次のような文字列に一致します。i= 2 or i =3 and k!=4

m.group(index) を使用して値を抽出しようとすると、次のようになります。 (i, =, 2, **and k!=4**, and, k, ,!=, 4).

期待される出力: (i, =, 2, or, i, =, 3, and, k , !=, 4) 値を正しく抽出するにはどうすればよいですか?

PSm.matches()は true を返します。

4

4 に答える 4

1

説明

探しているものと正確に一致するように式を単純化してみませんか?

!?=|(?:or|and)|\b(?:(?!or|and)[\w\s])+\b

ここに画像の説明を入力

ライブ デモテキスト領域の青い吹き出しにカーソルを合わせると、何が一致しているかを正確に確認できます

サンプルテキスト

i= 2 or i =1234 and k!=4 

見つかった一致

[0][0] = i
[1][0] = =
[2][0] = 2 
[3][0] = or
[4][0] =  i
[5][0] = =
[6][0] = 1234 
[7][0] = and
[8][0] =  k
[9][0] = !=
[10][0] = 4
于 2013-08-16T07:58:25.787 に答える
0

括弧内のすべては、後でインデックスを介してアクセスできるキャプチャ グループを作成します。ただし、必要のないグループを non-capturing:(?: ... )にすると、 at と見なされなくなりますMatcher.group(int)

于 2013-08-16T07:02:40.787 に答える