2012-10-12 128 views
4

我需要一個正則表達式來匹配字符串中的前兩個單詞(它們可能包含字母,數字,逗號和其他標點符號,但不包含空格,製表符或新行)。 我的解決方案是([^\s]+\s+){2},但如果它在'123 word,hello'*中匹配類似:'123 word' *,它不適用於只有兩個單詞並且之後沒有空格的字符串。pcre正則表達式匹配前兩個單詞,數字

什麼是這個任務的正確的正則表達式?

回答

3

你有它差不多吧:

([^\s]+\s+[^\s]+) 

假設你不需要在使用什麼字符更強的控制。

如果您需要在兩個兩個詞匹配,或者僅只有一個字,你可以使用其中的一個:不要試圖匹配的話

([^\s]+\s+[^\s]+|[^\s]+) 
([^\s]+(?:\s+[^\s]+)?) 
+0

很好的回答。謝謝! –

0

如果你真的只想允許數字和字母[^\s]不是限制性的。使用此:

/[a-z0-9]+(\s+[a-z0-9]+)?/i 
2

,你可以在空白與preg_split()拆分字符串。

+2

+1這是個好主意,但對於我而言,在['preg_split()'](http://php.net/manual/en/function.preg-split.php)中沒有提及'$ limit'只是可怕的矯枉過正你可能有很長的字符串)。 – Vyktor

+0

即使使用preg_split,但我有理由堅持正則表達式。無論如何謝謝 –

+0

Vyktor +1 for preg_split限制 –

相關問題