#php #preg-replace
#php #preg-заменить
Вопрос:
У меня много (p. #) подобных (стр. 13) (стр. 234) в строке, и я хочу их удалить. Я использовал следующий шаблон для сопоставления, но он не работает
preg_replace('/(p.*)/','',$string);
( to escape (
p is p
. to escape .
Здесь мне нужна некоторая помощь. Спасибо.
Ответ №1:
Это регулярное выражение, которое вы ищете:
(p.s d )
Или, в вашем коде:
preg_replace('/(p.s d )/', '', $string);
Вот скрипка.
Комментарии:
1. Большое вам спасибо за скрипку!. Я обнаружил, что пробел в html равен amp;nbsp; поэтому я изменил шаблон на (p . amp;nbsp; d ). Все готово.
Ответ №2:
В вашем регулярном выражении нет ничего, что соответствовало бы номеру страницы. Вы просто сопоставляете что-то вроде (p.......)
.
preg_replace('/(p.s*d s*)/', '', $string);
Ответ №3:
* означает сопоставление 0 или более из предыдущего элемента, поэтому он будет работать над . символ в вашем примере. Возможно, вам может понадобиться что-то вроде:
preg_replace('/(p. ?[0-9] )/','',$string);
Это соответствует:
- (стр.
- Затем пробел, который? делает необязательным
- Затем одна или несколько цифр 0-9, из-за
- Затем)
Надеюсь, это поможет
Ответ №4:
Во-первых, это вообще preg_replace
функция, а не процедура, если вы хотите увидеть какие-либо изменения, вам нужно написать:
$str = preg_replace($pattern, $replacement, $str);
В вашем шаблоне вы написали, что .*
это означает литерал . ноль или более раз, я предполагаю, что это не то, что вы хотите. Я предполагаю, что вы хотели написать ..*
литерал . и ноль или более символов. Но это тоже не работает по двум причинам: это не проверяет, являются ли символы цифрами, и, поскольку *
квантификатор является жадным, .*
сопоставит все символы до конца строки и выполнит обратный путь до последней круглой скобки.
Хорошим способом, вероятно, является шаблон Barmar, который проверяет наличие хотя бы цифры (используя
квантификатор) или такой же более строгий (без переменного количества пробелов):
/(p. d )/