2017-02-01 5 views
1

タイトルが言うように、私はこのフォーマットで文字列を認識することができ、正規表現構築しようとしている:!!がどこにある正規表現は、区切り文字で区切られた単語のセットを含む文字列をチェックする

word!!cat!!DOG!! ... Phone!!home!! 

をデリミタとして使用されます。各単語の長さは1〜5文字でなければなりません。空の言葉は!!!!

のみaz間アルファベット文字を含めることができ、ワード(大文字と小文字を区別しない)、すなわちないストリング!!ように、許可されていません。各単語の後に私は特別な区切り文字!!を見つけることを期待しています。

私は他のコントロールを追加する必要があるため、以下の解決策を思いつきました(たとえば、単語にはスペースを入れることができます)。私が正しい方法でいるかどうかを知りたいです。

(([a-zA-Z]{1,5})([!]{2}))+ 

はまた、空の文字列は、+

ヘルプので、使用を許可されていないと私は正規表現を構築する方法を学び始めてからのアドバイスは非常に歓迎されていることに注意してください。私はhttp://regexr.com/を使用していくつかのテストを実行し、それは大丈夫と思われるが、私は確信したい。ありがとうございました!

a!!b!!aaaaaa!! 
a123!!b!!c!! 
aAaa!!bbb 
aAaa!!bbb! 
+0

これは一致する必要がありますか? –

+1

それは私にとってはうまく聞こえます:) –

+1

あなたが提供した正規表現にアンカーを追加すると、それは動作します - > https://regex101.com/r/DNoEYf/1 –

答えて

1

を文字列を分割し、値を使用して!!

間それはあなたが正規表現で何をしたいかによって異なります。一致していなければならない

例。あなたは!!間の値を一致させたい場合は、ここでは二つの方法があります:グループ

([^!]+)!! 
  • [^!]+

    マッチングはそれので!

  • !!代わりの[!]{2}以外の少なくとも1つの文字が必要です同じですがはるかに読みやすくなります

looと一致するkahead

あなたが唯一の実際の単語(とない2 !)を一致させたい場合は、肯定先読み使用してこれを行うことができます。

[^!]+(?=!!) 
  • (?=)が肯定先読みです。これは、内部にあるすべてのもの、つまりここでは!!が直前の一致の直後にあることが必要です。しかし、結果の一致には含まれません。

ここにはlive exampleがあります。の

^([^!]+!!)+$ 
  • ^開始:あなたはしかし、文字列全体の妥当性をチェックしたい場合は、文字列

    を検証は


    、あなたはこのようなものが必要文字列

  • $ end文字列の
  • 文字列全体には、([^!]+!!)を1回または複数回含める必要があります。

[^!]が要件に適合しない場合は、もちろん[a-zA-Z]または同様に置き換えることができます。

+1

ありがとう、答えは非常に詳細です有益! – Atlas80b

関連する問題