描述
此表达式将捕获该部分的标题以及每个链接的 href 和标题。我将其保留为多行表达式以提高可读性。多行正则表达式确实需要x
在模式选项中忽略空格
<b>[\w\s]+:\s*<\/b>.*?
<a\b(?=\s)
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref=('[^']*'|"[^"]*"|[^'"][^\s>]*))
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\stitle=('[^']*'|"[^"]*"|[^'"][^\s>]*))
展开
<b>[\w\s]+:\s*<\/b>.*?
找到类别标题并捕获之前的文本:
<a\b(?=\s)
匹配打开的锚标记
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref=('[^']*'|"[^"]*"|[^'"][^\s>]*))
收集href值,注意这里的额外绒毛是为了防止奇怪的边缘情况,并允许属性在标签内以任意顺序出现
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\stitle=('[^']*'|"[^"]*"|[^'"][^\s>]*))
收集标题值,与上面的 href 匹配相同的绒毛
PHP 代码示例:
输入文本
<div class="sms-separator"></div>
<div class="wallpaper-ads-right">
<b>Wallpaper:</b>
Rayman Legends Game sms<br />
<b>Categories: </b>
<a href="/games-desktop-wallpapers.html" title="Games wallpapers"> Games</a>
<br /><b>
<div class="sms-separator"></div>
<div class="wallpaper-ads-right">
<b>Wallpaper:</b>
Souya ssss<br />
<b>Categories: </b>
<a href="/soutss-tourguides" title="Tour"> Tourist</a><br /><b>
代码
<?php
$sourcestring="your source string";
preg_match_all('/<b>([\w\s]+):\s*<\/b>[\s\r\n]*?
<a\b(?=\s)
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*))
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\stitle=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*))/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
火柴
$matches Array:
(
[0] => Array
(
[0] => <b>Categories: </b>
<a
[1] => <b>Categories: </b>
<a
)
[1] => Array
(
[0] => Categories
[1] => Categories
)
[2] => Array
(
[0] => "/games-desktop-wallpapers.html"
[1] => "/soutss-tourguides"
)
[3] => Array
(
[0] => "Games wallpapers"
[1] => "Tour"
)
)