我正在尝试从下面的字符串中提取匹配给定正则表达式的子字符串:
“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">
”
Regex确实按预期匹配。但是,出于某种原因,我只能访问第一个解析的值。即使计数器(count($ matches))表示有两个结果,请参阅输出。
$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
答案 0 :(得分:2)
使用preg_match_all获取所有匹配项。 preg_match只会返回第一个匹配项。 Count将返回两个因为你捕获一个组。
答案 1 :(得分:2)
您必须改为使用preg_match_all
。
答案 2 :(得分: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>");
}