人々が言ったように、これはおそらく実りのない試みです。XML は正規の言語ではないからです。ただし、問題の一部は先読みです。直後に閉じ山括弧が続かないことを確認するだけです。これは、 of のようなものが不要な場合でも一致することを意味<ab
し<abc>
ます。そのため、先読みにタグ構造全体を含める必要があります。
あなたが与えた正確なデータの一致を取得するには、正規表現を使用できます。
#</?([a-z]?:)?[a-z]*(?!/?([a-z]?:)?[a-z]*>)#
ここで実際に見ることができます。ここで重要なのは、正規表現エンジンが後戻りして (たとえば、1 文字をドロップして) 先読みを検証できないようにすることです。これを行う方法は他にもあります。たとえば、通常のバックトラッキング プロセスで一致したトークンを放棄することを拒否する所有量指定子などがありますが、標準の .NET エンジンは所有一致をサポートしていません。これはアトミック グループをサポートします。これは同じように動作しますが、量指定子の代わりにグループを使用します。ここで、タグの開始部分全体をアトミック グループでラップしたことがわかります。( (?> ... )
)
#(?></?([a-z]?:)?[a-z]*)(?!>)#
タグをどのようにフォーマットするかについて、独自の正規表現を自由に入力できますが、この正規表現はすでに読み取り可能なコードの限界を押し上げていると言わざるを得ません。正当な xml タグ名をいじると、さらに限界が押し上げられます。その方向に。それにもかかわらず、これがエラーに光を当てるのに役立つことを願っています.