2

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

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

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

前任:

s34kr = 34

xX4rx = 4x

rs5t928X = 5928X 
4

2 回答 2

1

您可以使用前瞻断言,再加上这样的交替:

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

仅当后跟另一个字符或不是“x”的尾随字符时,它才匹配非数字。

选择

您可以考虑匹配:

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

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

于 2013-08-14T02:45:49.657 回答
0

尝试:

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

于 2013-08-14T02:59:02.233 回答