2016-05-23 50 views
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

然而如果需要irement是爲了避免連續重複然後使用:

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

您好感謝您的回覆我必須修改成「^((?!?。?*%23){2})([0-9 ] | [AZ] |%2F | - )。* $「,但它適用於其他表達式,但不適用於」%23ABC「。你有什麼主意嗎? – Saurabh

+0

@Saurabh你可以使用:'^(?:[0-9] | [AZ] |%2F | [ - %])(?!(?:。*?%23){2})。* $'爲你的正則表達式 – anubhava

+1

感謝它爲我工作 – Saurabh