Php preg_replace, заменить только подстроку соответствующего элемента - PullRequest
0 голосов
/ 28 февраля 2019

С помощью preg_replace я могу заменить подходящую подстроку другой, например, такой:

echo preg_replace("yellow", "blue", "sky is yellow");
// print "sky is blue"

Но возможно ли заменить только подстроку в строке поиска другой строкой?

Например, я хотел бы изменить этот текст:

<a>foo</a>
<a class="changehere">foo</a>
<a>foo</a>

на

<a>foo</a>
<a class="changehere">FAA</a>
<a>foo</a>

Я пробовал это:

echo preg_replace("@<a class="changehere">(foo)</a>@", "FAA", $text);

Новся строка изменена на FAA ... Как найти подстроку, в зависимости от окружающего символа, и заменить только подстроку?

Спасибо за помощь :)!Я надеюсь, что я ясен

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы не анализируете HTML / XML с помощью регулярных выражений, вы можете использовать это регулярное выражение:

php > $text = '<a class="changehere">FAA</a>';
php > echo preg_replace('@<a class="changehere">\Kfoo(?=</a>)@', "FAA", $text);
<a class="changehere">FAA</a>

Подробности:

  • \K: сбрасывает всю сопоставленную информацию
  • (?=</a>): Смотрим вперед, чтобы утверждать, что у нас </a> впереди текущей позиции
...