PCRE正则表达式匹配前两个单词和数字

6
我需要一个正则表达式来匹配字符串中的前两个词(它们可以包含字母、数字、逗号和其他标点符号,但不能包含空格、制表符或换行符)。我的解决方案是([^\s]+\s+){2},但如果它匹配了像'123 word' *在'123 word, hello'*中这样的内容,它将无法在只有两个单词且没有空格的字符串上工作。
这个任务的正确正则表达式是什么?
3个回答

5
你几乎说对了:
(\S+\s+\S+)

假设您不需要更强的控制来使用哪些字符。

如果您需要匹配两个单词或仅一个单词,可以使用以下其中之一:

(\S+\s+\S|\S+)
(\S+(?:\s+\S+)?)

2

不要试图匹配单词,你可以使用preg_split()函数将字符串按空格分割。


2
+1,这是个好主意,但对于我来说,在preg_split()中不提到$limit就太过浪费了(你可能有非常长的字符串)。 - Vyktor
我曾考虑使用 preg_split,但是我有一些理由坚持使用正则表达式。无论如何,谢谢。 - Boris D. Teoharov
在 preg_split 中添加限制,Vyktor +1。 - Boris D. Teoharov

1

如果您真的只想允许数字和字母,[^\s] 不够严格。请使用以下代码:

/[a-z0-9]+(\s+[a-z0-9]+)?/i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接