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

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

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

 

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

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

тема: Люди добрые помогите, почему не работает регулярное выражени
 
 автор: Flash5   (18.03.2005 в 21:52)   письмо автору
 
 

Нужна помощь очень срочно
Люди добрые помогите, почему не работает регулярное выражение?
$test = 'this is test ##FULLITEM22## how it work';
$result = preg_match('/##FULLITEM([0-9]+)##/', $test, $maches);
вместо 22, данное выражение находит ##FULLITEM22## и все слово, почему? и как исправить не доработку?
Array ( [0] => ##FULLITEM22## [1] => 22 )
Спасибо за помощь

   
 
 автор: cheops   (18.03.2005 в 22:01)   письмо автору
 
   для: Flash5   (18.03.2005 в 21:52)
 

Хм... так он же нашёл вам 22
Array ( [0] => ##FULLITEM22## [1] => 22 )

Вам остаётся только обращаться не к $test[0] - в которое помещено полное соответствие регулярному выражению, а к $test[1] - которому соответствует, то, что заключено в круглые скобки.

   
 
 автор: Flash5   (18.03.2005 в 22:07)   письмо автору
 
   для: cheops   (18.03.2005 в 22:01)
 

Смольный:
Чем тебя не устраивает использование элемента 1 твоего массива?
Лишнее - ну и забей. Если тебе мешает 0 элемент массива - unset его.

Можно написать выражение "начинается с"
$result = preg_match('/(?<=##FULLITEM)([0-9]+)##/', $test, $maches);
Но вот "заканчивается" которое (?> тут не работает


Просто мне нужны гаранты что всегда во втором элементе массива будет нужное мне число! Так как я не могу объяснить почему данное выражение дает такой результат, соответственно я не знаю чего ожидать в других случаях.
Кстати возникает вопрос, а почему не работает выражением (?>? И вообще что за преимущество имеет вами предложенный пример?
П.С. Большое вам спасибо, приятно увидеть достойный ответ и еще раз удостоверится что есть еще настоящие программисты, которые пытаются следовать за прогрессом!

   
 
 автор: cheops   (18.03.2005 в 22:19)   письмо автору
 
   для: Flash5   (18.03.2005 в 22:07)
 

Число всегда будет появляться во втором элементе массива, дело в том, что первый элемент массива соответствует всему регулярному выражению от / до /. Второй - первым круглым скобкам, третий - вторым круглым скобкам и т.д. Т.е. если вы введёте следующее регулярное выражение
<?php
$result 
preg_match('/(##)FULLITEM([0-9]+)(##)/'$test$maches);
?>

То получите следующий результат
Array ( [0] => ##FULLITEM22## [1] => ## [2] => 22 [3] => ## )

   
 
 автор: Flash5   (19.03.2005 в 21:45)   письмо автору
 
   для: cheops   (18.03.2005 в 22:19)
 

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

   
Rambler's Top100
вверх

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