加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 正则表达式匹配%之间的字符串

发布时间:2020-12-13 22:18:26 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试匹配%s中包含的子字符串,但preg_match_all似乎在同一行中同时包含多个子字符串. 代码如下所示: preg_match_all("/%.*%/","%hey%_thereyou're_a%rockstar%nyo%there%",$matches);print_r($matches); 这产生以下输出. Array( [0] = Array ( [0] =
我正在尝试匹配%s中包含的子字符串,但preg_match_all似乎在同一行中同时包含多个子字符串.

代码如下所示:

preg_match_all("/%.*%/","%hey%_thereyou're_a%rockstar%nyo%there%",$matches);
print_r($matches);

这产生以下输出.

Array
(
    [0] => Array
        (
            [0] => %hey%_thereyou're_a%rockstar%
            [1] => %there%
        )

)

但是我希望它能生成以下数组:

[0] => %hey%
[1] => %rockstar%
[2] => %there%

我错过了什么?

解决方法

更换 ”.”在您的正则表达式中使用“[^%]”:

preg_match_all("/%[^%]*%/",$matches);

发生的事情是“.”尽可能地“贪婪地”匹配,包括一切直到最后的%.用否定的字符类“[^%]”替换它意味着它将匹配除百分之外的任何东西,这将使它只匹配你想要的位.

另一种选择是放置一个“?”在点之后,它告诉它“不要贪婪”:

preg_match_all("/%.*?%/",$matches);

在上面的例子中,任何一个选项都可以使用,但有时您可能会搜索大于单个字符的内容,因此否定的字符类将无济于事,因此解决方案是取消对该匹配的贪婪.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读