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

时间:2012-03-27 07:58:52

标签: php regex replace

假设输入字符串+123-321+123 345,使用PHP的正则表达式函数,我想删除所有非数字([^\d])字符,但开头的+字符除外。 +可能存在也可能不存在,因此在字符串123-321+123 345的情况下,结果应该相同(123321123345)。

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

谢谢!

2 个答案:

答案 0 :(得分:5)

试试这个

/(?<!^)\D|^[^+\d]/

\D[^\d]

相同

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

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

preg_replace('/(?<!^)\D|^[^+\d]/', '', $string)

答案 1 :(得分:0)

使用积极的外观。

preg_replace('/(?<=\d)[^\d]+/', '', $string)
相关问题