【问题标题】:How to get a number wrapped in parentheses from a string?如何从字符串中获取用括号括起来的数字?
【发布时间】:2018-02-27 01:15:07
【问题描述】:

我有这个代码

$string = "23 asdasdasdasd.sma(33) asda sdas asd 23 2 3 54232 23d asd";

$reg = "??";
preg_match($reg, $string, $matches);
var_dump($matches);

我想得到这个号码:33

【问题讨论】:

    标签: php regex integer preg-match parentheses


    【解决方案1】:

    由于您在代码中调用preg_match(),并且您的输入数据只有一个可用的目标数字,因此您可以准确地使用这种最快/最简短的模式:

    ~\(\K\d+~ (Pattern Demo)(5 步,无捕获组,无环视)

    模式细分:

    ~        #pattern delimiter
    \(       #match (
    \K       #restart the fullstring match (forget previously matched characters)
    \d+      #match one or more digits greedily
    ~        #pattern delimiter
    

    *为了清楚起见,我想声明我的模式假设紧跟在( 之后的数字将跟随)。这就是示例输入提供的内容。

    如果需要匹配) 以保持准确性,那么捕获组(Tim 的方式)将是下一个最有效的方式。所有使用环视的正确模式都会比不使用环视的正确模式慢。

    【讨论】:

      【解决方案2】:

      我相信正则表达式应该是这样的

      $reg = "\(([0-9]+)\)";
      

      【讨论】:

      • 只有代码的答案在 StackOverflow 上的价值很低。请始终发布正确的方法和解释,以教育成千上万的未来 SO 读者。
      【解决方案3】:

      尝试使用模式\((\d+)\)

      preg_match("/\((\d+)\)/", $string, $matches);
      

      Demo

      第一个捕获组将包含括号内的数字。

      【讨论】:

        【解决方案4】:

        你也可以使用\(\K\d+(?=\))

        那会匹配:

        \( # 匹配 ( \K # 重置报告匹配的起点 \d+ # 匹配一位或多位数字 (?=\)) # 肯定的前瞻,断言以下是 )
        $reg = '/\(\K\d+(?=\))/';
        

        号码将在$matches[0];

        Php demo

        【讨论】:

          猜你喜欢
          • 2021-10-14
          • 1970-01-01
          • 1970-01-01
          • 2021-09-21
          • 2017-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多