сопоставьте следующий шаблон

#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 )/