【问题标题】:How go get everything from between parenthesis in PHP?如何从 PHP 中的括号之间获取所有内容?
【发布时间】:2011-04-09 17:31:09
【问题描述】:
Array(
[1] => put returns (between) paragraphs
[2] => (for) linebreak (add) 2 spaces at end
[3] => indent code by 4 (spaces!)
[4] => to make links
)

想要在括号内获取文本(对于每个值):

  1. 只取第一个匹配项
  2. 从值中删除此匹配项
  3. 将所有匹配项写入新数组

函数数组应该如下所示:

Array(
[1] => put returns paragraphs
[2] => linebreak (add) 2 spaces at end
[3] => indent code by 4
[4] => to make links
)
Array(
[1] => between
[2] => for
[3] => spaces!
[4] => 
)

解决办法是什么?

【问题讨论】:

    标签: php regex arrays string preg-match


    【解决方案1】:

    我会使用正则表达式/\((\([^()]*\)|[^()]*)\)/(这将匹配一对或两对括号)和preg_split

    $matches = array();
    foreach ($arr as &$value) {
        $parts = preg_split('/\((\([^()]*\)|[^()]*)\)/', $value, 2, PREG_SPLIT_DELIM_CAPTURE);
        if (count($parts) > 1) {
            $matches[] = current(array_splice($parts, 1, 1));
            $value = implode('', $parts);
        }
    }
    

    使用带有 PREG_SPLIT_DELIM_CAPTURE 标志的preg_split 将在结果数组中包含匹配的分隔符。所以找到了一个匹配,至少有三个部分。在这种情况下,第二个成员就是我们正在寻找的那个。该成员使用array_splice 删除,它也返回已删除成员的数组。为了获得被移除的成员,current 用于array_splice 的返回值。然后将其余成员重新组合在一起。

    【讨论】:

      【解决方案2】:

      假设您的意思是 (between) 而不是 ((between))

      $arr = array(
                      0 => 'put returns (between) paragraphs',
                      1 => '(for) linebreak (add) 2 spaces at end',
                      2 => 'indent code by 4 (spaces!)',
                      3 => 'to make links');
      var_dump($arr);
      
      $new_arr = array();
      foreach($arr as $key => &$str) {
              if(preg_match('/(\(.*?\))/',$str,$m)) {
                      $new_arr[] = $m[1]; 
                      $str = preg_replace('/\(.*?\)/','',$str,1);
              }   
              else {
                      $new_arr[] = ''; 
              }   
      }
      var_dump($arr);
      var_dump($new_arr);
      

      Working link

      【讨论】:

        猜你喜欢
        • 2022-01-10
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多