我有一个正则表达式我试图摆脱一个字符串。它似乎包括太多的方式。这是我的代码。
preg_match_all('/<li class="has-activity"><a class="group-entity"
href="(.*?)"><span class="activity-count">(.*)<\/span><span
class="image"><img alt="(.*?)" src/i',$output,$matches);
我只是想让它抓住(。*?)中看到的东西,但它似乎想要抓住更多。
更多信息:
这是我尝试从中提取的一个例子。这只是一个实体。 (使用preg_match_all)
<li class="has-activity"><a class="group-entity" href="/grp/home?gid=2813868&trk=my_groups-tile-grp">
<span class="activity-count">7</span>
<span class="image"><img alt="[Rated #1 in Marketing] The Social Media Marketing Group" src
我需要抓住的两件主要事情是群href(&#34; / grp / home?gid = 2813868&amp; trk = my_groups-tile-grp&#34;在这个例子中)和群组名称(事物)在alt标签之间。&#34; [营销中的评级#1]社交媒体营销组&#34;在这种情况下)
使用我更新的代码(。?*),似乎抓住NAME就好了。但是,我无法正确地抓住该组织的href。
答案 0 :(得分:2)
对于初学者,因为.*
似乎与属性相匹配,所以可以将其替换为[^"]*
即
preg_match_all('/<li class="has-activity"><a class="group-entity"
href="([^"]*)"><span class="activity-count">(.*)<\/span><span
class="image"><img alt="([^"]*)"/i',$output,$matches);
如果在span
内没有更多标签,只需要使用文字
preg_match_all('/<li class="has-activity"><a class="group-entity"
href="([^"]*)"><span class="activity-count">([^<]*)<\/span><span
class="image"><img alt="([^"]*)"/i',$output,$matches);
这是确切的,并且不会匹配更多也不会覆盖元素和属性,尽管(常规)xml/html
解析使用正则表达式并不容易
<强>更新强>
html示例代码
<li class="has-activity"><a class="group-entity" href="/grp/home?gid=2813868&trk=my_groups-tile-grp"><span class="activity-count">6</span><span class="image"><img alt="[Rated #1 in Marketing] The Social Media Marketing Group" src
<a class="group-entity" href="LINK"
并且需要提取该alt
代码的img
使用以下
preg_match_all('/<li.*?class="has-activity".*?href="([^"]*)".*?<img.*?alt="([^"]*)"/i',$output,$matches);
尽量不要使用preg_match_all
,如果需要添加multiline
flag (i.e '/../m'
),如果需要更精确的匹配,请使用xml解析器(如建议的那样)
答案 1 :(得分:1)
preg_match_all('<li class="has\-activity"><a class="group\-entity" href=(.*?)"><span class="activity\-count">([0-9]+)<\/span><span class="image"><img alt="(.*)" src/i',$output,$matches);
正则表达式不是提取html的最佳工具。它可能变得非常混乱。我发现jQuery对于提取html内容非常有用,然后如果需要,我可以在PHP中对它执行字符串操作。
正则表达式对html如此棘手的原因是边缘情况。对html的轻微更改可能会破坏整个正则表达式。