我想在单个行字符串上匹配多个结果,但我只能对我所检查的结果进行最后一次迭代。
例如,我有这个字符串:<ul><li><a href="#">test1</a></li><li><a href="#">test2</a></li><a href="#">test3</a></li></ul>
我想得到:
TEST1
TEST2
TEST3
结果但我只得到“test3”
我在https://regex101.com/使用了这个正则表达式<ul>(<li><a.*>(.*)<\/a><\/li>)*<\/ul>
,但我不知道我做错了什么。
答案 0 :(得分:5)
改为使用解析器:
<?php
$html = <<<DATA
<ul>
<li><a href="#">test1</a></li>
<li><a href="#">test2</a></li>
<li><a href="#">test3</a></li>
</ul>
DATA;
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DomXPath($dom);
$links = $xpath->query("//li/a");
foreach ($links as $link) {
echo $link->textContent;
}
?>
这会设置DOM
并使用xpath
表达式来获取元素。
答案 1 :(得分:3)
试试这样:
(?<=(<a href="#">))([\s\S]| |w\[0-9]| )+?(?=(<\/a>))
or
(?<=(">))([\s\S]| |w\[0-9]| )+?(?=(<\/a>))
or
(?<=(<a href="#">))(.)+?(?=(<\/a>))
链接示例: https://regex101.com/r/MHnxxh/1 要么 https://regex101.com/r/MHnxxh/2
<?php
$str = '
<ul>
<li><a href="#">test1</a></li>
<li><a href="#">test2</a></li>
<li><a href="#">test3</a></li>
</ul>
';
preg_match_all('/(?<=(#">))([\s\S]| |w\[0-9]| )+?(?=(<\/a>))/', $str, $matches);
// display array if need
echo "<pre>";
print_r($matches);
// display list
foreach ($matches[0] as $key => $value) {
echo $value ."\r\n";
}
?>
答案 2 :(得分:0)
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
这是正则表达式模式....试试这个 ( “#\” &GT; [A-Z] \ W + \&LT; / \ A&GT)
这将只提取所有文本字符串....
答案 3 :(得分:0)
您可以使用 preg_replace
$test = '<ul><li><a href="#">test1</a></li><li><a href="#">test2</a></li><a href="#">test3</a></li></ul>';
echo preg_replace('/<[^>]*>/', ' ', $test);