【问题标题】:Preg match a string to find all encounters of -> using regular expressionsPreg 匹配一个字符串以查找所有遇到的 -> 使用正则表达式
【发布时间】:2015-03-28 17:35:59
【问题描述】:

我在使用正则表达式时遇到了一点技术难题,我正在尝试查看一个字符串,假设我们有这个字符串:

$string = "error->400";

还有一个字符串:

$string = "error->debug->warning";

例如,我基本上是在尝试做一个preg_match(),它在其中的任何-> 实例上都返回true。

这是我的尝试,但我不明白为什么它不起作用:

preg_match("/^[->]*$/", $string);

对于我通常缺少的自定义字符是否有一般规则?

谢谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    现在,^[->]*$ 从头到尾匹配任意数量的“-”或“>”字符。您必须使用组,而不是角色类,并且不需要锚点。使用它来检查 $string 中是否存在“->”:

     preg_match("/(->)/", $string);
    

    看看example

    【讨论】:

    • 啊,我明白了,很简单,但就是这样。非常感谢。我喜欢那个正则表达式工具,它们实际上是一种轻松获取 -> 索引的方法吗?那么它们在字符串中的开始和结束位置。
    • 所以像 preg_match("/([^\}]+)/", $string) 这样的东西会得到 ( ) 内的所有内容吗?他们是一种将其限制为一个结果的方法吗?跨度>
    • @Matthew:要获取索引,请查看stackoverflow.com/questions/2451915/… 帖子。至于/([^\}]+)/,它将匹配除}以外的任何字符1次或多次(贪婪)并保持第1组的整个匹配。
    • 所以我想如果你想获得第一次出现你会做类似 preg_match("/(->)/", $string, $output);然后只是得到 $output[0] 或者有没有办法将正则表达式限制为第一次出现?
    • @Matthew:要获得第一次出现,您可以使用 ^.*?\K->(?=.*$) 正则表达式。请参阅regex101.com/r/iZ7tO4/2 的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2014-11-26
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多