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