还在正则表达式! ; - )))
假设我们有一个包含大量<tr>
行的html文件,其结构如下所示,其中(.*?)
是我需要提取的内容!
<tr align=center><th width=5%><a OnClick="(.*?)"href=#>(.*?)</a><td width=5%>(.*?)<td width=5% align=center >(.*?)</td></tr>
已更新
可能有一个很好的 preg_match_all()?
我需要这样的结果
match[0] . match[1] . match[2] . match[3]
以防有人需要类似的东西!
解决方案对我的小问题是
/<a\s*OnClick=\"(.*?)\"href=#>(.*?)<\/a><td[^>]+>(.*?)<td[^>]+>(.*?)<\/td><\/tr>/m
感谢您的时间!
Luca Filosofi!
答案 0 :(得分:0)
在没有实际样本数据的情况下疯狂猜测与正则表达式匹配 - 也非常不满意在这里使用正则表达式。除非你的表格看起来完全相同,否则我怀疑你对正则表达式会有多大乐趣。
无论如何,除了所有警告之外,这可能有用:
<tr[^>]+><th[^>]+><a OnClick="([^"]+)"\s*href="([^"]+)">([^<]+)</a><td[^>]+>([^<]+)<td[^>]+>([^<]+)</td></tr>
它期望标签(以及<a>
标签内的属性)完全按此顺序排列,引用字符串中没有尖括号,引用字符串中没有转义引号等等。(所有这些你不会'如果你使用了解析器,我不得不担心。)
在PHP中:
preg_match_all('%<tr[^>]+><th[^>]+><a OnClick="([^"]+)"\s*href="([^"]+)">([^<]+)</a><td[^>]+>([^<]+)<td[^>]+>([^<]+)</td></tr>%', $subject, $result, PREG_PATTERN_ORDER);
$result
然后是$result[0]
包含整个匹配的数组,$result[1]
包含捕获组号。等等。