我有这条线;
preg_match_all('/((\w+)?)/'
但我想在同一个preg_match_all
中匹配这个模式\S+[\.]?\s?\S*
我如何在PHP中实现它
答案 0 :(得分:4)
OR
的方式是交替运算符|
$regex = "~\S+[\.]?\s?\S*|((\w+)?)~";
...但在我看来,这种模式需要美容工作。 :)强>
\S+[\.]?\s?\S*
可以整理为\S+\.?\s?\S*
,但\S+
会占用\.
,因此您可能需要一个懒惰的量词:\S+?\.?\s?\S*
..但这只是一些坚固的字符+一个可选的点+一个可选的空格+可选的固体字符......所以中间的句点可以去,因为\S
已经指定了它。我们最终得到\S+\s?\S*
((\w+)?)
只是\w*
,除非你需要一个捕获组。\S+\s?\S*
能够匹配所有\w*
个匹配项,但空字符串除外,因此您可以将其缩减为\S+\s?\S*
<强>最后强>
因此,你最终会得到类似的东西:
$regex = "~\S+\s?\S*~";
$count = preg_match_all($regex,$string,$matches);
如果你确实希望这个也能够匹配空字符串,就像((\w+)?)
那样,那么整个事情都是可选的:
$regex = "~(?:\S+\s?\S*)?~";
答案 1 :(得分:0)
使用逻辑OR(|
)运算符
$regex = "~/(?:((\w+)?)|\S+[\.]?\s?\S*)/~"
(?:)
代表一个非捕获组。
它将打印与第一个或第二个正则表达式匹配的字符串。