php - regex - 在多个标签内捕获字符串

时间:2010-05-09 19:49:36

标签: php regex tags

还在正则表达式! ; - )))

假设我们有一个包含大量<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!

1 个答案:

答案 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]包含捕获组号。等等。