我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母、数字、逗号和其他标点符号,但不能包含空格、制表符或新行)。我的解决方案是([^\s]\s){2}
,但如果它匹配类似于:'123 word,hello'*中的'123 word',则它不适用于只有两个单词且后面没有空格的字符串。
什么是这个任务的正确正则表达式?
你说得几乎对:
([^\s]+\s+[^\s]+)
假设您不需要对要使用的字符进行更严格的控制。
如果您需要同时匹配两个单词或仅匹配一个单词,您可以使用以下其中之一:
([^\s]+\s+[^\s]+|[^\s]+)
([^\s]+(?:\s+[^\s]+)?)
您可以使用preg_split()
来分割空格上的字符串,而不是尝试匹配单词。
如果你真的只想允许数字和字母[^\s]
不够严格。使用这个:
/[a-z0-9]+(\s+[a-z0-9]+)?/i