【问题标题】:Regexp: how to match everythings that is not into a pattern?正则表达式:如何匹配不属于模式的所有内容?
【发布时间】:2010-06-04 20:17:51
【问题描述】:

我想匹配字符串中匹配给定模式的所有内容;例如[a-z]

给定字符串abc4jkf8 4à3in,我需要匹配48 4à3

我尝试过使用([a-z])+(?![a-z]),但这与我需要的完全相反。使用上面的字符串,这个正则表达式匹配abcjkfin

有什么想法吗?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    你使用负集:

    ([^a-z]+)
    

    【讨论】:

    • 那么,你没试过那个。
    【解决方案2】:

    为什么不使用 preg_replace。

    $string = "abc4jkf8 4à3in";
    echo preg_replace("/[a-z]/", "", $string);
    

    这给出了想要的结果

    【讨论】:

      【解决方案3】:
      preg_match_all('/([^a-z]+)/si', $code, $result, PREG_PATTERN_ORDER);
      $unmached = "";
      for ($i = 0; $i < count($result[0]); $i++) {
          $unmached .= $result[0][$i];
      }
      echo $unmached;
      

      [^a-z] 匹配所有不是 a-z 的字符。

      【讨论】:

        【解决方案4】:

        您需要匹配任何非 alpha 字符。 ^ 告诉不匹配 alpha 字符

        [^a-z]*
        

        【讨论】:

        • a-z 是否包含变音符号或带有 ä、ü、á、é 等重音符号的字母?
        • @Simon: 不,AFAIK òèàìù 不包含在 [a-z] 集中
        • @Simon:@DaNiel 是对的,a-z 不包括重音符号。如果您想匹配它们,您可能需要自己添加它们,例如 [àä]
        • @Simon: 或使用\p{IsLetter},其中包括您可以想象的所有 Unicode 重音字符(负字符类:\P{IsLetter} 匹配任何不 一个字母)。您可以在字符类内部和外部使用字符快捷方式。
        【解决方案5】:
        $a = "abc4jkf8 4à3in";
        
        function stringConcat($a, $b) { return $a.$b; }
        
        if (preg_match_all("/[^a-z]/", $a, $matches)) {
            echo array_reduce(reset($matches), 'stringConcat');
        }
        

        给你想要的。

        【讨论】:

        • 这与我现在所做的类似,但我只想用 1 个 preg_replace 来完成
        猜你喜欢
        • 2011-04-13
        • 2021-05-26
        • 2022-08-21
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多