2016-05-23 1 views
1

正規表現は初めてです。 1つの式をオプションとして作成しながらいくつかの問題に直面し、存在する場合は繰り返さないでください。以下のケースでは、%23をオプションにしたい場合は、それが繰り返されるべきではありません。しかし、以下のケースでは、オプションで動作していますが、リピートでは動作しません。正規表現はオプションで、最大値は1です。

私のように文字列を入れても、私にtrueを与えている:誰かがそれはオプションと繰り返しのないようにする方法を提案でし

-113%23%2313113098A%2F-- 

。これは私の正規表現です:

(%23)?([0-9]|[A-Z]|%2F|-).*$ 

答えて

2

あなたは%23の繰り返しインスタンスにマッチするのを避けるために、負の先読みを使用することができます。

^(?:[0-9]|[A-Z]|%2F|[-%])(?!(?:.*?%23){2}).*$ 

分裂:しかし

(?!    # start negative lookahead 
(?:.*?%23){2} # match 0 or more chars followed by %23, {2} matches 2 repeats 
)    # end lookahead 

RegEx Demo

要求の場合

^(?!.*?(?:%23){2}) 
+0

こんにちは、私はそれを修正する必要があり、あなたの返事を感謝する「^((:?!?。*?%23){2})([0-9 irementは、使用連続で繰り返しを避けるためです] | [AZ] |%2F | - )。* $ "しかし、他の式では動作しますが、"%23ABC "では動作しません。あなたは何か考えていますか? – Saurabh

+0

@Saurabhあなたは '^(?:[0-9] | [AZ] |%2F | [ - %])(?!(?*?%23){2}))* $'あなたの正規表現のため – anubhava

+1

私のために働いてくれてありがとう – Saurabh