【问题标题】:Preg_match identifierPreg_match 标识符
【发布时间】:2013-03-20 16:06:28
【问题描述】:

我想从我的标识符中获取匹配项。

我在{/describe:foo} 有一个这样的字符串,我正在尝试 匹配{/describe:} 以返回foo,但我没有得到正确的正则表达式,会 有人介意指出我做错了什么吗?这是我的比赛。

$regexp = '/\{describe:(.*?)\}/i';
$query  = '{/describe:foo}'; 
preg_match($regexp, $query, $match);

print_r($match); // (bool) false

背景 我希望这可以帮助其他人,这样做的一个很好的理由是创建可替换的 可以解释和替换的字符串中的控制词,这是一个示例 将在控制字上运行描述符的 RESTful 海报。

  if (preg_match('/\{describe:(.*?)\}/i', $_POST['query'], $match))
  {
        // Describe Salesforce Object from internal POST tool
        print_r($SforceConnection->describeSObjects($match[1]));
        exit;
  }

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    您的正则表达式中缺少正斜杠:

    $regexp = '/\{\/describe:(.*?)\}/i';
    

    或:

    $regexp = '#\{/describe:(.*?)\}#i';
    

    【讨论】:

      【解决方案2】:
      $regexp = '/\{\/describe\:(.*?)\}/i';
      $query  = '{/describe:foo}';
      preg_match($regexp, $query, $match);
      
      print_r($match); // Array ( [0] => {/describe:foo} [1] => foo )
      

      【讨论】:

        【解决方案3】:
        $regexp = '#{/describe:([^}]+)}#i';
        $query  = '{/describe:foo}'; 
        preg_match($regexp, $query, $match);
        
        print_r($match);
        

        【讨论】:

          【解决方案4】:

          用最简单的方式你可以使用这个:(?<=\/describe:).*(?=})

          【讨论】:

          • 抛出一个 unknown modifier . 只是提示
          • 我通常不认为环视是“最简单的”:)
          • @Adrian - 是的...我更倾向于只获取完整匹配,没有子模式。
          • @ehime - 有趣...我通过 RegExr 运行它,但实际上并没有通过 PHP 运行它。
          • @Daedalus 这可能是问题所在,我知道 PHP 的正则表达式风格是 PCRE,这可能会影响您的查询结果php.net/manual/en/book.pcre.php
          【解决方案5】:

          试试(/好像在描述之前丢失了):

          $regexp = '/\{/describe:(.*?)\}/i'
          

          【讨论】:

          • 斜杠是正则表达式分隔符,是必需的(好吧,需要一些分隔符,它不一定是斜杠)
          • @Adrian 编辑了我的帖子,在他的正则表达式中缺少/before describe
          猜你喜欢
          • 1970-01-01
          • 2018-11-15
          • 1970-01-01
          • 2011-08-25
          • 1970-01-01
          • 2012-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多