2015-09-09 247 views
1

我正在嘗試寫一個正則表達式來最大化一個長度爲5位數或更長的數字序列,但在進行分析時忽略任何空格,破折號,parens或哈希值。這是迄今爲止我所擁有的。正則表達式 - 忽略某些字符時的匹配

(\d|\(|\)|\s|#|-){5,} 

這樣做的問題是,這將匹配5個字符,包括我想忽略這些字符的序列,所以像「#123」將匹配。雖然我想忽略#和空格字符,但我仍然需要數字本身爲5位數或更多才能符合比賽資格。

需要明確的是,這將匹配:

1-2-3-4-5 
123 45 
2(134) 5 

獎勵積分,如果匹配的開始和結束以數字,而不是那些「特殊字符」我不計之一。 做這種匹配的任何提示?

回答

1

如果我理解正確的要求,你可以使用:

^\d(?:[()\s#-]*\d){4,}$ 

RegEx Demo

它始終與數字匹配。然後是4個或更多非捕獲組,即(?:[()\s#-]*\d),這意味着0個或更多的任何列出的特殊字符後跟一個數字。

+1

經過測試,我能想到的所有情況下,它完美的作品。我會在這裏試圖弄清楚它爲什麼起作用。謝謝。 – Jeremy

+0

它起作用是因爲'\ d'正好在'^'之後並且在'$'之前使用,因此消除了在開始或結束時任何非數字的情況。 – anubhava

1

所以只是在重複一個數字,其次是允許的字符5倍以上任何其他序列:

^(\d[()\s#-]*){5,}$ 

可以確保它在一個數字,如果你減去重複的一個,並添加一個明確的數字結束結尾:

^(\d[()\s#-]*){4,}\d$ 
0

你可以建議非數字字符以\ d這樣會等是這樣的:

(\d\D*){5,} 

Here是導遊。

+0

OP是關於哪些字符可以被忽略的具體內容。例如'1a1a1a1a1a'=〜/(\ d \ D *){5,} /#=> 0',但字母不能被忽略,所以應該返回'nil'。 –

相關問題