我正在尝试在 Wazuh 工具的 PCRE2 正则表达式中使用环视元素,我需要匹配双引号中的字符串并制作下面的正则表达式,但它看起来拾取“<”字符而不关闭正则表达式元素。
<regex type="pcre2">(?<=").*?(?=")</regex>
错误:(1226):读取 XML 文件“etc/decoders/local_decoder.xml”时出错:XMLERR:元素“=”)。?(?=")</regex' 未关闭。(第 33 行)。*
我试图逃避 (?<=")但是它似乎不起作用。知道如何转义它以便正确解析元素
答案1
PCRE2 正则表达式语法允许您以不同的等效方式编写断言:
(?<=
与以下任意一个相同:(*plb:
(*positive_lookbehind:
(?=
与以下任意一个相同:(*pla:
(*positive_lookahead:
(这是来自 PRCE2 库的pcre2pattern
手动的.)
这意味着您应该能够重写正则表达式,而无需使用 XML 中的特殊字符(<
在本例中)作为更具表现力的字符
<regex type="pcre2">(*positive_lookbehind:").*?(*positive_lookahead:")</regex>
或简洁的
<regex type="pcre2">(*plb:").*?(*pla:")</regex>
答案2
<
是一个 XML 元字符,必须编码为<
或类似的。
另外,>
is>
和字面量&
是&
然而,您正在使用的工具似乎在这方面存在错误,因此您必须找出解决方法;看https://github.com/wazuh/wazuh/issues/14261