|
|
|
| Возникли проблемы в понимании жадности и ленивости (я так понимаю, в этой задаче это поможет)
Нужно из строки типа "abcd00000078efgh" вытащить 5 нулей и две цифры после нулей.
Регэксп
вытаскивает (00000)(07), хотя я ожидаю (00000)(78).
Как можно исправить мой регэксп для решения описанной задачи? | |
|
|
|
|
|
|
|
для: 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 нулей и двух цифр после них';
}
|
| |
|
|
|
|
|
|
|
для: Igorek
(20.02.2013 в 13:43)
| | Вобще говоря, нули можно не вытаскивать.
Но нужно вытащить последние цифры. И среди них могут быть нули. Поэтому [1-9] точно не прокатит | |
|
|
|
|
|
|
|
для: 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:22)
| | пример выше как раз жадная квантификация (соответствие максимально длинной строке из возможных), если регэскп поменять на
<?php
$p = "#0{5}0*?(\d{2})#";
|
результат будет другим (ленивая квантификация) | |
|
|
|
|
|
|
|
для: Igorek
(20.02.2013 в 14:22)
| | Это решение мне помогло, спасибо!) | |
|
|
|