8

学校のプロジェクトの一環として非常に単純なスクリプトパーサーを作成します。必須ではありませんが、正規表現だけで実行できるかどうかが気になります。

構文はASPに似ており、スクリプトは<%で始まり、%>で終わります。

これは、echoまたはResponse.Writeと同じ1つのコマンド「pr」のみをサポートします。

現在、この正規表現を使用してスクリプトブロックを検索しています。

(<%\s*([\s\S]*?)\s*%>)

しかし、私がこのようなコマンドを持っている場合:

<% pr "%>"; %>

...明らかに一致するだけです:

<% pr "%>

引用符で囲まれた終了タグを無視するために純粋な正規表現を使用する方法はありますか?私の主な懸念は、引用符の間にあるタグと一致する可能性があることですが、それが理にかなっている場合は、実際には引用符の外側にあります。例えば...

<% pr "hello world"; %> "

技術的には、終了タグは引用符で囲まれていますが、「開く」、次に「閉じる」引用符の内側ではなく、その逆です。

これがかなりきちんとした正規表現で可能であれば、そうでなければ、この機能をサポートしたい場合は、着信テキストを手動で繰り返し処理し、ブロックを自分で解析する必要があると思います。これも大したことではありません。

ありがとう!

4

1 に答える 1

5

これはあなたのニーズに合うはずだと思います:(デモ<%(".*?"|.*?)*?%>を参照)。

説明:

可能な限り.*一致しますが、可能な限り一致しません。.*?

たとえば(擬似コードを使用)、

"#foo# #bar#".matches(/#(.*)#/).group(1) // will return ["foo# #bar"]

その間

"#foo# #bar#".matches(/#(.*?)#/).group(1) // will return ["foo", "bar"]
于 2012-12-12T15:10:15.143 に答える