我想从 2012-07-16T21:00:00 中走出
<abbr title="2012-07-16T21:00:00" class="dtstart">Monday, July 16th, 2012</abbr>
但我遇到了一些困难。这就是我所做的
preg_match('/<abbr title="(.*)" \/>/i', $file_string, $time);
$time_out = $time[1];
答案 0 :(得分:1)
使用
preg_match('/<abbr title="([^"]*)" \/>/i', $file_string, $time);
因此,您的匹配器将首先停止&lt;&lt;“&gt;&gt;([^”]表示除了“)之外的任何内容
或
preg_match('/<abbr title="([0-9T:-]*)" \/>/i', $file_string, $time);
更精确,使用仅包含您需要捕获的内容的组。 (注意“被排除在外”)
答案 1 :(得分:0)
虽然我不认为使用正则表达式是最好的方法,但在某些情况下可能没问题。
如果你正在使用正则表达式,这就是你需要的:
preg_match('/<abbr title="([^"]*)"/i', $file_string, $time);
在此处查看:[{3}}
答案 2 :(得分:0)
尝试这种方式而不是正则表达式:
$dom = new DOMDocument;
$dom->loadXML($file_string);
$abbr = simplexml_import_dom($dom);
$time;
foreach ($abbr[0]->attributes() as $key => $value)
{
if ($key == 'title')
{
$time = $value;
break;
}
}
echo $time;
正则表达式可能是处理此类事情的痛苦。最好使用解析器。
答案 3 :(得分:0)
最好的方法是使用HTML解析器,例如PHP的 DOM 。
<?php
$html = <<<HTML
<abbr title="2012-07-16T21:00:00" class="dtstart">Monday, July 16th, 2012</abbr>
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$abbr = $dom->getElementsByTagName("abbr")->item(0);
$title = $abbr->getAttribute("title");
echo $title;
即使您的数据看起来不完全相同,这也会有效:
title
之前或之后还有其他属性。"
,'
或无),所以请不要使用RegEx,因为它会导致你失去理智。 <center>
无法忍受它为时已晚。