2012-03-28 8 views
0

私はこの正規表現を構築しており、複雑になっています。2番目の文字を検証する方法は「*」ではありませんか?

^(?=.{2,})[a-zA-Z0-9\s\-\,\.]+\*?$ 

基本的に私はそれを使って名前を検証します。しかし、今私はそれが2文字の最小であることを確認する必要がありますが、最初の2つは "*"ではありません。

+0

'最初の二つは、' "*" ではない - これは最初の2つの文字のどちらも '*'ことができることを意味するのでしょうか?それとも、そのうちの1つは可能ですが、両方ではありませんか? –

+0

最初の文字は '[a-zA-Z0-9 \ s、.-]'になければならないので、正規表現では最初の文字は決して星になりません。正確に何をしたいですか? –

答えて

1

ルックアヘッドを変更して、星から離れた文字を探すことができます。

^(?=[^*]{2}) 
1

あなたが今持っていることは、この

^(?=.{2,})[a-zA-Z0-9\s\-\,\.]+\*?$ 

or 

^[a-zA-Z0-9\s,.-](?:[*]|[a-zA-Z0-9\s,.-]+[*]?)$ 

or 

/^[a-zA-Z0-9\s,.-][*]$/ || /^[a-zA-Z0-9\s,.-]{2,}[*]?)$/ 

いずれも最初の文字に*許可されていません。あなたにも二番目の文字で*をしたくない場合は

、あなたは
マーク先読みで陰性クラスと示唆して何ができるか、それが
先読みなしで行うことができます。

^[a-zA-Z0-9\s,.-]{2,}[*]?$ 
1

私は適切に質問を理解してかどうかわからないんだけど、

^[^*][^*] 

は最初の2つの文字のどちらも*ある文字列に一致します。これはabに一致しますが、a*,*bまたは**と一致しません。

文字列が**で始まらないという要件がある場合、使用している言語に組み込まれた文字列操作操作を使用するだけで、より簡単で高速になる場合があります。例えば。 Pythonで:

len(name) >= 2 and not name.startswith('**') 

またはC:

strlen(name) >= 2 && !(name[0] == '*' && name[1] == '*') 
関連する問題