正则表达式对于特殊字符没有按预期工作

正则表达式对于特殊字符没有按预期工作

我有一个 Wireshark 捕获,我正在尝试创建一个显示过滤器 [Wireshark 文档]查找包含术语@@ V?(at-at-space-V-questionmark) 的 XML 文档。文档中说 Perl Regex 的使用方式如下:

匹配运算符可以使用正则表达式(使用 Perl 正则表达式语法)在字符串字段和字节序列中搜索文本。

注意:Wireshark 需要使用 libpcre 构建才能使用匹配运算符。

我无法确定这个条件是否适用,但一般来说我可以使用该matches运算符,因此我认为该部分已经满足。

我认为过滤器xml matches "@@ V\?"应该可以工作,但它发现不符合标准的 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

相关内容