愛すべき正規表現の話。
XML オブジェクトに HTML ソースを突っ込んじゃうとエラーになるので、ソースの先頭に<?xml ~ ?> というタグが在るかどうかをチェックして、あれば XML ソースと判断しようかと。
Perl で書けば(取得したソースが、変数 $patternText に格納されているとすれば)、
if ($patternText =~ /<\?xml.*?\?>/s) {
<処理>
}
という正規表現でバッチリだ。(/^<\?xml\s.*?\s\?>/s とした方が良いかもね~。ま、今回はテストなので、あまり厳密にならないように:-P)
これをそのまま、RegExp のオブジェクトとして、
var xmlPattern:RegExp = new RegExp("<\?xml.*?\?>", "s");
var matchText:String = xmlPattern.exec(patternText);
と書いてみたんだけど、全然マッチしねえの。(^^;
でも、
var xmlPattern:RegExp = /<\?xml.*?\?>/s;
って書くとマッチするなあ。つーか、この方が書きやすいし。
matchText にもちゃんとマッチした文字列として <?xml version="1.0" encoding="utf-8" ?> がセットされてるし、ばっちしじゃん。
ああ、ActionScript 3.0 コンポーネントリファレンスガイドに記述があった。
「ストリングリテラルの中では、単一の円記号として認識されるためには二重に円記号を入力する必要がある」だって。
確かに、
var xmlPattern:RegExp = new RegExp("<\\?xml.*?\\?>", "s");
と書いたら、ばっちりヒットしたわ。
ま、でも、//s な書き方の方がしっくりくるので、こういう書き方はもう二度としないだろうなあ。
コメントする