regex — экранирование регулярных выражений в переполнении стека

Я пытаюсь избежать PCRE в PHP для использования в сценарии. По какой-то причине я не могу заставить его работать, когда он был экранирован, мне удалось заставить его работать, только когда REGEX указан в качестве ввода формы.

Я использую регулярное выражение:

$pattern = '£((http|ftp|https):\/\/)?([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?£';

Пока что я попробовал:

preg_quote (): преобразует регулярное выражение в следующее и выдает ошибку: Â £ ((http \ | ftp \ | https): \ / \ /) \? ([\ w \ -_] + (\ ?: (\) : \ [\ ш \ -_] +) +)) ([\ ш \ — \, \ @ \ ^ \ =%..?&: / ~ \ + #] * [\ Ш \ — \ @ \ \ ^ \ =%?&/ ~ \ + #]) \? Â £

htmlentities (): выдает ошибку: Предупреждение: preg_match (): неизвестный модификатор ‘a’

addlashes (): то же, что и выше

смесь из 3: такая же, как указано выше

У кого-нибудь есть представление о том, что я делаю не так?

1

Решение

Символ фунта был проблемой здесь, замена его на восклицательный знак решила проблему.
Рабочее выражение:

$pattern = '!((http|ftp|https):\/\/)?([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?!';

По какой-то причине это работает нормально, без escape-функций.

0

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

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

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