preg_replace除字符串开头的+之外的所有非数字字符

kri*_*xon 3 php regex replace

假设输入字符串+123-321+123 345,使用PHP的正则表达式函数,我想删除所有非数字([^\d])字符,除了+开头的字符.的+可能或可能不存在,所以给出的字符串123-321+123 345的结果应该是相同的(123321123345).

目前的解决方法是检查+,然后运行preg_replace('/[^\d]+/', '', $string),但我确信必须有一个纯正则表达式来解决这个问题.

谢谢!

ste*_*ema 5

试试这个

/(?<!^)\D|^[^+\d]/
Run Code Online (Sandbox Code Playgroud)

\D 是一样的 [^\d]

(?<!^) 是一个负面的lookbehind,确保在不是数字之前没有字符串的开头.

此表达式将匹配不是字符串开头的所有非数字.

preg_replace('/(?<!^)\D|^[^+\d]/', '', $string)
Run Code Online (Sandbox Code Playgroud)