Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > составление шаблона для eregi


Автор: ShamanVoodoo 5.8.2008, 16:22
есть строка вида "[11] Кристаллическая Руда 91.02 (92) ", нужно проверить соответствует ли она шаблону "[ 1-3 цифры ] любой текст ( 1-3цифры )", если не сложно подскажите шаблон или где взять информацию по составлению этого шаблона.

Автор: skyboy 5.8.2008, 17:17
в мане http://ua2.php.net/manual/ru/regexp.reference.php

Автор: ShamanVoodoo 5.8.2008, 18:47
о! пасиб! а то в описании самой функции ни слова =\

Автор: ShamanVoodoo 5.8.2008, 21:57
пробую "^\[[0-9]{1.3}\]"+[a-z0-9\.-]+\([0-9]{1,3}\)$" , но ничего не получается  smile 

Автор: Mal Hack 5.8.2008, 22:02
Код

if(preg_match("/^\[\d{3}.+?\(\d{2}\)\]$/", trim(str)))
{ ... }

При этом, рекомендую, обратить внимание на http://php.net/trim и сопоставить ее применение с вашей задачей.
Регулярные выражения PRCE оптимальнее, чем POSIX.

Автор: ShamanVoodoo 5.8.2008, 22:10
^\[\d{1,3}\](.*)+(\(\d{1,3}\))$
разобрался)

Автор: Mal Hack 5.8.2008, 22:14
ShamanVoodoo, 
1. Вы зря скобки ставите лишние... Под них выделяется лишняя память, а она вам ни к чему, вам же проверить по шаблону надо, а не распарсить...
2. (.*)+ - бред написан. Значит любой символ ноль и более раз один и более раз.

Автор: ShamanVoodoo 5.8.2008, 22:25
^\[\d{1,3}\](.*)\(\d{1,3}\)$ ?
да ,я уже обратил внимание что eregi работает криво и перешел на 
Код

preg_match("/^\[\d{1,3}\](.*)\(\d{1,3}\)$/",$str)
, я просто проверяю выражение через The Regex Coach, а не скриптом. trim  в функции "подрезки" переменных:
Код

function var_cutter($v)
{
$cute_v=substr($v,0,254);
$cute_v=strip_tags($cute_v);
$cute_v=trim($cute_v);

return $cute_v;
};

Автор: Mal Hack 5.8.2008, 22:36
Цитата(ShamanVoodoo @  5.8.2008,  23:25 Найти цитируемый пост)
$cute_v=substr($v,0,254);

А это зачем?

ShamanVoodoo, опять-таки .* - значит "ноль и более" раз, а вам нужно, как миниму чтоб хоть какой-ть символ там был, исходя из задачи, которую вы поставили в первом после, плюс, не забудте про ?.
Уберите скобки вокруг.*...

Автор: ShamanVoodoo 5.8.2008, 22:49
substr для того чтобы длинные переменные не пытались засунуть, maxsize в формах стоит, но его же можно обойти...

Код

preg_match("/^\[\d{1,3}\]+?.+\(\d{1,3}\)$/",$str)
 так?

Автор: Mal Hack 5.8.2008, 23:04
Цитата(ShamanVoodoo @  5.8.2008,  23:49 Найти цитируемый пост)
substr для того чтобы длинные переменные не пытались засунуть, maxsize в формах стоит, но его же можно обойти...

А вы уверены, что 253 байта вам хватит???
Эта строчка не нужна вам.
Цитата(ShamanVoodoo @  5.8.2008,  23:49 Найти цитируемый пост)
так?

Я же выше написал:
Код

if(preg_match("/^\[\d{1,3}.+?\(\d{1,2}\)\]$/",str)
{ ... }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)