php preg_replace слово для ссылки, но слово уже не может быть частью якоря - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть некоторый контент HTML:

<p>
Nunc nulla tincidunt metus sed eros auctor sagittis. Sed malesuada, mi et ornare 
molestie, urna dui 
<a href="http://google.com/" title="condimentum nulla">condimentum nulla, ut luctus</a> nisl ipsum ut dui. 
Praesent aliquam velit quis neque congue consectetur <b>nulla</b>. 
Curabitur turpis risus, malesuada nec volutpat sit amet, auctor porta velit.
</p>

И я хочу заменить все слова "nulla" ссылками, но только если "nulla" не является частью другого URL-адреса ссылки или другого параметра HTML (название, alt).В приведенном выше примере скрипт должен заменить только первое и последнее слово "nulla", а остальные оставить как есть.Я застрял с этим регулярным выражением, но оно не работает так, как я хочу:

/[^<a]+[^>]*nulla[^<\/a>]/

1 Ответ

3 голосов
/ 15 декабря 2011

Окончательное решение, которое работает как следует:

$str = preg_replace('~\bnulla\b(?!(?>[^<]*(?:<(?!/?a\b)[^<]*)*)</a>)~iu', '<a href="novo-mega-link.php">$0</a>', $str);
...