我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母,数字,逗号和其他标点符号,但不包含空格,制表符或换行符)。
我的解决方案是([^\s]+\s+){2}
,但如果匹配的内容如下:'123 word' * in'123 word,hello'*,它不会对只有两个单词且后面没有空格的字符串起作用
此任务的正确正则表达式是什么?
答案 0 :(得分:3)
你几乎是对的:
([^\s]+\s+[^\s]+)
假设您不需要更强控制使用哪些字符。
如果您需要匹配两个单词或仅匹配一个单词,您可以使用其中一个:
([^\s]+\s+[^\s]+|[^\s]+)
([^\s]+(?:\s+[^\s]+)?)
答案 1 :(得分:2)
您可以使用preg_split()
在空格上拆分字符串,而不是尝试匹配单词。
答案 2 :(得分:0)
如果你真的只想允许数字和字母[^\s]
不够限制。使用此:
/[a-z0-9]+(\s+[a-z0-9]+)?/i