【发布时间】:2010-06-04 20:17:51
【问题描述】:
我想匹配字符串中不匹配给定模式的所有内容;例如[a-z]。
给定字符串abc4jkf8 4à3in,我需要匹配48 4à3。
我尝试过使用([a-z])+(?![a-z]),但这与我需要的完全相反。使用上面的字符串,这个正则表达式匹配abcjkfin。
有什么想法吗?
【问题讨论】:
我想匹配字符串中不匹配给定模式的所有内容;例如[a-z]。
给定字符串abc4jkf8 4à3in,我需要匹配48 4à3。
我尝试过使用([a-z])+(?![a-z]),但这与我需要的完全相反。使用上面的字符串,这个正则表达式匹配abcjkfin。
有什么想法吗?
【问题讨论】:
你使用负集:
([^a-z]+)
【讨论】:
为什么不使用 preg_replace。
$string = "abc4jkf8 4à3in";
echo preg_replace("/[a-z]/", "", $string);
这给出了想要的结果
【讨论】:
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 的字符。
【讨论】:
您需要匹配任何非 alpha 字符。 ^ 告诉不匹配 alpha 字符
[^a-z]*
【讨论】:
òèàìù 不包含在 [a-z] 集中
\p{IsLetter},其中包括您可以想象的所有 Unicode 重音字符(负字符类:\P{IsLetter} 匹配任何不 一个字母)。您可以在字符类内部和外部使用字符快捷方式。
$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');
}
给你想要的。
【讨论】: