あなたの正規表現は<meta>
ノードのためにこれらの3つのオプションを検討してください。
簡単な方法は、あなたのオリジナルの正規表現は、タグを閉じて?
、貪欲ではない演算子使用して変更することです: - この場合も -
<meta +name *=[\"']?description[\"']? *content=[\"']?(.*?)[\"']? */?>
└─┘ └───┘
search zero-or-more characters except following closing tag characters
regex101 demo
しかし、何が起こりますあなたがこのメタを持っていれば?
<meta content="Some Content" name="description" />
正規表現は失敗します。
HTMLノード試合本当のするには、パーサーを使用する必要があります。
$dom = new DOMDocument();
libxml_use_internal_errors(1);
$dom->loadHTML($yourHtmlString);
$xpath = new DOMXPath($dom);
$description = $xpath->query('//meta[@name="description"]/@content');
echo $description->item(0)->nodeValue);
意志出力:
Some Content
はい、それは5行対1ですが、この方法では必要になります<meta name="description">
に一致します(有効な属性ではない3番目の属性も含む場合もあります)。
...と属性値が単一引用符でラップされている場合、あなたは同じになります二重引用符を一致させるための問題でしょうか? [この回答を見る](http://stackoverflow.com/a/1732454/3294262) – fusion3k
さらに、引用符のないメタの(可能ではない)オプションを考えてみましょう。 [この場合何が起こるかを見る](https://regex101.com/r/hQ1gB0/1)。 – fusion3k
@fusion3k私はそれのためのフォールバック計画を持っています。 –