问题一:
</a>
19-10-2011, 04:49 PM
</td> <td class="thread"
如何获取日期和时间,即2011年10月19日下午04:49
注意:如上所述,上述片段可能具有不稳定的间距,例如</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解析器
任何帮助都将不胜感激。
问题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也是如此。
注意:上面的片段可能有不稳定的间距,正如你在上面看到的那样
您希望它也与换行符相匹配。.
通常不会这样做。这基本上需要#s
修饰符:
preg_match('#</a>(.*?)</td> <td class="thread"#s', ...
但您也可以在(.*?)
捕获组周围添加两次's*
。也在CCD_ 18和CCD_。
然后,您可以使正则表达式更具体地'd'd-'d'd-'d'd, 'd'd:'d'd
,只捕获日期。这可能会使匹配标签变得有些多余。
注意:标签之间的间距可能因页面而异。
您可以再次使用's*
,它在任何组合中匹配空格和换行符。