代码之家  ›  专栏  ›  技术社区  ›  Strae

Regexp:如何匹配所有不在模式中的东西?

  •  2
  • Strae  · 技术社区  · 16 年前

    我要匹配字符串中所有 不 匹配给定的模式;例如 [a-z] .

    考虑到字符串 abc4jkf8 4à3in ,我需要匹配 48 4à3

    我试过了 ([a-z])+(?![a-z]) 但这和我需要的正好相反。使用上面的字符串,这个regexp匹配 abcjkfin

    有什么想法吗?

    5 回复  |  直到 16 年前
        1
  •  7
  •   Guffa    16 年前

    使用负数集:

    ([^a-z]+)
    
        2
  •  2
  •   salathe    16 年前

    为什么不用preg\u替换。

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

    这就得到了预期的结果

        3
  •  2
  •   salathe    16 年前
    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
  •  1
  •   skyfoot    16 年前

    你需要匹配任何不是字母的字符。^告诉我们不要匹配alpha字符

    [^a-z]*
    
        5
  •  1
  •   Artefacto    16 年前
    $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');
    }
    

    给你想要的。