Эта тема на forum.dklab.ru


propolis: RegExp
Народ дайте сабж для мыла, чето я зациклился..%)) Заранее спасиба...
DmitriyPopov:
Что значит "для мыла"?
Вам надо проверять валидность e-mail адреса?
Или же Вам надо найти в строке все вхождения e-mail?
Вам очень сложно сразу вопрос сформулировать?


http://www.php.spb.ru/php/regexp.html
Anonymous:
Кстати... в вашем регэкспе есть неточность ....
В имени ящика тоже могут быть точки
"/^{1,20}@((+\.)+(com|net|org|mil|". "edu|gov|arpa|info|biz|inc|name|{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-". "9]{1,3}\.[0-9]{1,3})$/is"
DmitriyPopov:
Гость:
Хоть я и Дмитрий, но это не мой регексп
Дмитрий Эсс:
Дмитрий Попов:
Там есть такая ссылка: http://www.php.spb.ru/other/mail.txt
Что-то я не понял что это за ужас. Это язык RegEx?
DmitriyPopov:
Дмитрий Эсс:
RegEx - это абревиатура от Regular Expressions.
А диалект - Posix (если про ereg-* функции), или Perl-Compatible, если preg_* функции.

Там - второе
Дмитрий Эсс:
Дмитрий Попов:
Дмитрий Котеров писал в своей книге, что RegEx и PCRE - это 2 разный языка.

На http://www.php.spb.ru/other/mail.txt та же проверка e-mailа что и на http://www.php.spb.ru/php/regexp.html, только другим языком, или она сложнее?
Дмитрий Котеров:
Дмитрий Котеров писал в своей книге, что RegEx и PCRE - это 2 разный языка.
Ну, RegEx — это и есть стандарт POSIX. Его просто иногда и так и так называют. Что касается ЗСКУб то это, действительно, отдельный стандарт, до конца не совместимый с POSIX (вроде бы), но зато более мощный. Его теперь все чаще применяют — PHP, Perl, даже в TheBat.
DmitriyPopov:
отдельный стандарт, до конца не совместимый с POSIX (вроде бы)
Угу.... Причем не только до конца, но и сначала :)
Дмитрий Эсс:
Дмитрий Попов:
На http://www.php.spb.ru/other/mail.txt та же проверка e-mailа что и на http://www.php.spb.ru/php/regexp.html, только другим языком, или она сложнее?
DmitriyPopov:
Дмитрий Эсс:
Она сложнее
Дмитрий Эсс:
А её можно как-нибудь вставить в пхп? Я имею ввиду проверку мыла по этому регулярному выражению пхп скриптом.
DmitriyPopov:
Угу... чего-то вроде
if (!preg_match("тут идет та функция $/is",$mail))

Но это так... сходу и не вдаваясь в подробности :)
Дмитрий Эсс:
Хмм не работает. Точная проверка мыла - это вещь хорошая, и я её хочу использовать в своих проектах. Я ошибку найти не могу, так как не знаю PCRE. Помогите, кто может.

Первые десять строк кода:
<?
$check = "[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-
\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\
xff\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80
-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n
\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\
x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\
[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\
040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xf
f]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)

На это всё выдаётся:

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Parse error: parse error, unexpected '[' in d:\home\localhost\www\test\email\check.php on line 4
Дмитрий Котеров:
Удвойте все слэши.
Дмитрий Эсс:
Все слеши в рег. выражении?
DmitriyPopov:
Дмитрий Эсс:
Угу
Дмитрий Эсс:
Попробую...
Дмитрий Эсс:
Удвоил, не получилось. Выдает в 2 раза больше ошибок:

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in d:\home\localhost\www\test\email\check.php on line 4
Parse error: parse error, unexpected '[' in d:\home\localhost\www\test\email\check.php on line 4
Дмитрий Котеров:
Так.
[*:6ab8831b07]Возьмите исходное выражение для Perl.
[*:6ab8831b07]Замените в нем \ на \\.
[*:6ab8831b07]Обрамите выражение апострофами: '...'.
[*:6ab8831b07]Скормите preg_match() или preg_replace().
Дмитрий Эсс:
Не получается, всё проделал, сами попробуйте.
Дмитрий Котеров:
А кавычки и апострофы кто будет заслэшивать? (-;
на самом деле, достаточно еще поставить по слэшу (одному) перед каждым апострофом, про это я забыл написать.
Дмитрий Эсс:
Ох-ох-ох, пробую...
Дмитрий Эсс:
Нет, я этого не переживу, опять не работает. Пишет: " Unknown modifier '*' "
Пожалуйста проделайте это всё сами и выложите код, иначе мы ещё дня 2 над этим биться будем. А вы это сделаете за 5 минут.
Дмитрий Котеров:
ОК. Исходное выражение в студию (в виде отдельного файла-аттачмента).
Дмитрий Эсс:
http://www.php.spb.ru/other/mail.txt - уже было приведино выше.

Пожалуйста напишите все ваши действия, чтобы знать, как это делается на будущее
Дмитрий Котеров:
Действия я уже написал. Надо было только от переводов строки избавиться еще.
Дмитрий Эсс:
Понятно, большое спасибо.
Дмитрий Эсс:
Я разочаровался в этой проверке.
Смотрите:
$email = "a@a";
$email = "~!@#$%^&*()_+|}{:<>`-=[]\',./";

И на это выдаётся ОК :) Бред какой-то.
Зачем такой длинный код писать, чтобы проверить наличие собаки и как минимум 1 символа справа и слева от неё в строке?
Дмитрий Котеров:
Может, выражение неправильное?
Дмитрий Эсс:
На http://www.php.spb.ru/php/regexp.html есть проверка правильности мыла, написанная на RegEx и внизу приписка:
Если кажется, что слишком сложный рег для проверки мыла, то вот тут лежит настоящее регулярное выражение, соответствующее спецификации для проверки email: mail.txt.

Не знаю, насчёт правильности кода, но думаю http://php.spb.ru можно доверять. Не писали же они такой длинный и бессмысленный код.
Дмитрий Котеров:
Раз не работает, значит, писали?..
Дмитрий Эсс:
Не понял вопроса.
WingedFox:
Там не вопрос, а точка :)
Трактовка может быть такой - "Раз не работает - значит писали..."
Дмитрий Эсс:
Если там точка, значит у меня глюки. :)
h0rnd0g: preg_replace
подскажите как с помощью preg_replace сделать замену числа в тексте...
$photo=preg_replace(array("/& height=\"(.*)\"",'',$photo);

height="987" убрать с текста... чтото не получается
WingedFox:
1) (.*) -> \d+
2) надо рег сделать регом, вообще должна показываться ошибка при компиляции...
h0rnd0g:
$photo2=preg_replace("height=(\d+)",'',$photo); ???

Эта тема на forum.dklab.ru