PHP正则表达式动态字符串
这是我要从中提取的html内容的一部分:PHP正则表达式动态字符串,php,regex,Php,Regex,这是我要从中提取的html内容的一部分: <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-wal
<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>
壁纸:
苏亚ssss
类别:
现在从上面的内容我想刮“游客”
问题是a href和title标记之前有动态内容,它们随页面而异,因此如何将其放入正则表达式中?
<?php
while ($line = fgets(STDIN))
if (preg_match('?<a href=".*" title=".*">(.*)</a>?', $line, $match))
echo $match[1], "\n";
?>
说明
此表达式将捕获节的标题以及每个链接的href&title。我将其保留为多行表达式,以帮助提高可读性。多行正则表达式确实需要x
ignorewhitespaceinpattern选项
<b>[\w\s]+:\s*<\/b>.*?
<a\b(?=\s)
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref=('[^']*'|"[^"]*"|[^'"][^\s>]*))
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\stitle=('[^']*'|"[^"]*"|[^'"][^\s>]*))
代码
<?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);
?>
换句话说,您需要紧跟在类别之后的href
标记的内容:
?为什么不使用真正的解析器来处理这类DOM?使用regexpes解析html是。使用正则表达式解析html是。还有更稳健的解决方案。您是否愿意接受这些内容?您可能需要这样做:如果不知道这些值如何变化,也不知道具体的目标(是包含href/title属性的内容还是属性本身),就不可能回答这个问题。
<?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"
)
)