8

二重アンダースコアのある文字列を許可しないために正規表現を適用しようとしています

 [a-z][a-z0-9_-]+[^__]

しかし、多くの場合、次のように失敗します。

ab_      doesn't matches whereas it should
ab__c_   matches whereas it shouldn't.
4

3 に答える 3

8

[^__]アンダースコアではない1つの文字に一致します。文字列に2つの連続したアンダースコアがないことを表明するには、負の先読みを使用できます。

^(?!.*__.*)[a-z][a-z0-9_-]+$

ルックアラウンドは、文字列に2つの連続したアンダースコアがない(?!.*__.*)ことを表明し、アサーションが失敗しない場合は必要な文字列と一致します- [a-z][a-z0-9_-]+

于 2012-09-12T09:04:12.247 に答える
1

[^]構文は、このセットに存在しない文字と一致するように文字のセットを定義します

アンダースコアではない2つの文字を一致させたい場合は、次を使用できます。[^_]{2}

ただし、文字列に2つのアンダースコアがあるかどうかを本当に確認したい場合は、2つのアンダースコアを検索して、結果を無効にすることをお勧めします。

たとえば、perlでは:"ab_" !~ /__/

于 2012-09-12T09:04:01.007 に答える
1

perl では次のようになります。

    if($a =~ /__/){
    } else{
    }

つまり、文字列 a に "__" が含まれている場合は何かを実行し、そうでない場合は別のことを実行します。もちろん、そのようなコードを美化する方法はたくさんあります

于 2012-09-12T10:47:48.350 に答える