PHP:如何使preg_match仅匹配第一次出现?

问题描述 投票:0回答:2

preg_match($ pattern,$ subject,$ matches),$ matches似乎是所有匹配的数组,我只需要第一次出现的正则表达式模式,我希望匹配在找到匹配和存储后立即停止它在$ match中。可能吗?谢谢。

我不是在谈论贪婪的比赛(。*和。*?),一个例子如下,

$str = 'abcd,abed,abfd,abgd';
preg_match("/ab.d/", $str, $match);

我希望它只找到abcd而不是任何进一步的匹配,因为进一步的匹配对我来说是无用的,我认为需要更多的时间来处理。

php regex preg-match
2个回答
4
投票

我想你想这样: -

<?php
$str = 'abcd,abed,abfd,abgd';
if(preg_match("/ab.d/",$str ,$matches) !== false){ // check any match found or not
    echo "match found:".$matches[0]; // when found print that match
}//after printing execution will stops successfully.
?>

输出: - https://3v4l.org/bErZL


5
投票

preg_match做你想要的 - 在第一场比赛后停止,而不是preg_match_all,找到所有出现。在你的例子中:

$str = 'abcd,abed,abfd,abgd';
preg_match("/ab.d/", $str, $match);
echo $match[0];//abcd

如果提供了匹配,那么它将填充搜索结果。 $ matches [0]将包含与完整模式匹配的文本,$ matches [1]将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.