【问题标题】:Splitting a string containing <if> <else> with regexps使用正则表达式拆分包含 <if> <else> 的字符串
【发布时间】:2009-07-28 16:46:13
【问题描述】:

我的正则表达式很差,但对于了解正则表达式的人来说,这应该很简单。

基本上我会有这样的字符串:

<if>abc <else>xyz

我想要一个正则表达式,所以如果字符串包含&lt;if&gt; &lt;else&gt;,它会将字符串分成两部分并返回&lt;if&gt;&lt;else&gt; 之后的两个字符串。在上面的示例中,它可能会返回一个数组,其中第一个元素是 abc,第二个元素是 xyz。我也对不使用正则表达式的方法持开放态度。

有什么想法吗?

【问题讨论】:

    标签: php regex string


    【解决方案1】:
    // $subject is you variable containing string you want to run regex on
    $result = preg_match('/<if>(.*)<else>(.*)/i', $subject, $matches);
    
    // $matches[0] has the full matched text
    // $matches[1] has if part
    // $matches[2] has else part
    

    末尾的/i 使搜索区分大小写以允许&lt;if&gt;&lt;else&gt;&lt;IF&gt; &lt;elSE&gt;

    【讨论】:

    • 在调用它之前我需要用$matches=array(); 设置$matches 吗?如果字符串不包含 并且我在调用此行后尝试访问 $matches 会发生什么?
    • 为了回答我上面的问题,如果找不到 &lt;if&gt; &lt;else&gt;,$matches 将设置为空数组()
    【解决方案2】:

    在简单的情况下,正则表达式可以解决这个问题。对于更复杂的情况(发生嵌套),您可能会发现更容易解析字符串并使用简单的堆栈来获取所需的数据。

    【讨论】:

      【解决方案3】:

      你要找的正则表达式是:

      /<if>(.*)<\/else>(.*)/
      

      不过,如果有多个&lt;else&gt;,就会有问题。可以根据您想要的结果进行编辑。

      另请注意,即使&lt;if&gt; 之前存在某些内容,此正则表达式也可以工作。

      在 PHP 中,您需要如下代码:

      <?php
      $string = '<if>abc</else>xyz';
      preg_match_all("/<if>(.*)<\/else>(.*)/", $string, $matches);
      foreach($matches[0] as $value) 
        {
          echo $value;
        }
      ?> 
      

      【讨论】:

      • 你必须在 else 附近逃离 /
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多