正規表現で複数のネガティブ先読みを使用する際のガイダンスを謙虚にお願いします。現在、2つの正規表現と一致する文字列があります。
文字列:Armadale Joe Bloggs 22-333-222 20001 Whitfords to Butler
^Armadale\D+\d{2}-\d{3}-\d{2}\D+2\d{4}\D+$
(Armadale|Fremantle|Butler|Mandurah|Midland|Thornlie)\D+(?![0-9]{2}-[0-9]{3}-[0-9]{2})2[0-9]{4}\D+$
文字列と一致しないように正規表現2を変更するにはどうすればよいですか?
ネガティブな先読みは22-333-22と(?![0-9]{2}-[0-9]{3}-[0-9]{2})
一致すべきではありませんか?
私の代わりに、正規表現2試合がしたい22-333-333、333-333-22または22-22-22の?
どんな助けでも大歓迎です。
乾杯、
Trav。
あなたの説明は、最初のサンプル文字列は「Armadale Joe Bloggs 22-333-22 20001 WhitfordstoButler」であるべきだと示唆しています。つまり、3桁目のグループに2桁しかない。したがって、ダッシュで区切られた数字の系列は、長さが2-3-2である必要があります。
ここで、新しい正規表現に必要なのは、2-3-2シリーズをフィルターで除外することですが、他のシリーズ(たとえば、2-3-3、3-3-2、または2-2-2)を許可します。そして、(?![0-9]{2}-[0-9]{3}-[0-9]{2})
先読みを追加することで近づきましたが、新しい数字シリーズのパターンを見逃しました。修正されたバージョンは次のとおりです。
^(Armadale|Fremantle|Butler|Mandurah|Midland|Thornlie)\D+(?![0-9]{2}-[0-9]{3}-[0-9]{2}\D+)\d+-\d+-\d+\D+2[0-9]{4}\D+$
(デモ:https://regex101.com/r/vI0tY3/1)
上記の正規表現では\d+-\d+-\d+
、おそらくもっと制限的にしたいと思うかもしれない一般的なパターンを使用しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加