【问题标题】:RegEx in PHP: find the first matching stringPHP中的RegEx:找到第一个匹配的字符串
【发布时间】:2016-10-06 20:14:05
【问题描述】:

我想在很长的文本中找到第一个匹配的字符串。我知道我可以使用 preg_grep() 并获取返回数组的第一个元素。但是,如果我只需要第一场比赛(或者我知道事先只有一场比赛),那么这样做是没有效率的。有什么建议吗?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    preg_match()?

    preg_match() 返回的数量 次模式匹配。那将是 0 次(不匹配)或 1 次 因为 preg_match() 将停止 在第一场比赛之后搜索。 preg_match_all() 相反会 一直持续到结束 主题。如果 preg_match() 返回 FALSE 发生错误。

    【讨论】:

    • 但是我怎样才能提取匹配的字符串呢?似乎通过调用 preg_match() 我只知道是否有匹配
    • preg_match() 的第三个参数(如果给定)将填充匹配项。
    • 啊..是的..为什么他们不把它变成一个单独的函数?容易忽略。
    【解决方案2】:

    下面是一个例子:

    $string = 'A01B1/00asdqwe';
    $pattern = '~^[A-Z][0-9][0-9][A-Z][0-9]+~';
    
    if (preg_match($pattern, $string, $match) ) {
      echo "We have matched: $match[0]\n";
    } else {
      echo "Not matched\n";
    }
    

    您可以尝试print_r($match) 检查数组结构并测试您的正则表达式。

    正则表达式的旁注:

    • 正则表达式中的波浪号 ~ 只是环绕所需的分隔符 模式。
    • 插入符号 ^ 表示我们从一开始就匹配 字符串(可选)
    • 加号 + 表示我们可以有一个或 更多的整数。 (这样 A01B1A01B12A01B123 也会 匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多