ikinci ya da üçüncü kez bir sembol görüntülenir

3 Cevap php

PHP

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

print_r($matches[2]);

Bu regex bana bir web sayfasında ilk $ işaretini izleyen bir sayının ilk görüldüğü verir.

Şimdi bana ikinci $ işareti ve belki üçüncü de sonra numarasını verecek bir regex istiyorum.

3 Cevap

Ne arıyorsun preg_match_all fonksiyonudur.

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

$result flags ile belirtilen sırayla bir dizi tüm eşleşmeleri içerir.

İkinci sonuç $ [2] ve böylece [1], üçüncü $ sonucu sebep olmalıdır.

Düzenleme *

Aslında [bayraklar] kullanmak istemiyorum, ama "bayrakları" bir here bulundu.

Muhtemelen çizgisinde bir şey istiyorum:

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

Eğer preg_match_all, sen sonra konum dizi alırsınız kullanırsanız preg_match sadece regex ilk geçtiği eşleşir.