我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母、数字、逗号和其他标点符号,但不白色、制表符或换行符)。我的解决方案是([^\s]+\s+){2},但如果它匹配类似于:'123 word' *in '123 word,hello'*的内容,则它不适用于只有两个单词且后面没有空格的字符串。这个任务的正确正则表达式是什么?
([^\s]+\s+){2}
kdfy810k1#
你说得差不多对:
(\S+\s+\S+)
假设您不需要对使用哪些字符进行更强的控制。如果需要同时匹配两个单词或仅匹配一个单词,可以使用以下方法之一:
(\S+\s+\S|\S+) (\S+(?:\s+\S+)?)
vhmi4jdf2#
您可以使用preg_split()在空白处拆分字符串,而不是尝试匹配单词。
preg_split()
mu0hgdu03#
如果你真的只想允许数字和字母,[^\s]就不够严格了。
[^\s]
/[a-z0-9]+(\s+[a-z0-9]+)?/i
3条答案
按热度按时间kdfy810k1#
你说得差不多对:
假设您不需要对使用哪些字符进行更强的控制。
如果需要同时匹配两个单词或仅匹配一个单词,可以使用以下方法之一:
vhmi4jdf2#
您可以使用
preg_split()
在空白处拆分字符串,而不是尝试匹配单词。mu0hgdu03#
如果你真的只想允许数字和字母,
[^\s]
就不够严格了。