Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярное выражение для последовательности
 
 автор: Newman 13   (04.11.2007 в 08:41)   письмо автору
 
 

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

zz
z-z
z-zz
z-z-z
z-z-zz

ну и т.д.

Большое Спасибо.

   
 
 автор: kasmanaft   (04.11.2007 в 08:49)   письмо автору
 
   для: Newman 13   (04.11.2007 в 08:41)
 

А чему оно не должно удовлетворять? Не очень понятно...

   
 
 автор: Newman 13   (04.11.2007 в 09:10)   письмо автору
 
   для: kasmanaft   (04.11.2007 в 08:49)
 

Нужен шаблон который бы указал о наличии в строке перечисленных значений,
значения по своей сути представляют последовательность указанную выше.

Шаблон должен выглядеть так:
символ z в начале и в конце, а в середине очередность символов '-' и 'z'.

Вся проблема в том, что я немогу выразить эту очередность в шаблоне ...

К примеру чтоб шаблон мог выбрать и значение zz, и z-z и остальные из последовательности ...

   
 
 автор: kasmanaft   (04.11.2007 в 09:53)   письмо автору
 
   для: Newman 13   (04.11.2007 в 09:10)
 

z-zz-z удовлетворяет?
Если нет, то можно вот так попробовать: /^z(-z)*z?$/, а если да, то как показал Unkind.

   
 
 автор: Newman 13   (04.11.2007 в 10:14)   письмо автору
 
   для: kasmanaft   (04.11.2007 в 09:53)
 

kasmanaft, шаблон /^z(-z)*z?$/ тоже не подходит, так как пропускается вариант 'z-z' и 'z-z-z' ...

   
 
 автор: Unkind   (04.11.2007 в 09:37)   письмо автору
 
   для: Newman 13   (04.11.2007 в 08:41)
 

<?php
$string 
'z-zz-z';

if( 
preg_match('/^z((-z+)+)?$/'$string) )
{
    echo 
'Yep!';
}
else
{
    echo 
'String is NOT valid';
}
?>

   
 
 автор: Newman 13   (04.11.2007 в 10:11)   письмо автору
 
   для: Unkind   (04.11.2007 в 09:37)
 

Ребят, спасибо за столь быструю реакцию - неожиданно для форума, но все же вы не поняли задачи, или я неправильно объяснил её.

Шаблон должен быть примерно таким:

if( preg_match('/^z(rrr)z$/', $string)

где за место 'rrr' должно быть шаблон удовлетворяющий значениям '' , '-' , '-z' , '-z-', '-z-z', '-z-z-' и т.д., т.е. очередности знаков '-' и 'z'.

В предыдущем коде изначально была взята неверное значение переменной $string = 'z-zz-z'; - здесь в середине нет очередности (символ 'z' идет два раза подряд) ...

Можно ли задать такую очередность с помощью регулярного выражения? Или проще было бы перебрать все варианты через знак альтернативы '|' ...

   
 
 автор: Unkind   (04.11.2007 в 10:16)   письмо автору
 
   для: Newman 13   (04.11.2007 в 10:11)
 

Тогда надо чуть-чуть изменить pattern kasmanaft'а:

<?php
$string 
'z-z-z-z';

if( 
preg_match('/^z(-z)*-?z$/'$string) )
{
    echo 
'Yep!';
}
else
{
    echo 
'String is NOT valid';
}
?>

   
 
 автор: kasmanaft   (04.11.2007 в 10:31)   письмо автору
 
   для: Unkind   (04.11.2007 в 10:16)
 

Нет, зачем.. Получилось практически то же самое..

Newman 13, что значит "пропускается вариант 'z-z' и 'z-z-z' ..." - их не надо пропускать?
Вы "?" не забыли? /^z(-z)*z?$/
Кстати, так пропустит "z", если не надо, используйте исправленный вариант Unkind'a :)

   
 
 автор: Unkind   (04.11.2007 в 10:35)   письмо автору
 
   для: kasmanaft   (04.11.2007 в 10:31)
 

> Нет, зачем.. Получилось практически то же самое..
Не то же. Ваш вариант пропустит строку "z".

P.S. Кстати, я тоже заметил противоречие у автора:

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

zz
...
z-z-z
..."

" тоже не подходит, так как пропускается вариант 'z-z' и 'z-z-z'"

Так нужно или нет "z-z-z"?

   
 
 автор: Newman 13   (04.11.2007 в 11:04)   письмо автору
 
   для: Unkind   (04.11.2007 в 10:35)
 

Ups, извинте, шаблон /^z(-z)*z?$/ действительно работет, большое спасибо!!!!!!!!
Тема закрыта.

   
 
 автор: kasmanaft   (04.11.2007 в 11:08)   письмо автору
 
   для: Newman 13   (04.11.2007 в 11:04)
 

Обратите внимание на то, что он пропускает строку "z".
Используйте шаблон Unkind'a (04.11.2007 в 10:16), если эту строку пропускать не нужно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования