проблемы с URL и регулярным выражением электронной почты при поиске текста - PullRequest
0 голосов
/ 17 мая 2010

У меня проблемы с регулярными выражениями, которые я получил от regexlib.Я пытаюсь сделать preg_replace () для некоторого текста и хочу заменить / удалить адреса электронной почты и URL-адреса (http / https / ftp).

У меня есть код:

$sanitiseRegex = array(
    'email' => /'^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/',
    'http' => '/^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$/',        
);

$replace = array(
    'xxxxx',
    'xxxxx'
);

$sanitisedText = preg_replace($sanitiseRegex, $replace, $text);

Однако я получаю следующую ошибку: Неизвестный модификатор '/' и $ sanitisedText is null.

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

Спасибо

1 Ответ

1 голос
/ 17 мая 2010

Для начала, ваша строка электронной почты открыта неправильно:

'email' => /'^([a-zA-Z0-9_\-\.
// should be
'email' => '/^([a-zA-Z0-9_\-\.

Другая проблема заключается в том, что вы используете / в качестве символа для сопоставления и используете его для начала / окончания регулярного выражения URL, не экранируя их в регулярном выражении. Самое простое решение - просто использовать другой символ для обозначения начала / конца регулярного выражения, например:

'http' => '@^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$@'

То, что происходит, это то, что он видит '^(http|https|ftp)\:' как регулярное выражение, а затем начинает искать варианты. Первый символ после «конца» регулярного выражения - это еще один '/', который является недопустимым параметром, следовательно, сообщение об ошибке.

РЕДАКТИРОВАТЬ: Что-то быстрое, что может решить проблему повторно: не соответствует. Вместо этого вы можете попробовать следующее:

'http' => '@^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?(/[a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~]*)?$@'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...