В контексте создания программы для автоматизации этого, лучшее, более твердое, быстрое и более сильное решение - я согласен с комментарием к OP - будет использовать DOM для поиска / анализа / запроса тегов, получения Значения, затем измените и перепишите их. На вашем конкретном примере я предполагаю, что это одноразовая операция поиска и замены, или что-то, что вы не возражаете - запуск замены вручную время от времени ...
Perl s // - выражение (в данном случае, я думаю, p !! - выражение), которое было протестировано только в эмуляторе:
s!(?<=,)(\s?)([^<,]+)(?=,|</i>)|(?<=<i>)([^<,]+)(?=,|</i>)!$1<a href="#$2$3">$2$3</a>!i
Имейте в виду, что, как написано, это будет соответствовать только элементам, заключенным в теги <i>
, и, конечно, не терпит других тегов между ними - лишь некоторые из причин, по которым вы не должны вставлять это в программный код. ..
Выражение превращает этот HTML:
Parte del texto inicial. <i>Penitencia y Reconciliación</i>
<i>Advenimiento, Consumación, Expectación</i>; Otro texto que <em>no es especial</em> ... <i>Otra etiqueta que debe estar vinculada</i>
Otra línea <i>con un enlace</i> y un texto más.
в этот текст:
Parte del texto inicial. <i><a href="#Penitencia y Reconciliación">Penitencia y Reconciliación</a></i>
<i><a href="#Advenimiento">Advenimiento</a>, <a href="#Consumación">Consumación</a>, <a href="#Expectación">Expectación</a></i>; Otro texto que <em>no es especial</em> ... <i><a href="#Otra etiqueta que debe estar vinculada">Otra etiqueta que debe estar vinculada</a></i>
Otra línea <i><a href="#con un enlace">con un enlace</a></i> y un texto más.
В качестве примечания: Ваш вопрос довольно сложно прочитать, и, вероятно, следовало бы также отметить его тегом [perl]
; это, вероятно, внесло значительный вклад в то, что на него не ответили некоторое время ... но лучше поздно, чем никогда!