Хорошо, док!Хотя я думаю, что это технически выполнимо, решения, которые я предложил, на данный момент довольно мягкие:
s%(?!consectetur adipiscing)(adipiscing|molestie|fringilla)(?<!consectetur adipiscing)%<a href="#LinkBasedUpon$1">$1</a>%s
повороты ...
sit amet, consecteturadipiscing элит.Quisque ... ligula sem molestie massa ... nec arcu fringilla imperdiet ... nec adipiscing Velit.
в...
Сиди, Амет, Заклинатель, Адептирующий, Элит.Quisque ... ligula sem <a href="#LinkBasedUponmolestie">
molestie </a>
massa ... nec arcu <a href="#LinkBasedUponfringilla">
fringilla </a>
imperdiet ... nec <a href="#LinkBasedUponadipiscing">
adipiscing</a>
velit.
Причина, по которой это мягкое решение заключается в том, что он не обрабатывает частичные слова или другие случаи, когда исключаемые слова не начинаются или заканчиваютсяодно из слов для сопоставления.Например, если бы мы добавили исключенное слово (то есть consectetur adipiscing elit
), это выражение в конечном итоге соответствовало бы adipiscing
в consectetur adipiscing elit
, потому что adipiscing
не начинается и не заканчивается так же, как consectetur adipiscing elit
Это должно работать до тех пор, пока исключаемое вами «слово» (A B C
) всегда заканчивается или начинается с одного из найденных слов (C|X|E
содержит C
в нем и A B C
заканчивается словом C
, поэтому должно работать ...)
РЕДАКТИРОВАТЬ {
Причина, по которой слова «не совпадают» должны начинаться или заканчиваться однимиз совпавших слов заключается в том, что в этом решении используется отрицательный прогноз перед совпадением и отрицательный просмотр после совпадения, чтобы убедиться, что сопоставленная последовательность не соответствует словам, которые не должны быть сопоставлены (имеет ли это смысл?)
}
Существуют определенные решения для этого, но они требуют значительных усилий как процессора, так и процессора, и экспоненциально увеличиваются в зависимости от размера списков слов и длиныискомый текст и спецификацииС требованиями - и вы никогда ничего не указали, так что я не буду вдаваться в подробности.Дайте мне знать, если это достаточно хорошо для вашей ситуации!