2

角括弧で囲まれたテキストの特定の部分を一致させたいと考えています。コロンの前の単語境界/空白の前のテキスト、またはコロンが存在しない場合は、最後の角括弧の前のテキストのいずれかです。例えば

[Object testThis:anotherObject];一致する必要がありますtestThis

[Object create];一致する必要がありますcreate

[Object create:YES andTest:NO];と の両方に一致する必要がcreateありますandTest

私は次のようなことを試みていましたが、開いた角かっこを確認するために後ろを見て、閉じた角かっこを見つけるために前を見ていましたが、その間のものと一致させることができませんでした。

(?<=\[) .*:(?=\])
4

2 に答える 2

1

うーん、多分このようなもの:

(?<!:)\b[^: ]+\b(?=:[^\[\]]+\]|\])

正規表現101のデモ

正規表現は次のように始まりました:

[^: ](?=:[^\[\]]+\])

testThis1createと3 を入力します。これにより、コロンの前の単語が角かっこで囲まれている場合にのみ取得andTestされます (バランスが取れていると仮定)。\]次に、2 番目のケースでは、部分一致を防ぐために、否定後読みと orを先読みに追加し、一致に単語境界を追加しました。

編集:コメントによると:

(?<!:)\b[^: ]+\b(?=:[^\]]+\]|\])

[Object create:YES andTest:[Object anotherTest]]同様に動作するはずです。

EDIT2:可能な代替:

[^\]]+?(\b[^: ]+\b)[:\]]

ただし、ここでは、最初のキャプチャ グループから結果をフェッチする必要があります。

于 2013-10-13T16:14:24.150 に答える