问题一:
</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解析器。
任何帮助将不胜感激。
答案 0 :(得分:1)
注意:如上所示,上面的代码段可能有不稳定的间距
您希望它也匹配换行符。 .
通常不会这样做。这基本上需要#s
修饰符:
preg_match('#</a>(.*?)</td> <td class="thread"#s', ...
但您也可以在\s*
捕获组周围添加(.*?)
两次。也在</td>
和<td
之间。
然后你可以让你的正则表达式更具体\d\d-\d\d-\d\d, \d\d:\d\d
来捕捉日期。这可能会使标签的匹配变得多余。
注意:标签之间的间距可能因页面而异。
您可以再次使用\s*
来匹配任意组合的空格和换行符。
答案 1 :(得分: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]
。
再次使用s
标记,并在</tr> <tr>
使用*
之间设置不同的空格。
preg_match("#<div id=\"post_message_[a-zA-Z0-9_]*\">(.*?)</tr> *<tr>#s", $page, $fetchedContent);
如果您想在</tr>
和<tr>
之间添加换行符,请改为\s*
。问题1也是如此。