preg_replace все нецифровые символы, кроме + в начале строки

Предполагая входную строку +123-321+123 345 , используя функции регулярных выражений PHP, я хотел бы удалить все символы без цифр ( [^\d] ), за исключением символа + в начале. + Может быть или не быть, поэтому, учитывая строку 123-321+123 345 результат должен быть таким же ( 123321123345 ).

В настоящее время обходным preg_replace('/[^\d]+/', '', $string) является проверка на + , а затем выполнение preg_replace('/[^\d]+/', '', $string) , но я уверен, что для этой проблемы должно быть чисто регулярное решение.

Благодаря!

Related of "preg_replace все нецифровые символы, кроме + в начале строки"

Попробуй это

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

\D совпадает с [^\d]

(?<!^) – это отрицательный lookbehind, который гарантирует, что нет начала строки перед символом.

Это выражение будет соответствовать всем не цифрам, которые не являются началом строки.

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

Используйте положительный lookbehind.

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