Заменить текст в строке исключить текст привязки - PullRequest
0 голосов
/ 15 ноября 2018

Я хотел бы искать слова в строке и заменить первое вхождение в этой строке.Также я хотел бы исключить текст, который находится только между тегами.Это означает, что текст с гиперссылкой не должен заменяться.

Это должно проверять новую строку в новой строке.

Пример:

Вот моя строка.Я хотел бы заменить мою строку.В этой строке будет заменен только 1 my, который является первым и не имеет привязки.

Замените my на "This"

Output.

Вот моя строка.Я хотел бы заменить эту строку.В этой строке будет заменен только 1 мой, который является первым и не имеет привязки.

Спасибо

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете использовать это регулярное выражение, чтобы соответствовать первому вхождению "my", которое не содержится только в теге <a> </a>.

^.*?\Kmy(?![^>]*\/\s*a\s*>)

и заменить его на "this", как вы хотите в своем посте.

Объяснение:

  • ^ -> Начало ввода
  • .*? -> Совпадение любых символов в не- жадный способ (чтобы захватить первое вхождение моего)
  • \K -> Сбросить все совпадения, чтобы совпадало только «мое», которое необходимо заменить на «this»
  • (?![^>]*\/\s*a\s*>) -> Отрицательный взгляд вперед, чтобы убедиться, что «мой» текст не содержится в теге <a> </a>.

Демо

Вот пример кода PHPдля того же,

$str = 'Here is < a > my < / a > String. I Would like to replace my string. In this string only 1 my will be replace which is first and doesn\'t has anchor link.';
$res = preg_replace('/^.*?\Kmy(?![^>]*\/\s*a\s*>)/','this',$str);
echo $res;

Это дает следующий результат, как вы ожидаете,

Here is < a > my < / a > String. I Would like to replace this string. In this string only 1 my will be replace which is first and doesn't has anchor link.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...