3

この正規表現が何をするのか、誰かが私に例/説明を与えることができますか:

(?![#$])

これは<%(?![#$])(([^%]*)%)*?>、ASP.NET がサーバー側のコード ブロックを解析するために使用するものの一部です。式の 2 番目の部分は理解できますが、最初の部分は理解できません。

ドキュメントを確認したところ(?! ...)、ゼロ幅の負の先読みを意味することがわかりましたが、それが何を意味するのか完全にはわかりません。これまでに試した入力はすべて機能しているよう<% ... %>に見えます-なぜこの最初の部分式がそこにあるのだろうか。

編集: ASP.NET 式をピックアップするためのこの式を思いつきました:<%.+?%>次に、Microsoft が作成したものを見つけました (上記の完全な式が問題です)。私の表現の方がはるかに単純に見えるのに、なぜ彼らがその特定の表現を選んだのかを理解しようとしています. (私の表現が、MS の境界条件が無視しない特定の境界条件を無視するかどうかを確認しようとしています。)

4

1 に答える 1

4

次の文字がまたはでない場合に一致する否定的な先読みアサーションですが、それを消費しません。#$

[^#$]否定文字クラスも文字を消費し、式の残りの部分と一致しないことを除いて、否定文字クラスと非常によく似ています。

違いを確認するには、マッチングを検討してください<%test%>

  • 式は<%(?![#$])(([^%]*)%)*?>キャプチャしtest%ます。(ルーブル)
  • が負の文字クラスによって消費されたため、式<%[^#$](([^%]*)%)*?>がキャプチャされます。(ルーブル)est%t
于 2012-04-27T06:35:23.463 に答える