正規表現が特殊文字に対して期待どおりに機能しない

正規表現が特殊文字に対して期待どおりに機能しない

Wiresharkのキャプチャがあり、表示フィルター [Wireshark ドキュメント]これは、(at-at-space-V-questionmark) という用語を含む XML ドキュメントを検索します@@ V?。ドキュメントには、Perl Regex が使用されていると記載されています。

matches 演算子を使用すると、Perl 正規表現構文を使用して、正規表現を使用して文字列フィールドおよびバイト シーケンス内のテキストを検索できるようになります。

そして

注意: matches 演算子を使用するには、Wireshark を libpcre でビルドする必要があります。

この条件が適用されるかどうかはわかりませんが、一般的には演算子を使用できるのでmatches、その部分は満たされていると想定します。

個人的には、フィルタはxml matches "@@ V\?"機能するはずですが、基準に合わないXML、例えば次のようなXMLを見つけてしまいます。

<?xml version="1.0"?>
<dialog><sysdef name="TERMREC" value="@@ U1160613113912"/></dialog>

私のフィルターまたは Wireshark に何が問題なのでしょうか?

特殊文字を含まないフィルター (例xml matches "@@ V0") を使用すると、期待どおりに機能します。特殊文字を含むその他のフィルター (例xml matches "@@ V1\*") は機能しません。

答え1

xml matches "@@ V\\?"二重のバックスラッシュ (例:および )を使用する必要があることがわかりましたxml matches "@@ V1\\*"

これを C++ や C# のようなコードで実行する必要があることは知っていましたが、ユーザー入力フィールドでこれを実行するとは思っていませんでした。特に、単一のバックスラッシュを含む無効な式がエラーにならず、代わりに誤った結果を返すのはなぜか疑問に思います。

開けましたWireshark バグ 12522

関連情報