Я пытаюсь избежать PCRE в PHP для использования в сценарии. По какой-то причине я не могу заставить его работать, когда он был экранирован, мне удалось заставить его работать, только когда REGEX указан в качестве ввода формы.
Я использую регулярное выражение:
$pattern = '£((http|ftp|https):\/\/)?([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?£';
Пока что я попробовал:
preg_quote (): преобразует регулярное выражение в следующее и выдает ошибку: Â £ ((http \ | ftp \ | https): \ / \ /) \? ([\ w \ -_] + (\ ?: (\) : \ [\ ш \ -_] +) +)) ([\ ш \ — \, \ @ \ ^ \ =%..?&: / ~ \ + #] * [\ Ш \ — \ @ \ \ ^ \ =%?&/ ~ \ + #]) \? Â £
htmlentities (): выдает ошибку: Предупреждение: preg_match (): неизвестный модификатор ‘a’
addlashes (): то же, что и выше
смесь из 3: такая же, как указано выше
У кого-нибудь есть представление о том, что я делаю не так?
Символ фунта был проблемой здесь, замена его на восклицательный знак решила проблему.
Рабочее выражение:
$pattern = '!((http|ftp|https):\/\/)?([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?!';
По какой-то причине это работает нормально, без escape-функций.
Других решений пока нет …