Php preg_replace()删除除尾部x以外的所有非数字字符

Php preg_replace()删除除尾部x以外的所有非数字字符,php,preg-replace,Php,Preg Replace,我有以下代码来删除所有非数字字符: $num = preg_replace('/\D/', '', $num); 我想让它删除所有数字字符,除了任何尾随的X(不区分大小写) 例: 您可以使用前瞻断言,再加上如下替代: preg_replace('/\D(?=.)|[^xX]$/', '', $num); 仅当后跟另一个字符或尾随字符不是“x”时,它才匹配非数字 备选方案 你可以考虑匹配: if (preg_match_all('/\d+|[xX]$/', $num, $matches)) {

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

$num = preg_replace('/\D/', '', $num);
我想让它删除所有数字字符,除了任何尾随的X(不区分大小写)

例:


您可以使用前瞻断言,再加上如下替代:

preg_replace('/\D(?=.)|[^xX]$/', '', $num);
仅当后跟另一个字符或尾随字符不是“x”时,它才匹配非数字

备选方案

<>你可以考虑匹配:

if (preg_match_all('/\d+|[xX]$/', $num, $matches)) {
     $num = join('', $matches[0]);
} else {
     $num = '';
}
这将匹配任意数量的数字或尾随的“x”,然后将捕获的匹配连接在一起。

尝试:


$num=preg\u replace('/(?:(?!\b\d+[xX]?\b)。*(\b\d+[xX]?\b)/','$1',$num)

我相信你的意思是“除了尾随的X之外,所有的非数字字符”。@AndyLester,我确实这么认为。尾随的X可以不止一个吗?
if (preg_match_all('/\d+|[xX]$/', $num, $matches)) {
     $num = join('', $matches[0]);
} else {
     $num = '';
}