Как можно использовать два отрицательных взгляда в регулярном выражении с границей слова?

У меня есть регулярное выражение, которое позволяет мне находить несколько URL-адресов в строке. У него два негативных взгляда<<‘и’ .onion ‘.

В настоящее время первый запрос работает как положено, он предотвращает совпадение, если URL заканчивается на ‘<<». Второй (‘.onion’) не работает должным образом, он предотвращает сопоставление всей строки, если она найдена.

PCRE:

(?i)\b(?!.*?\.onion)
(?>
(?:
[a-z][\w-]+:
(?:
/{1,3}
|
[a-z0-9%]
)
|
ftp://
|
www\d{0,3}[.]
|
[a-z0-9.\-]+[.][a-z]{2,4}/
)
(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+?(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*?\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))\b(?!<<)

Если я переместлю второй запрос в конец, он продолжит странно себя вести, сопоставляя URL-адрес, который он должен игнорировать, в то же время не сопоставляя подлинные URL-адреса перед ним.

Пример строки (предполагаемые совпадения выделены жирным шрифтом):

www.google.com http://wikipedia.org www.google.com<<

www.google.com http://wikipedia.org<< www.google.com

www.google.com<< http://wikipedia.org www.google.com

www.google.com http://wikipedia.org www.google.onion

Ссылка на regex101

Я недавно задал похожий вопрос, и из этого возникло текущее выражение.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]