forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Регулярные выражения (http://forum.boolean.name/showthread.php?t=14077)

Zanthon 18.01.2011 10:30

Регулярные выражения
 
Господа, если есть спецы по регуляркам, помогите.

Нужен скрипт который должен проверять строку на соответствие 2-м шаблонам:

name||domain.com
и
domain.com||12345678||status

причем 12345678 - количество цифр может быть любым и status может принимать значения ip, o или c. Предполагается что пробелы из строки заблаговременно удалены. Функция должна проверять на соответствие, возвращать 0 если строка правильная или 1 если нет.

Помогите, плиз, воторой день уже мучаю мозг.

HAMANN 20.01.2011 14:23

Ответ: Регулярные выражения
 
1. name||domain.com
PHP код:

$str 'name||domain.com';
preg_match('#^name\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#'$str); 

2. domain.com||12345678||status
PHP код:

$str 'domain.com||12345678||status';
preg_match('#^[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+\|\|[0-9]+\|\|(ip|o|c)$#'$str); 


moka 21.01.2011 03:51

Ответ: Регулярные выражения
 
HAMANN, а где про эти выражения почитать можно? (имеется ввиду, на твой взгляд где лучше)?

HAMANN 21.01.2011 08:47

Ответ: Регулярные выражения
 
http://www.phpclub.ru/detail/article/regexp_1
не плохая статья. Не полная. Но довольно понятная

Zanthon 21.01.2011 09:36

Ответ: Регулярные выражения
 
HAMANN, благодарю!

А можно еще немного скорректировать это с учетом что name - имя абстрактное и может принимать любые значения?

И еще вопрос с позволения. Как я понимаю, вот этот кусок - {3,} проверяет на количество символов? И если к примеру домен будет something.travel - нужно заменить на {5,}? Будут ли в таком случае приниматься значения меньше 5-ти символов?

Правильно я понимаю что для того чтобы принимать такие значения нужно преписать так:

preg_match('#^[a-z0-9-]\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})(\.[a-z0-9-]{4,})(\.[a-z0-9-]{5,})+$#', $str);

HAMANN 21.01.2011 10:42

Ответ: Регулярные выражения
 
вообще там универсальный Домен. Любой пройдет. запись {3,} значит от 3х символов и больше. (причем это только первое слово в домене) а последующие от 2х символов и больше. Твой домен проходит под это регулярное выражение.

Цитата:

А можно еще немного скорректировать это с учетом что name - имя абстрактное и может принимать любые значения?
Ну если совсем любое то:
PHP код:

$str 'name||domain.com';
preg_match('#^.+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#'$str); 

если только слово:
PHP код:

$str 'name||domain.com';
preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#'$str); 

причем если в имени будет использоваться например русский язык то нужно модификатор 'u' поставить (UTF-8) и 'i' если без учета регистра

PHP код:

$str 'name||domain.com';
preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#u'$str); 

можно только англ. буквы и цифры

PHP код:

$str 'name||domain.com';
preg_match('#^[a-z0-9]+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#'$str); 


Zanthon 21.01.2011 11:18

Ответ: Регулярные выражения
 
Ага. Немного перепутал. Начинает вопрос проясняться.

Если не надоело отвечать, еще один маленький вопросик.

А если я к примеру задам такие две строки:

$str = 'name||domain.com||blablabla';
или
$str = 'name||domain.com.mx';

как тогда отреагирует выражение? Для меня в идеале было бы чтобы в первом случае получился фейл, а во втором проверка была бы пройдена.

HAMANN 21.01.2011 16:49

Ответ: Регулярные выражения
 
может лучше конкретно задачу скажешь? а то так сложно ориентироваться. пройдет только второе

1 Вариант.
PHP код:

if(preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#'$str)) {
   
//проверка пройдена
} else {
  
//аборт


2 Вариант:
PHP код:

if(!preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#'$str)) //аборт

//проверка пройдена 


Zanthon 22.01.2011 02:31

Ответ: Регулярные выражения
 
Да собственно это и была конкретная задача. Спасибо громадное, проверил варианты и все сработало на 5-ку!

Что то никак мне эти регулярки не даются...

HAMANN 22.01.2011 03:33

Ответ: Регулярные выражения
 
Да тоже долго допирал. До сих пор не все знаю.

Phantom 22.01.2011 05:18

Ответ: Регулярные выражения
 
Цитата:

Сообщение от MoKa (Сообщение 176386)
HAMANN, а где про эти выражения почитать можно? (имеется ввиду, на твой взгляд где лучше)?

Несколько месяцев назад прочитал про регулярные выражения в википедии и узнал много полезных новых тонкостей для себя, о которых прошлые несколько лет и вовсе не знал.
http://ru.wikipedia.org/wiki/Регулярные_выражения


Часовой пояс GMT +4, время: 16:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot