Мне нужно сделать подсветку некоторой части строки (для результатов поиска), однако, надо игнорировать все совпадения, которые находяться между знаками "<" и ">", т.е. в тегах. Например: <a href="http://linux.com">Linux</a>, linux в адресе должно пропустить.
Потому что группа в скобке означает негативный просмотр вперед с учетом знака < В каком смысле? Нужно не захватывать повторяющиеся? Это делается вручную с учетом количеств найденных влождений из preg_match_all PHP: <? $string = '<a href="http://linux.com">Linux</a> '; if(preg_match_all('/(?<! <)(.+)(?! >)/isx', $string, $found)) { print_r($found); } ?> Выведет: Код (Text): Array ( [0] => Array ( [0] => <a href="http://linux.com">Linux</a> ) [1] => Array ( [0] => <a href="http://linux.com">Linux</a> ) ) А теперь учитывайте повторы.
Пользователь ввел в поиске linux, я вытащил из базы нужные записи, теперь мне надо в выводе заменить linux на <span class="hightlight">linux</span>, т.е. подсветить это слово. Но, если парсер увидит linux в ссылке, или в адресе изображения, то он и его заменит, и получится ерунда.
PHP: <? $string = 'You have said LINUX??? <a href="http://linux.com\">Linux</a> There is no any Linux, there is the Windows!'; $haystack = 'linux'; if(preg_match_all('/(?<!>)'.$haystack.'(?!<)/isx', $string, $found)) { print_r($found); } ?> Выведет: Код (Text): Array ( [0] => Array ( [0] => LINUX [1] => linux [2] => Linux ) ) Как видите, захватило всё, но не в скобках ссылку. ОДНАКО! захватил текст самой ссылки, это можно перехватывать другим регулярным выражением или сделать логическое исключение для текста, находящегося в ссылке. НО учитывайте, что негативный или позитивный просмотр может быть только для текста фиксированной длины, поэтому лучше делать два регулярных выражения.