2012-10-12 131 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限制 –

相关问题