、Windowsの行末は、次のとおりです。
"\r\n"
最も簡単な解決策は以下のとおりです。
if (preg_match ("~<meta name='date' content='(.*)'>\n<meta name='time' content='(.*)'>\n<meta name='venue' content='(.*)'>\n~", file_get_contents($filename), $matches)
||
preg_match("~<meta name='date' content='(.*)'>\r\n<meta name='time' content='(.*)'>\r\n<meta name='venue' content='(.*)'>\r\n~", file_get_contents($filename), $matches))
正しい解決策は、おそらくです:
if (preg_match("~<meta name='date' content='(.*)'>[\r]?\n<meta name='time' content='(.*)'>[\r]?\n<meta name='venue' content='(.*)'>[\r]?\n~", file_get_contents($filename), $matches))
つまり、の場合、おそらくHTML & XMLを扱うために別の方法を使うべきでしょう。それ専用に構築されたパーサーがあります。
http://docs.php.net/manual/en/domdocument.loadhtml.phpまたはhttp://php.net/manual/en/book.xml.php
私は実際にテストしていませんが、iircはどちらもテストしていません。正規表現は私が多く使うものではありません。
編集: 正常に動作するようですか?
$file = "iorahgjajgasjgasjgasjgjaagaspokadsfgals<meta name='date' content='(.*)'>\n<meta name='time' content='(.*)'>\n<meta name='venue' content='(.*)'>\niorahgjajgasjgasjgasjgjaagaspokadsfgals";
if (preg_match("~<meta name='date' content='(.*)'>\n<meta name='time' content='(.*)'>\n<meta name='venue' content='(.*)'>\n~", $file, $matches)
|| preg_match ("~<meta name='date' content='(.*)'>\r\n<meta name='time' content='(.*)'>\r\n<meta name='venue' content='(.*)'>\r\n~", file, $matches)) {
echo "Success";
}
else {
echo "Fail";
}
$file = "iorahgjajgasjgasjgasjgjaagaspokadsfgals<meta name='date' content='(.*)'>\r\n<meta name='time' content='(.*)'>\n<meta name='venue' content='(.*)'>\r\niorahgjajgasjgasjgasjgjaagaspokadsfgals";
if (preg_match ("~<meta name='date' content='(.*)'>[\r]?\n<meta name='time' content='(.*)'>[\r]?\n<meta name='venue' content='(.*)'>[\r]?\n~", $file, $matches)) {
echo "Success";
}
else {
echo "Fail";
}
XML/HTML +正規表現= [BAD](http://stackoverflow.com/a/1732454/118068)。代わりにDOMを使用してください。改行文字を心配することもなくなります。 –
ありがとうございますが、DOMはまったく同じ動作をすることはできませんし、私は変更する余裕がありません。 100%の後方互換性が必要ない場合は、私はDOMを使用します。 – ChrisJJ
'// meta [@ name = 'time']'は十分正確ではありませんか? –