1

以下の文字列から、指定された正規表現に一致する部分文字列を抽出しようとしています:

"Lorem ipsum dolor sit amet. <xy:abc_ref d_id="1234">Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. <xy:abc_ref d_id="1234">"

正規表現は期待どおりに一致します。ただし、何らかの理由で、最初に解析された値にしかアクセスできません。カウンター (count($matches)) は 2 つの結果があることを示していますが、出力を参照してください。

$value = 'Lorem ipsum dolor sit amet. <xy:abc_ref d_id="1234">Lorem ipsum dolor sit amet. <xy:abc_ref d_id="5678">Lorem ipsum dolor sit amet.<xy:abc_ref d_id="1234">';

起源:

function test($value)
{
    $RegEx = '/<xy:abc_ref ([^>]{0,})>/';       
    $n = preg_match($RegEx,$value,$matches);
    print("Results count: " . count($matches)."<br>");
    print("matches[0]: " . $matches[0]."<br>");
    print("matches[1]: " . $matches[1]."<br>");
    print("matches[2]: " . $matches[2]."<br>");
}
echo test($value);

出力:

Results count: 2
matches[0]:
matches[1]: d_id="1234"
matches[2]: 

ありがとう、LG

4

3 に答える 3

2

preg_match_allを使用して、すべての一致を取得します。preg_match は最初の一致のみを返します。グループをキャプチャするため、Count は 2 を返します。

于 2013-04-13T13:47:17.500 に答える
2

preg_match_all代わりに使用する必要があります。

于 2013-04-13T13:47:44.527 に答える
0
function test($value)
{
    $RegEx = '/<xy:abc_ref ([^>]{0,})>/';       
    $n = preg_match_all($RegEx,$value,$matches);
    print("Results count: " . count($matches[1])."<br>");
    print("matches[0]: " . $matches[1][0]."<br>");
    print("matches[1]: " . $matches[1][1]."<br>");
    print("matches[2]: " . $matches[1][2]."<br>");
}
于 2013-04-13T13:57:04.617 に答える