Регулярные выражения
Что то вроде этого?
Но неработает...
Помогите пожалйста
Что то вроде этого?
Но неработает...
Помогите пожалйста
для начала расскажите что вы хотите сделать и почему таким извращенным способом
Ну во-первых от 1 до 1000 это не цифры, а числа.
А сделать можно намного проще
$var8_min = intval($var8_min);
if($var8_min>=1 && $var8_min<=1000) echo "Все ОК";
?>
UPDATE: Погоди-ка. Присылается число? Или текст содержащий числа? То есть придет "876" или "Король имел в подчинении 542 конные кавалерии"???
Я бы сделал так:
$str = preg_replace("/^0+(\d*)$/", "$1", $str);
$str = $str >= 1 && $str <= 1000 ? $str : 0;
А что, можно ещё как-то?
Прочитай внимательно мой ответ. Автор топика таким образом (через регулярные выражения) принимал решение о том выводить ему сообщение на экран или нет.
Ты его почитай:
Ему нужно число. А в твоём совете всё правильно (для принятия решения), за исключением одного: вдруг $var8_min на входе будет вида лдрыв89анлфыовар98ывр оыв8 79ывар фы8ва7 ?
ЗЫ а с ereg и в самом деле надо завязывать :)
ЗЫ а с ereg и в самом деле надо завязывать :)
Это он сейчас говорит, что не будет. Я смотрю ширее (ширше) всегда. Не только сегодня. :D
В конце-концов, регулярные выражения изобрели не для того, чтобы отказываться от удобства их использования.
И всё же, какой более разумный есть способ из произвольной строки получить число, если не регулярные выражения?
попробовал написать regexp для проверки правильности введённого адреса ё-mail:
/^[a-z_]+[\.a-z\-_]*@{1}[a-z]+[\.a-z\-_]*[a-z]\.[a-z]{2,4}$/i
В принципе работает,но всё ли там правильно?
попробовал написать regexp для проверки правильности введённого адреса ё-mail:
/^[a-z_]+[\.a-z\-_]*@{1}[a-z]+[\.a-z\-_]*[a-z]\.[a-z]{2,4}$/i
В принципе работает,но всё ли там правильно?
Не стоит изобретать велосипед. Для проверки мыла на валидность давно уже создан проверенные регулярки. В том же Zend Framework.
Я досих пор так и не научился применять скобки в регулярках.
Говорится что в скобках пишут дополнительное рег.выражение .
Вот пример из статьи:
[color=green]/^\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,3}$/[/color]
Что делает парсер,когда ему попадается [color=green]([\.\w]+)*[/color]?
Ну я читал,что он вызывает себя для поиска по выражению в скобках...,но для чего в скобках [color=green]+[/color],а за скобками [color=green]*[/color]? (Я знаю что "+" означает повтор 1 или более раз, "*" 0 или более)
Советую программку Regexp Coach (http://weitz.de/regex-coach/). очень помогает в составлении регулярных выражений.
Что делает парсер,когда ему попадается [color=green]([\.\w]+)*[/color]?
Ну я читал,что он вызывает себя для поиска по выражению в скобках...,но для чего в скобках [color=green]+[/color],а за скобками [color=green]*[/color]? (Я знаю что "+" означает повтор 1 или более раз, "*" 0 или более)
Все очень просто. Выражение в квадратных скобках называется символьный класс. Он соответсвует одному символу в строке поиска. А выражение в круглых скобках называется подмаска и соответсвует нескольким символам в строке поиска и интерпретируется как единое целое. Например шаблон (дан) в строке 'данные' найдет дан. А для строки 'да нные' не найдет ни чего, т.к. в подмаске нет пробела. Кроме того подмаски возращаются в специальный массив откуда их потом можно выудить. Бывает порой очень полезно.
Поясню твой шаблон на примере строки поиска 'мой номер 245' (два пробела между мой и номер).
Шаблон [\.\w] выуживает из строки поиска по одному символу если этот символ: буква, цифра, знак подчеркивания (метасимвол /w) и точка. Квалификатор плюс говорит о том, что вхождений может быть 1 и более раз.
Когда анализатор начинает разбор, то берет сначала букву 'м'. Она соответствует шаблону [\.\w]. Но поиск соответсвия на этом не заканчивается и результаты не возращаются потому что есть еще квалификатор. По умолчанию, все квантификаторы являются "жадными", это означает, что они совпадают максимально возможное количество раз. Поэтому анализатор проверяет строку 'мо' и она соответсвует шаблону [\.\w]+. Потом добавляется еще один символ 'мой' и он тоже соответсвует шаблону [\.\w]+. Далее идет 'мой ', но он не соответствует [\.\w]+. Следовательно одно схождение 'мой' найдено. Но т.к. квалификатор плюс является по умолчанию "жадным" и в возращаемое значение попадает все слово целиком, а не каждая буква отдельно. Т.е.
(
[0] => Array
(
[0] => мой
)
)
А не
(
[0] => Array
(
[0] => м
[1] => о
[2] => й
)
)
для нежадного квалификатора (т.е. для шаблона с модификатором /[\.\w]+/U, модификатор U есть в PHP, в Perl данного модификатора нет, там все квалификаторы жадные).
А круглые скобки нужно для отлова пробелов. После нахождения первого соответствия берется следующий символ. Это пробел ' '. Он не соответсвует шаблону [\.\w], не соответсвует и ([\.\w]+). Но квалификатор звездочка говорит о том, что подмаска может входить ноль или более раз. А раз символ не соответсвует шаблону, то значит имеет 0 вхождений. И в конечно итоге совпадение имеет место, но т.к. 0 это ни чего, то в возращаемом значении ни чего и нет. В конечном итоге от preg_match_all получим:
(
[0] => Array
(
[0] => мой
[1] =>
[2] =>
[3] => номер
[4] =>
[5] => 245
[6] =>
)
)
Обрати внимание на элементы массива [0][1], [0][2], [0][4] и [0][6]. В них находиться не пробел, а строка с пустым значением ''.
Т.е. конечная логика шаблона разбить строку на слова, причем точка включается в возращаемый набор и кроме того шаблон позволяет выудить пробелы между словами и посчитать количество этих пробелов (к примеру для последующей нормализации строки).
Советую программку Regexp Coach (http://weitz.de/regex-coach/.) очень помогает в составлении регулярных выражений.
2 мБ для такой простенькой проги! Я скачал JavaRegexTester с sourceforge.net. 16кБ.