匹配多个结果单行php正则表达式

时间:2017-09-23 10:31:44

标签: php regex

我想在单个行字符串上匹配多个结果,但我只能对我所检查的结果进行最后一次迭代。

例如,我有这个字符串:<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>,但我不知道我做错了什么。

4 个答案:

答案 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);