Intereting Posts
Как показать другую домашнюю страницу в зависимости от страны пользователя? Symfony. Почему моя форма получает каждый ответ, который существует в таблице? ошибка с ошибкой сервера wamp # 2002 не удалось открыть phpMyAdmin PHP: создания iCal, как создать новую строку в описании Предотвращение загрузки видео Javascript, создающий имя пользователя с использованием входов Проверьте, была ли еще вызвана функция решение для COMET и PHP процентная ставка php Laravel 5, ajax, 500 Internal Server Error, TokenMismatchException в строке VerifyCsrfToken.php 46: Лучший способ генерировать этот массив json из данных MySql с помощью php Как игнорировать случай при анализе с помощью simplexml? Заявление о выполнении не выводится правильно? Запустите расширение chrome и отправьте данные в PHP-скрипт на загрузку страницы (автоматизируйте процесс) Как отправить данные формы и динамически отобразить их с помощью ajax на одной странице

Модификация регулярного выражения для соответствия времени

Я хочу взять 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> не может удерживать слишком поздно.