2017-10-14 100 views
0

如何組合兩個或更多的正則表達式,以便僅當兩個表達式都爲真時纔會發生匹配。 比如我想識別包含6個數字文本字邊界即合併表達式

\b[0-46-9]\d{5}\b 

內(不與5開頭),但我想排除包含000000

^(?!.*000000).*$ 

abc234576c Match 
abc534756c No Match 
abc000000c No Match 

如何做到這一點的文本?

+0

歡迎來到SO!你介意正確地格式化你的問題嗎?就目前而言,很難閱讀。關於你的問題,你可能會尋找幾個概念。 – Jan

+1

嘗試'\ b [a-zA-Z] *(?! 0 {6})[0-46-9] \ d {5} [a-zA-Z] * \ b' –

回答

0

試試這個正則表達式:

\b(?!.*000000)[^0-9]*[0-46-9]\d{5}[^0-9]*\b 

這是假設你正在尋找與前兩者和繼續其非數字可能匹配一個六位數字。它還確保該號碼不是000000,號碼不以5開頭。

Demo

0

你的第一正則表達式錯過一個重要的一點,\ b的標識詞的字符(包含數字)和一個非單詞字符之間的對比度。
當需要的全部文本,應該工作:

[a-zA-Z]*[0-46-9]\d{5}[a-zA-Z]* 

它與你正確的第二個表達式相結合,您將獲得:

[A-Za-z]*(?!0{6})[0-46-9]\d{5}[A-Za-z]* 

您可以查看結果here

+0

對不起@Tim Biegeleisen,之前沒有看到您的帖子。 – PJProudhon

+0

'[A-Za-z]'唯一可能的問題是它只匹配字母而不匹配非數字。但也許在這種情況下可以。 –

+0

你是對的,只是讓我意識到我不正當地認爲是這種情況。 – PJProudhon