3

次のケースに一致するようにしばらく試みましたが、正規表現が得意ではないので、助けが来ることを願っています...

a または b を含むすべての単語を一致させる必要がありますが、各 a は b で区切る必要があるため、どの単語にも aa はありません。

使用できる単語: a、b、ba、ababbaba 使用でき
ない単語: aa、babaa

4

4 に答える 4

4

固定された否定的な先読みを使用します。

^(?!.*aa)[ab]+$

この式[ab]+は、文字列が a と b で構成されていることを意味します (非常に単純です)。

(?!.*aa)で始まる式は、 ^「aa」が入力のどこにも現れないことを表明します。


先読みせずに解決するには:

^(b|ab|a$)+$

orまとめて使用された用語は、左から右の優先順位で消費されます。それを念頭に置いて、正規表現がどのように機能するかは明らかです。

ライブデモで動作するこの正規表現をご覧ください

于 2013-09-09T09:58:47.723 に答える
3
/^a?(ba?)*$/

説明...

/^         # start regex and start of string
a?         # optional a
(          # start group
  b        # exactly one b
  a?       # optional a
)*         # end group, and repeat zero or more times
$/         # end regex and end of string

平易な英語では、最初の文字は である場合もあればa、メインの繰り返しグループに右に移動する場合もあり、これは 0 回以上繰り返すことができ、末尾までb0 または 1 が続くa と一致します。a

2番目の方法

(コメントごとに壊滅的なバックトラックを避けてください)

/^a?(b|ba)*$/

説明した...

/^         # start regex and start of string
a?         # optional a
(          # start group
  b|ba     # match `b` or `ba`
)*         # end group, and repeat zero or more times
$/         # end regex and end of string

平易な英語では、最初の文字はa, または メインの繰り返しグループに移動します。これは 0 回以上繰り返され、 または のいずれbかで構成されba、一致と正規表現を終了します。

于 2013-09-09T10:30:18.347 に答える
0

これがうまくいくかどうかを確認してください。\b((a?b+a?)+)\b|\b((a?b+)+)\b|\b(((b+a?)*)\b)

考えられるすべてのケースを検証する時間がありませんでした。

このオンライン正規表現オンライン検証ツールを使用できます

乾杯

于 2013-09-09T11:06:17.467 に答える