繁体   English   中英

HTML标签上的简单正则表达式

[英]Simple Regular Expression on HTML Tags

问题一:

</a>              

19-10-2011, 04:49 PM

             </td> <td class="thread" 

如何获取日期和时间,即19-10-2011,04:49 PM

注意:如上所示,上面的代码段可能有不稳定的间距,例如</td> <td class

我的尝试:

preg_match("#</a>(.*?)</td> <td class=\\"thread\\"#", $page, $fetchContent);

结果:


问题二:

<div id="post_message_43345">ANY TYPE OF CONTENT INCLUDING SPACES</tr> <tr>

我需要获取“任何类型的内容”。

注意:标签之间的间距(例如</tr> <tr>可能因页面而异。

我的尝试:

preg_match("#<div id=\"post_message_[a-zA-Z0-9_]*\">(.*?)</tr> <tr>#", $page, $fetchedContent);

结果:

我正在为一项任务寻找粗略的临时短片。 因此,我没有使用HTML解析器。

任何帮助将不胜感激。

注意:如上所示,上面的代码段可能会有不稳定的间距

您希望它也匹配换行符。 . 通常不这样做。 这基本上需要#s修饰符:

  preg_match('#</a>(.*?)</td> <td class="thread"#s', ...

但你也可以在你的(.*?)捕获组周围添加两次\\s* 也在</td><td

然后你可以使你的正则表达式更具体\\d\\d-\\d\\d-\\d\\d, \\d\\d:\\d\\d仅捕获日期。 这可能会使标签的匹配有些多余。

注意:标签之间的间距可能因页面而异。

您可以再次使用\\s* ,它与任何组合中的空格和换行符匹配。

问题1

你需要使用s标志. 匹配换行符:

preg_match("#</a>(.*?)</td> <td class=\"thread\"#s", $page, $fetchContent);

你可能最好直接匹配日期:

preg_match("#([0123]?[0-9]-(?:0?[1-9]|1[012])-(?:[0-9]{4})),? ?((?:0[0-9]|1[012]):[0-5][0-9] ?[AP]M)#",...)

编辑 - 这个日期正则表达式会更快一些(增加边界):

preg_match("#\\b([0123]?[0-9]-(?:0?[1-9]|1[012])-(?:[0-9]{4}))[, ]{1,3}((?:0[0-9]|1[012]):[0-5][0-9] ?[AP]M)\\b#",...)

对于两者,日期是$results[1] ,时间是$results[2]

问题2

再次使用s标志,并在</tr> <tr>使用不同的空格*

preg_match("#<div id=\"post_message_[a-zA-Z0-9_]*\">(.*?)</tr> *<tr>#s", $page, $fetchedContent);

如果你想在</tr><tr>之间允许换行,那么请改为使用\\s* 问题1也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM