9

' 'の前に[''が付いていない限り、''以外の任意の数の文字を含む式を受け入れる正規表現を作成するにはどうすればよいですか? [\

例:

this is text \\[ this also [$ this isn't any more    

上記のテキストから、「this is text \\[ this also」は受け入れられるべきであり、残りは受け入れられるべきではありません。私は次のようなものを書きました:

[.[^\\\\[]]*  

''を除外しますが、' 'と残りのテキスト[を含める方法がわかりません。\\[

4

2 に答える 2

5

[これは、[前に\:がないか等しくないすべての文字に一致します。

([^\[]|(?<=\\)\[)+

文字列全体の単純な合格/不合格が必要な場合は、正規表現に開始/終了行の文字を追加するだけです:

^([^\[]|(?<=\\)\[)+$
于 2013-03-22T15:14:43.923 に答える
4
([^\[]|\\\[)*

[これは、(( ) または ( )以外のすべて) のシーケンスを受け入れます\[

一般に、特定の文字をエスケープする必要がある文字列を受け入れたい場合、たとえばabcd、それに一致する正規表現は次のとおりです。

([^abcd]|\\[abcd])*

編集:

Matcher.findこの正規表現は、内/外にあるすべてのセクションを反復処理するために使用できます[]

\[(?:[^\[]|\\\[)*\]|(?:\\\[|[^\[])+

(Java 文字列に入れるときはすべてのバックスラッシュを 2 倍にします。読みやすくするために省略しています。)

これにより、文字列abc[ def \[ asd \] ]\[ dasd[ \] ]abc[ def \[ asd \] ]\[ dasd、およびに分割され[ \] ]ます。

于 2013-03-22T15:14:01.277 に答える