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

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

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

 

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

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

тема: Ленивость и жадность
 
 автор: cybernetic10   (20.02.2013 в 13:16)   письмо автору
 
 

Возникли проблемы в понимании жадности и ленивости (я так понимаю, в этой задаче это поможет)
Нужно из строки типа "abcd00000078efgh" вытащить 5 нулей и две цифры после нулей.
Регэксп
(0{5})(\d{2})

вытаскивает (00000)(07), хотя я ожидаю (00000)(78).
Как можно исправить мой регэксп для решения описанной задачи?

  Ответить  
 
 автор: Igorek   (20.02.2013 в 13:43)   письмо автору
 
   для: cybernetic10   (20.02.2013 в 13:16)
 

какой смысл вытаскивать нули?

Может так:
<?php
$p 
"#0{5}0*([1-9]{2})#";
$s "abcd00000078efgh";
if (
preg_match($p,$s,$m)) {
  
var_dump($m);
} else {
  echo 
'В строке нет 5 нулей и двух цифр после них';
}

  Ответить  
 
 автор: cybernetic10   (20.02.2013 в 14:04)   письмо автору
 
   для: Igorek   (20.02.2013 в 13:43)
 

Вобще говоря, нули можно не вытаскивать.
Но нужно вытащить последние цифры. И среди них могут быть нули. Поэтому [1-9] точно не прокатит

  Ответить  
 
 автор: Igorek   (20.02.2013 в 14:22)   письмо автору
 
   для: cybernetic10   (20.02.2013 в 14:04)
 


<?php
$p 
"#0{5}0*(\d{2})#";
$s "abcd00000008efgh";
if (
preg_match($p,$s,$m)) {
  
var_dump($m);
} else {
  echo 
'В строке нет 5 нулей и двух цифр после них';
}

  Ответить  
 
 автор: Igorek   (20.02.2013 в 14:28)   письмо автору
 
   для: Igorek   (20.02.2013 в 14:22)
 

пример выше как раз жадная квантификация (соответствие максимально длинной строке из возможных), если регэскп поменять на
<?php
$p 
"#0{5}0*?(\d{2})#";

результат будет другим (ленивая квантификация)

  Ответить  
 
 автор: cybernetic10   (20.02.2013 в 15:37)   письмо автору
 
   для: Igorek   (20.02.2013 в 14:22)
 

Это решение мне помогло, спасибо!)

  Ответить  
Rambler's Top100
вверх

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