По просьбам выше выкладываю.
Идем в этот
репозиторий.
Тащим оттуда три файла:
xmlp.inc,
progress.inc и
cucumbers.zip.
Сам пример по вашему вопросу в
cucumbers.zip.
xmlp.inc — парсер типа DOM.
progress.inc — просто вспомогательный, используется примером для замера и вывода на экран времени работы.
Нужно распаковать zip и в получившуюся директорию скопировать остальные два файла.
Собственно запускаем пример
example.php
Основная нужная вам функция:
replace_text()
Первые два параметра понятны и так — это текст для поиска и искомое.
Четвертый параметр
$ignore_tags — это массив имен тегов, которые мы пропускаем. В вашем случае по условию это 'A'. 'IMG' в примере можно исключить из этого массива — я просто так добавил )
Третий параметр — на что заменить найденные вхождения.
Но если этот третий параметр false(я так сделал опцию), то функция вернет не измененную строку, а массив оффсетов найденных вхождений.
Функция не останавливается на первом валидном вхождении — заменяет все, что найдет, и все, что подходит по условию.
Если вы не хотите, чтобы функция правила косяки HTML/XML ее собственному разумению, ну и заодно хотите заменить только определенные по счету вхождения, тогда вы можете получить оффсеты, и потом либо в цикле заменить все PHP-шной функцией
substr_replace(т.к. оффсеты вхождений у вас есть, а длину искомой строки вы тоже знаете), либо заменить только первое вхождение по первому оффсету из возвращенного массива.
В примере функции
frt1(),
frt2() и
frt3() идентичны по функционалу,
frt1() работает рекурсивно, в остальных от рекурсии я избавился.
frt3() от
frt2() отличается только ассоциативной индексацией стека(в глазах не так рябит и понятнее). А так все три эти функции делают одно и то же, первые две можно удалить.
Фактически используется
frt3() для поиска с заменой и
frt4() для получения оффсетов.
Файл
cucumbers.txt — это ваш пример, в
cucumbers1.txt я напихал еще
огурцов в разные места )))
Эти файлы используются как входные, ну там разберетесь, видно все по коду.
Результаты работы экзампла тоже в файлы выплевываются, вы их увидите в той же директории после отработки скрипта.
Будут вопросы — задавайте.