[英]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*
,它与任何组合中的空格和换行符匹配。
你需要使用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]
。
再次使用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.