我有以下代码删除所有非数字字符:
$num = preg_replace('/\D/', '', $num);
我想删除除了任何尾随X(不区分大小写)之外的所有数字字符。
例如:
s34kr = 34
xX4rx = 4x
rs5t928X = 5928X
答案 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);