Я хочу взять 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];
Хотя я не думаю, что использование регулярного выражения для этого – лучший подход, в некоторых случаях это может быть хорошо.
Если вы используете регулярное выражение, это то, что вам нужно:
preg_match('/<abbr title="([^"]*)"/i', $file_string, $time);
См. Здесь в действии: http://viper-7.com/qZu9tj
использование
preg_match('/<abbr title="([^"]*)" \/>/i', $file_string, $time);
Итак, ваш собеседник остановится сначала << »>> ([^"] означает что угодно, кроме ")
или
preg_match('/<abbr title="([0-9T:-]*)" \/>/i', $file_string, $time);
более точную, использовать группу, которая содержит только то, что вам нужно поймать. (обратите внимание, что «исключено»)
Попробуйте сделать это вместо регулярного выражения:
$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;
Regex может быть болью для решения такого рода вещей. Лучше использовать синтаксический анализатор.
Лучшим способом было бы использовать парсер HTML, например, DOM PHP.
<?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, так как это может привести к тому, что вы потеряете рассудок в cuthulu. <center>
не может удерживать слишком поздно.