PHP,的preg_match,正则表达式。我究竟做错了什么?
-
19-09-2019 - |
题
下面是我要匹配的图案:
<div class="class">
<a href="http://www.example.com/something"> I want to be able to capture this text</a>
<span class="ptBrand">
这是我在做什么:
$pattern='{<div class="productTitle">[\n]<((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)>([^\n]*)</a>[\n]<span class="ptBrand">}';
preg_match($pattern, $data, $matches,PREG_OFFSET_CAPTURE);
print_r($matches);
它打印:
阵列()
解决方案
作为一般规则,正则表达式解析HTML的一个非常差的装置。他们是不可靠的,而且往往最终非常复杂。一个更强大的解决方案是使用HTML解析器。请参见解析HTML PHP和DOM 。
至于你的表情,我没有看到任何地方<div class="productTitle"
在源代码,所以我会从那里开始。同样,你正在试图解析URL,但没有锚标记(直接或通过足够的通配符)的记载所以它会太失败在那里。基本上这表情看起来并不像你想解析HTML任何东西。
其他提示
...或者这样:
preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);
剪裁这一点。
在图案:
/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m
会得到链接和文字粗略,但使用DOM库会是一个更好的方法。
您可以试试这个:
<a href=".*?">([\s\S]*?)</a>
不隶属于 StackOverflow