=raw

> を見つける

=/raw < (lt) が見つかったなら、次は、> (gt) を見つけて、タグの位置を確定する。 ----------------------------------------------- まずはシンプルなケースから始めよう。 以下の場合、有効なgtは、"span"の後に来る > である。 ----------------------------------------------- さて次はどうなるだろうか? この場合、最後のgtが、このタグを閉じる文字になる。 abの間にあるgtは、ストリングに中にあるので、閉じる文字にはならない。 同様にして、以下の例のようにsingle quoteでも、最後のgtが閉じる文字になる。 ----------------------------------------------- quoteがない場合はどうなるのか? b> この場合は、でひとつのタグとみなされる。 つまり、"..." か '...' 内にある > は無視されるが、 quoteなしのストリングでは、無視は起きない。 ----------------------------------------------- 次にストリング外部に > があった場合を考える。 次の例では、がタグと認識されて、残りはテキストになる。 ='ab'> 次の例では、がタグと認識されて、残りはテキストになる。 'ab'> つまり、"..." か '...' 内にある > は無視され、外にあるのは、 タグを閉じる文字として認識される。 結局 "..." と '...' のストリングは認識する必要があるわけだたが、 HTMLのストリングは、PHPやJavaScriptにある \ のような、 エスケープ文字はあるのだろうか? "...\"..." '...\'...' 以下の文を読むと、答えは「無い」ということがわかる。 You can use single quotes inside double quotes or double quotes inside single quotes. If you want to use single quotes inside single quotes or double quotes inside double quotes, you have to HTML encode them. 結局、以下のように、HTMLエンコードした " をいれることになる。 エスケープ文字を気にしなくていいぶん、パースは楽になるといっていい。 ----------------------------------------------- さて、ストリングといっても、Keyが無いValueはストリングとして扱われない。 下の例では、がタグとなり、残りはテキストになる。 y" data-str="ab"> つまり "x はValueのないKeyになるのである。 次に例もトリッキーだ。 b"> これは、でひとつのタグとなる。 なぜ a の後にくる > は無視されないのか? 一見すると > は"a>b"というdouble-quoteのストリングに 中にあるようにみえるのだが、実は、#@$"a>b" という quote無しのストリングなのだ。 タグをパースするには、key=valueペアを意識する必要がある。 これを無視して、"..." と '...' をくくりだしても、 その中にある > を正しく解釈することはできない。 タグ内で、keyを探している時に出会った > は閉じ文字である。 タグ内で、quoteされたvalue内で > と出会った場合、無視できる。 しかし quoteされていないvalue内で > と出会った場合は閉じ文字である。 -----------------------------------------------