|
|
|
|
|
для: mechanic
(29.04.2011 в 13:46)
| | Обычно её не решают при помощи универсального регулярного выражения - слишком сложно. Вырезают кусок строки, где нужно производить поиск и ищут в этом фрагменте. | |
|
|
|
|
|
|
| Добрый день айтишники
возник вопрос по регулярке, который я не смог побороть
обобщенно звучит так: как внутри конкретного символьного окружения получить повторяющиеся блоки?
на примере выглядит так: из строки "baaaAb" получить [a, a, a, A] чем-то вроде ~b(a)*b~i
проблема в том, что при добавлении к регекспу окружения "b...b", выдирается только последняя A, а при выключении жадности - первая a
конкретная же задача - из таблицы c id="fruits" ОДНОЙ регуляркой получить все строки
<table id="fruits">
<tr><td>1</td><td>apple</td></tr>
<tr><td>2</td><td>banana</td></tr>
<tr><td>3</td><td>melon</td></tr>
</table>
|
нужно иметь на выходе массив, содержащий номера п.п. и названия фруктов
пробовал так
$result = <<<EOF
<table id="fruits">
<tr><td>1</td><td>apple</td></tr>
<tr><td>2</td><td>banana</td></tr>
<tr><td>3</td><td>melon</td></tr>
</table>
EOF;
$pattern = '~table id="fruits">(?:[\s]*<tr><td>(\d)</td><td>(.*)</td></tr>[\s]*)+~U';
preg_match_all($pattern, $result, $m);
var_dump($m);
|
на выходе с U
array(3) {
[0]=>
array(1) {
[0]=>
string(54) "table id="fruits">
<tr><td>1</td><td>apple</td></tr>"
}
[1]=>
array(1) {
[0]=>
string(1) "1"
}
[2]=>
array(1) {
[0]=>
string(5) "apple"
}
}
|
без U
array(3) {
[0]=>
array(1) {
[0]=>
string(128) "table id="fruits">
<tr><td>1</td><td>apple</td></tr>
<tr><td>2</td><td>banana</td></tr>
<tr><td>3</td><td>melon</td></tr>
"
}
[1]=>
array(1) {
[0]=>
string(1) "3"
}
[2]=>
array(1) {
[0]=>
string(5) "melon"
}
}
|
инет облазил, поиск по данному форуму тоже, pcre-мануалы сколько мог выкурил, задача то вроде простая, но мысли кончились, прошу помощи! | |
|
|
|
|