Предполагая входную строку +123-321+123 345
, используя функции регулярных выражений PHP, я хотел бы удалить все символы без цифр ( [^\d]
), за исключением символа +
в начале. +
Может быть или не быть, поэтому, учитывая строку 123-321+123 345
результат должен быть таким же ( 123321123345
).
В настоящее время обходным preg_replace('/[^\d]+/', '', $string)
является проверка на +
, а затем выполнение preg_replace('/[^\d]+/', '', $string)
, но я уверен, что для этой проблемы должно быть чисто регулярное решение.
Благодаря!
Попробуй это
/(?<!^)\D|^[^+\d]/
\D
совпадает с [^\d]
(?<!^)
– это отрицательный lookbehind, который гарантирует, что нет начала строки перед символом.
Это выражение будет соответствовать всем не цифрам, которые не являются началом строки.
preg_replace('/(?<!^)\D|^[^+\d]/', '', $string)
Используйте положительный lookbehind.
preg_replace('/(?<=\d)[^\d]+/', '', $string)