6

我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母、数字、逗号和其他标点符号,但不包含空格、制表符或换行符)。我的解决方案是([^\s]+\s+){2},但如果它匹配类似:'123 word' *in '123 word, hello'*,它不适用于只有两个单词且后面没有空格的字符串。

这项任务的正确正则表达式是什么?

4

3 回答 3

5

你几乎是对的:

([^\s]+\s+[^\s]+)

假设您不需要更严格地控​​制要使用的字符。

如果您需要同时匹配两个词或只匹配一个词,您可以使用其中之一:

([^\s]+\s+[^\s]+|[^\s]+)
([^\s]+(?:\s+[^\s]+)?)
于 2012-10-12T21:12:14.793 回答
2

您可以使用 . 分隔空格上的字符串,而不是尝试匹配单词preg_split()

于 2012-10-12T21:12:58.377 回答
1

如果你真的只想允许数字和字母[^\s]是不够的限制。用这个:

/[a-z0-9]+(\s+[a-z0-9]+)?/i
于 2012-10-12T21:11:35.287 回答