第二次或第三次出现符号

时间:2009-06-21 12:49:10

标签: php regex

在PHP中

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

print_r($matches[2]);

这个正则表达式让我第一次出现在网页中第一个$符号后面的数字。

现在我想要一个正则表达式,它会在第二个$符号之后给出我的数字,也可能是第三个符号。

3 个答案:

答案 0 :(得分:3)

您要找的是 preg_match_all 功能。

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

$ result flags 指定的顺序包含数组中的所有匹配项。

答案 1 :(得分:0)

preg_match只匹配正则表达式的第一次出现,如果你使用preg_match_all,你将获得你所追求的数组。

答案 2 :(得分:0)

第二个结果应该是$ result 1,第三个$ result [2]等等。

编辑*

您不想实际使用[flags],但其中一个“标志”找到here

您可能需要以下内容:

<?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";
}
?>