0

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];
4

4 に答える 4

1

使用する

preg_match('/<abbr title="([^"]*)" \/>/i', $file_string, $time);

したがって、マッチャーは最初に停止します<< ">>([^"]は "以外の意味です)

また

preg_match('/<abbr title="([0-9T:-]*)" \/>/i', $file_string, $time);

より正確には、キャッチする必要があるものだけを含むグループを使用します。(「は除外されていることに注意してください)

于 2012-07-31T15:14:16.623 に答える
0

これに正規表現を使用するのが最善のアプローチではないと思いますが、状況によっては問題ない場合があります。

正規表現を使用している場合、これが必要です。

preg_match('/<abbr title="([^"]*)"/i', $file_string, $time);

ここで実際に見てください:http://viper-7.com/qZu9tj

于 2012-07-31T15:13:22.083 に答える
0

Try it this way instead of regex:

$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 can be a pain for dealing with this sort of thing. Better to use a parser.

于 2012-07-31T15:48:11.830 に答える
0

最良の方法は、PHP のDOMのような HTML パーサーを使用することです。

<?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>手遅れです。

于 2012-07-31T17:39:33.153 に答える