#php #regex
#php #регулярное выражение
Вопрос:
В настоящее время у меня есть это регулярное выражение:
$text = preg_replace("#<sup>(?:(?!</?sup).)*$key(?:(?!</?sup).)*</sup>#is", '<sup>'.$val.'</sup>', $text);
Цель регулярного выражения — взять <sup>[stuff here]$key[stuff here]</sup>
и удалить содержимое в [stuff here]
расположениях.
Что я на самом деле хотел бы сделать, это не удалить $key[stuff here]</sup>
, а просто переместить материал в $key</sup>[stuff here]
Я пробовал использовать $1-$4
и \1-\4
, и, похоже, я не могу получить текст, который будет добавлен после </sup>
Комментарии:
1. Не используйте regexp с HTML!
2. Здесь это было весьма спорно. Но, как это показывает, в некоторых случаях regex подходит даже для HTML.
Ответ №1:
Попробуйте это;
$text = preg_replace(
'#<sup>((?:(?!</?sup).)*)'.$key.'((?:(?!</?sup).)*)</sup>#is',
'<sup>'.$val.'</sup>12',
$text
);
Бит (?:…) * на самом деле не является вложенным шаблоном и поэтому недоступен с использованием обратных ссылок. Кроме того, если вы используете ‘ вместо чем ‘ для строковых литералов, вам нужно будет только экранировать и ‘
// Приветствия, Мортен
Ответ №2:
Вы должны объединить preg_match(); и preg_replace();
- Вы сопоставляете желаемый материал с помощью preg_match() и сохраняете в переменной.
- Вы заменяете тем же регулярным выражением пустую строку.
- Добавьте переменную, в которую вы сохраняете, в конце.