второй или третий раз появляется символ - PullRequest
1 голос
/ 21 июня 2009

В PHP

$regex = '/ ([$]) *(\d+(:?.\d+)?)/';
preg_match($regex, $str, $matches);

print_r($matches[2]);

Это регулярное выражение дает мне первое вхождение числа, следующего за первым знаком $ на веб-странице.

Теперь я хочу регулярное выражение, которое даст мне число после второго знака $ и, возможно, третьего тоже.

Ответы [ 3 ]

3 голосов
/ 21 июня 2009

То, что вы ищете, это функция preg_match_all .

preg_match_all('/([$])*(\d+(:?.\d+)?)/', $str, $result, [flags]);

$ result содержит все совпадения в массиве в порядке, указанном flags .

0 голосов
/ 21 июня 2009

Второй результат должен быть $ result 1 , третий $ result [2] и т. Д.

Редактирование *

Вы не хотите использовать [флаги], но один из найденных «флагов» здесь .

Вы, вероятно, хотите что-то вроде:

<?php
// The \\2 is an example of backreferencing. This tells pcre that
// it must match the second set of parentheses in the regular expression
// itself, which would be the ([\w]+) in this case. The extra backslash is
// required because the string is in double quotes.
$html = "<b>bold text</b><a href=howdy.html>click me</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);

foreach ($matches as $val) {
    echo "matched: " . $val[0] . "\n";
    echo "part 1: " . $val[1] . "\n";
    echo "part 2: " . $val[3] . "\n";
    echo "part 3: " . $val[4] . "\n\n";
}
?>
0 голосов
/ 21 июня 2009

preg_match соответствует только первому вхождению регулярного выражения, если вы используете preg_match_all , вы получите массив, который вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...