【问题标题】:Regex find specific tags for replace in a string正则表达式在字符串中查找要替换的特定标签
【发布时间】:2010-08-19 14:53:33
【问题描述】:

我有一个带有一些代码的字符串(例如:«USER_ID#USERNAME#STATUS»)用于替换,如下例所示:

你好«USER_ID#USERNAME#STATUS»,你喜欢«PROD_ID#PRODNAME#STATUS»吗?

我需要找到一种方法来获取所有代码以供将来替换。

我可以用这个正则表达式轻松找到一个代码:

/«(.*)#(.*)#(.*)»/ 

但找不到使用 preg_match_all 获取所有代码的方法。

有人可以帮助我吗?我正在使用 PHP。

谢谢

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    你必须让你的模式不贪婪:

    /«(.*?)#(.*?)#(.*?)»/
    

    this

    【讨论】:

      【解决方案2】:
      $string = "Hello «USER_ID#USERNAME#STATUS», do you like «PROD_ID#PRODNAME#STATUS»?";
      
      preg_match_all('/«(.*)#(.*)#(.*)»/U',$string,$matches);
      
      echo '<pre>';
      var_dump($matches);
      echo '</pre>';
      

      给予

      array(4) {
        [0]=>
        array(2) {
          [0]=>
          string(25) "«USER_ID#USERNAME#STATUS»"
          [1]=>
          string(25) "«PROD_ID#PRODNAME#STATUS»"
        }
        [1]=>
        array(2) {
          [0]=>
          string(7) "USER_ID"
          [1]=>
          string(7) "PROD_ID"
        }
        [2]=>
        array(2) {
          [0]=>
          string(8) "USERNAME"
          [1]=>
          string(8) "PRODNAME"
        }
        [3]=>
        array(2) {
          [0]=>
          string(6) "STATUS"
          [1]=>
          string(6) "STATUS"
        }
      }
      

      注意 Ungreedy 开关的使用。

      我相信很快就会有人修改正则表达式,使其本质上是不贪婪的

      【讨论】:

      • 抱歉,很糟糕,io 复制了您的示例以节省代码编写并投了反对票,给您带来了不便,并且您的代码正常
      • @Robert - 你最好使用 Artefacto 的例子,使模式不贪婪,而不是不贪婪的开关;不过还是谢谢
      • 下面是我的例子,我没有使用贪心匹配,(?&lt;x&gt;.*?)
      【解决方案3】:

      试试

      preg_match_all('/«(?<id>.*?)#(?<username>.*?)#(?<status>.*?)»/',$string,$matches);
      echo $matches[0]['username'];
      
      //And dont forget you have to loop.
      foreach($matches as $match)
      {
          echo $match['username'];
      }
      

      :)

      array(7) {
        [0]=>
        array(2) {
          [0]=>
          string(27) "«USER_ID#USERNAME#STATUS»"
          [1]=>
          string(27) "«PROD_ID#PRODNAME#STATUS»"
        }
        ["id"]=>
        array(2) {
          [0]=>
          string(7) "USER_ID"
          [1]=>
          string(7) "PROD_ID"
        }
        [1]=>
        array(2) {
          [0]=>
          string(7) "USER_ID"
          [1]=>
          string(7) "PROD_ID"
        }
        ["username"]=>
        array(2) {
          [0]=>
          string(8) "USERNAME"
          [1]=>
          string(8) "PRODNAME"
        }
        [2]=>
        array(2) {
          [0]=>
          string(8) "USERNAME"
          [1]=>
          string(8) "PRODNAME"
        }
        ["status"]=>
        array(2) {
          [0]=>
          string(6) "STATUS"
          [1]=>
          string(6) "STATUS"
        }
        [3]=>
        array(2) {
          [0]=>
          string(6) "STATUS"
          [1]=>
          string(6) "STATUS"
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 2014-07-20
        • 2021-12-19
        • 2021-11-20
        • 1970-01-01
        相关资源
        最近更新 更多