Регулярные выражения

beejuice

Новичок
Регулярные выражения

В FAQ ответа не нашел, поэтому задаю вопрос сдесь.


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

1) Интервалы в квантификаторах

У меня не работают квантификаторы так как указано в учебнике.

Вот строка:
ereg("b{1,2}", "bbbbccccceeee") ;

Пишу шаблон согласно стандарта POSIX, я понимаю это выражение как если в стоке от 1-ой до 2-х знаков "b", но в стоке 4 таких знаков, значит должен быть результат FALSE, а у меня выдает TRUE!

2) Бессмысленный квантификатор

Зачем нужен квантификатор * , он означет от 0 до бесконечности... тоесть условие будет справедливо в том случае если в нем будет данное выражение и если не будет... тогда исходя из простой логики на кой он вообще нужен? Если тебе все равно есть это выражение или нет... или я чего-то не понимаю?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
1) Интервалы в квантификаторых
так и должно быть
{1,2} означает соотвествие 1 или 2-м сиволам b
Попадание есть?
- Есть.
Поэтому и TRUE
 

beejuice

Новичок
Автор оригинала: Mr_Max
так и должно быть
{1,2} означает соотвествие 1 или 2-м сиволам b
Попадание есть?
- Есть.
Поэтому и TRUE
Но ведь это же получается полная бессмыслица... так выражение {1,2} имеет обсолютно тотже смысл что и {1,}
Тоесть от 1-го до бесконечности. Тогда зачем нужна вторая цифра в квантификаторе?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
beejuice
бесмыслица пропадёт, если Вы попробуете решить конкретную задачу

-~{}~ 22.06.07 17:51:

Что в данном случае безсмысленно?

PHP:
        $email="[email protected]"; 
     
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9- 
]+)*(\.[a-z]{2,3})$", $email) { 

            echo "The e-mail was not valid"; 
         
} else { 
         
    echo "The e-mail was valid"; 
         
}
http://www.zend.com/zend/spotlight/ev12apr.php
 

beejuice

Новичок
Просто объясните мне, почему в вашем примере это [a-z]{2,3} работает так как нужно, а именно от 2-х до 3-х символов.

А в моем примере не работает
ereg("b{1,2}", "bbbbccccceeee") ;

Если я что-то не правильно понимаю, то как мне сделать что бы выражение находило букву b в строке не длинее 2-х символов
 

Bitterman

Новичок
как мне сделать что бы выражение находило букву b в строке не длинее 2-х символов
Указать, что после этой последовательности должен идти другой символ или конец строки.
 
Сверху