Убедитесь, что у вас включена поддержка расширения pdo на cli, запустив php -m
на своем терминале.
Убедитесь, что вы загружаете расширение pdo в режимах cli и fpm
EDIT: вы можете проверить, какой файл конфигурации используется из командной строки, запустив php -i
Вы близки. Можно использовать "отрицательный lookbehind" как так:
(?<!href=")http:// etc
Будут проигнорированы все результаты, которым предшествует href.
Возможно, парсинг HTML будет более подходить для Вас (htmlparser, например). Затем у Вас могли быть узлы HTML и только "linkify" ссылки в тексте а не в атрибутах.
Если Вы действительно хотите сделать это с regex, чем:
String r = "(?<![=\"\\/>])http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?";
например, проверьте, что URL не следует =" или/>
Если Вы хотите использовать 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\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*+)?+(?!</a>)";
Если Вы имеете к самокрутке, по крайней мере, смотрите на алгоритмы/шаблоны, используемые в реализации С открытым исходным кодом Скидки с цены, например, MarkdownJ.