二重アンダースコアのある文字列を許可しないために正規表現を適用しようとしています
[a-z][a-z0-9_-]+[^__]
しかし、多くの場合、次のように失敗します。
ab_ doesn't matches whereas it should
ab__c_ matches whereas it shouldn't.
二重アンダースコアのある文字列を許可しないために正規表現を適用しようとしています
[a-z][a-z0-9_-]+[^__]
しかし、多くの場合、次のように失敗します。
ab_ doesn't matches whereas it should
ab__c_ matches whereas it shouldn't.
[^__]
アンダースコアではない1つの文字に一致します。文字列に2つの連続したアンダースコアがないことを表明するには、負の先読みを使用できます。
^(?!.*__.*)[a-z][a-z0-9_-]+$
ルックアラウンドは、文字列に2つの連続したアンダースコアがない(?!.*__.*)
ことを表明し、アサーションが失敗しない場合は必要な文字列と一致します- [a-z][a-z0-9_-]+
。
[^]
構文は、このセットに存在しない文字と一致するように文字のセットを定義します
アンダースコアではない2つの文字を一致させたい場合は、次を使用できます。[^_]{2}
ただし、文字列に2つのアンダースコアがあるかどうかを本当に確認したい場合は、2つのアンダースコアを検索して、結果を無効にすることをお勧めします。
たとえば、perlでは:"ab_" !~ /__/
perl では次のようになります。
if($a =~ /__/){
} else{
}
つまり、文字列 a に "__" が含まれている場合は何かを実行し、そうでない場合は別のことを実行します。もちろん、そのようなコードを美化する方法はたくさんあります