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


preg_replace all non-digit characters except + at start of string

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

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

谢谢!

试试这个

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

'D[^'d] 相同

(?<!^)是一个负查找,它确保在非数字之前没有字符串的开头。

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

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

使用正向查找。

preg_replace('/(?<='d)[^'d]+/', '', $string)