正则表达式:如何匹配不属于模式的所有内容?

时间:2010-06-04 10:33:55

标签: php regex

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

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

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

有什么想法吗?

5 个答案:

答案 0 :(得分:7)

您使用否定集:

([^a-z]+)

答案 1 :(得分:2)

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的每个字符。

答案 2 :(得分:2)

为什么不使用preg_replace。

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

这给出了期望的结果

答案 3 :(得分:1)

你需要匹配任何没有alpha的角色。 ^告诉不匹配alpha字符

[^a-z]*

答案 4 :(得分:1)

$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');
}

给出你想要的东西。