我有以下文字
<h4>Section 1</h4>
<ul>
<li><a href="http://link">link text</a></li>
<li><a href="http://link">link text/a></li>
<li><a href="http://link">link text</a></li>
<li><a href="http://link">link text</a></li>
</ul>
<h4>Section 2</h4>
<ul>
<li><a href="http://link">link text</a></li>
</ul>
<h4>Section 3</h4>
<ul>
<li><a href="http://link">link text</a></li>
</ul>
这是我到目前为止构建的正则表达式
<h4>(.*?)</h4>
<ul>
(.*?)
</ul>
但它只匹配“第2节”和“第3节”。如何使其与所有部分相匹配,包括“第1部分”?
答案 0 :(得分:3)
这取决于您使用的语言(PHP,Perl等),但它将是这样的:
(?s)<h4>(.*?)</h4>\s*<ul>(.*?)</ul>
(?s)
允许.
匹配换行符(\n
)。
例如,在PHP中,您可以执行以下操作:
// The regex
$regex = '#(?s)<h4>(.*?)</h4>\s*<ul>(.*?)</ul>#';
// Test data
$data = '<h4>Section 1</h4>
<ul>
<li><a href="http://link">link text</a></li>
<li><a href="http://link">link text/a></li>
<li><a href="http://link">link text</a></li>
<li><a href="http://link">link text</a></li>
</ul>
<h4>Section 2</h4>
<ul>
<li><a href="http://link">link text</a></li>
</ul>
<h4>Section 3</h4>
<ul>
<li><a href="http://link">link text</a></li>
</ul>';
// Get all matches
preg_match_all($regex, $data, $matches);
// Just to show the results
ob_start();
var_dump( $matches );
$show_html = ob_get_contents();
ob_end_clean();
echo "<pre>".htmlentities($show_html)."</pre>";