【问题标题】:How to use preg_match in php如何在 php 中使用 preg_match
【发布时间】:2022-01-06 16:43:35
【问题描述】:

收到如下回复:

response[0] = {Delta=[r3, r4], X=alarmOff, Y=heatOn}

并使用preg_match 我想从 response[0] 中提取并获得以下输出

输出: r3r4

我正在尝试使用以下内容提取输出:

preg_match('/^{Delta=(\[.*\, .*\])}$/', $response[0], $matches)

没有达到预期的输出

【问题讨论】:

  • 您的下一个问题是什么?如何提取r3r4 值?您是否需要验证字符串,或者这纯粹是关于提取/解析严格格式化的字符串?请解释您要通过此任务实现的目标。这种模式是否不适合您的真实数据? 3v4l.org/B9UIM如果是这样,为什么?
  • 作为响应的字符串我有一个类似 {Delta=[r3, r4], X=alarmOff, Y=heatOn} 的结构,但并不总是与 r3 和 r4 一起出现。随之而来的值来自 r1 .. r10 并且它们即将到来 {Delta=[ri, rj], X=alarmOff, Y=heatOn} 女巫 i 和 j 是从 1 到 10 的值。我想提取 ri 和rj 与此输出完全一致: rirj 。你给出的输出是这样的 [ri, rj]。感谢您的回答。
  • 请通过编辑向您的问题添加全部说明。这也应该解释“面临问题”是什么意思
  • 下面有人给了我答案,不过我编辑了这个问题。

标签: php regex


【解决方案1】:

使用regex101 测试正则表达式。

在您的代码中,如果您去掉右大括号和 $,则匹配有效并返回方括号中的文本。

$matchText = '' ;
$isMatch = preg_match('/^{Delta=(\[.*\])/', $response[0], $matches)
if ( $isMatch )
{
  $matchText = $matches[1] ;
  echo "got match: $matchText \n";
}

【讨论】:

    【解决方案2】:

    请尝试:

      $pattern = "/^{Delta=\[(.*)\](.*)$/";
        $response[0] = "/^{Delta=\[(.*)\](.*)$/";
        preg_match($pattern, $response[0], $matches);
        print_r($matches[1]);
    

    【讨论】:

    • 请不要在 Stack Overflow 上发布纯代码答案。
    【解决方案3】:

    可以使用否定字符类[^来排除不允许匹配的字符:

    {Delta=(\[[^][,]*,[^][]*])[^{}]*}
    
    • {Delta= 字面匹配
    • ( 捕获第 1 组
      • \[匹配[
      • [^][,]*, 匹配除[ 以外的任何字符0+ 次@ ] , 然后匹配,
      • [^][]* 可以选择匹配除[] 之外的任何字符
      • ]匹配]
    • )关闭第一组
    • [^{}]* 匹配除 {} 以外的任何字符 0+ 次
    • }匹配}

    Regex demo | PHP demo

    打印组 1 值的示例:

    $re = '/{Delta=(\[[^][,]*,[^][]*])[^{}]*}/';
    $str = '{Delta=[r3, r4], X=alarmOff, Y=heatOn}';
    
    preg_match($re, $str, $matches);
    
    print_r($matches[1]);
    

    输出

    [r3, r4]
    

    要获得 r3 和 r4 的单独匹配项并在结果中获得 r3r4,您可以使用 2 个捕获组:

     {Delta=\[([^][,]*),\h*([^][]*)][^{}]*}
    

    Regex demo | Php demo

    $re = '/{Delta=\[([^][,]*),\h*([^][]*)][^{}]*}/';
    $str = '{Delta=[r3, r4], X=alarmOff, Y=heatOn}';
    $result = preg_replace($re, '$1$2', $str);
    
    echo $result;
    

    输出

    r3r4
    

    【讨论】:

    • 我希望输出是这样的:r3r4 这可能吗?
    • @kolokasi 然后你可以用2组替换,见regex101.com/r/8o4FA3/1我已经更新了答案。
    • 非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2011-08-27
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多