preg_replace()删除所有非数字字符,除了尾随x

时间:2013-08-14 02:36:32

标签: php preg-replace

我有以下代码删除所有非数字字符:

$num = preg_replace('/\D/', '', $num);

我想删除除了任何尾随X(不区分大小写)之外的所有数字字符。

例如:

s34kr = 34

xX4rx = 4x

rs5t928X = 5928X 

2 个答案:

答案 0 :(得分:1)

你可以使用先行断言,再加上这样的替换:

preg_replace('/\D(?=.)|[^xX]$/', '', $num);

如果后跟另一个字符或不是'x'的尾随字符,则仅匹配非数字。

<强>替代

您可以考虑匹配:

if (preg_match_all('/\d+|[xX]$/', $num, $matches)) {
     $num = join('', $matches[0]);
} else {
     $num = '';
}

匹配任意数量的数字或尾随'x',然后将捕获的匹配连接在一起。

答案 1 :(得分:0)

尝试:

$num = preg_replace('/(?:(?!\b\d+[xX]?\b).)*(\b\d+[xX]?\b)?/', '$1', $num);