Текст Linkify с регулярными выражениями в Java

Убедитесь, что у вас включена поддержка расширения pdo на cli, запустив php -m на своем терминале.

Убедитесь, что вы загружаете расширение pdo в режимах cli и fpm

EDIT: вы можете проверить, какой файл конфигурации используется из командной строки, запустив php -i

7
задан Fabian Steeg 10 March 2009 в 11:43
поделиться

5 ответов

Вы близки. Можно использовать "отрицательный lookbehind" как так:

(?<!href=")http:// etc

Будут проигнорированы все результаты, которым предшествует href.

9
ответ дан 6 December 2019 в 23:13
поделиться

Возможно, парсинг HTML будет более подходить для Вас (htmlparser, например). Затем у Вас могли быть узлы HTML и только "linkify" ссылки в тексте а не в атрибутах.

0
ответ дан 6 December 2019 в 23:13
поделиться

Если Вы действительно хотите сделать это с regex, чем:

   String r = "(?<![=\"\\/>])http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?";

например, проверьте, что URL не следует =" или/>

1
ответ дан 6 December 2019 в 23:13
поделиться

Если Вы хотите использовать regex, (хотя я думаю, анализируя к XML/HTML, сначала более устойчиво), я думаю, что предвидение или - позади имеет смысл. Первый удар мог бы быть должен добавить это в конце Вашего regex:

(?!</a>)

Значение: не соответствуйте, если существует закрытие тега просто впоследствии. (Это можно было настроить навсегда, конечно.) Это не работает хорошо, тем не менее, потому что, учитывая строку

<a href="...">http://example.com/</a>

Этот regex попытается соответствовать "http://example.com/", перестать работать из-за предвидения (как мы надеемся), и затем отследите в обратном порядке жадный спецификатор, чтобы иметь на конце и соответствовать "http://example.com" вместо этого, который не имеет после него.

Можно ли решить последнюю проблему при помощи притяжательного спецификатора на Вашем +, * и? операторы - просто придерживаются + после них. Это препятствует тому, чтобы они отследили в обратном порядке. Это, вероятно, хорошо по причинам производительности, также.

Это работает на меня (отметьте три, дополнительные + 's):

String r = "http(s)?://([\\w+?\\.\\w+])++([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*+)?+(?!</a>)";
1
ответ дан 6 December 2019 в 23:13
поделиться

Если Вы имеете к самокрутке, по крайней мере, смотрите на алгоритмы/шаблоны, используемые в реализации С открытым исходным кодом Скидки с цены, например, MarkdownJ.

0
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: