2017-01-09 10 views
2

指定した文字(@)が連続して複数回繰り返されていることを確認する必要があります。これは複数回発生する可能性がありますが、@@以上ではなく、単一の@文字としてのみ発生します。グループのキャプチャは不要です。連続して1文字以下の文字を一致させる

これらの文字列が一致する必要があります。

foobar 
@foobar 
[email protected] 
[email protected]@baz 

これらの文字列を一致させるべきではありません。

@@foobar 
[email protected]@bar 
[email protected]@@baz 

エンジンは、先読みとlookbehindsをサポートしています。

私は(?<[email protected])@([email protected])を正確に1回繰り返して試しましたが、((?<[email protected])@([email protected])|)または(?<[email protected])@?([email protected])は明らかに0回または1回繰り返すことはできません。

どのようにこの状況を処理できますか?あなたはこの否定文字クラス正規表現を使用することができます任意の先読みのサポートなし

+0

行に@文字がない場合はどうなりますか?一致するかどうか? –

+1

@ S.Impそれはすべきです。この場合は、*これらの文字列は一致する必要があります。 – estus

+3

スタックオーバーフローは正規表現を作成するための無料相談ではありません。あなたは何を試しましたか、それはどうやって間違ったのですか?問題を解決するために何をしましたか? –

答えて

5

[^@]@ないものにマッチ
^[^@]*(?:@[^@]+)*$ 

。文字列の任意の場所に@@を許可しないように

^(?!.*@@).*$ 

(?!.*@@)が負の正規表現です:あなたは正規表現で先読みをサポートしている場合は

RegEx Demo

は、単純な正規表現を使用します。

RegEx Demo 2

+1

優れています。どうもありがとう。 – estus

関連する問題