我使用此正则表达式来匹配日志行中的信息并从中提取:
^([^(]+)(([^)]+)):s([w]+)s([^:]*):s(.*)s[([^]]+)]$
它与的预期一样工作
p:\Application\PativeCommon\Cws2esel.h(50(:警告C26812:枚举类型"Cws2essel::eVesselSource"未受限制。首选"enum class"'enum'(enum.3(。[P:\PativeFunctionLib.vcxproj]
但由于以下行中的(x86(而失败
C:\Program Files(x86(\MicrosoftVisualStudio\2021\Community\VC\Tools\MSVC\14.28.29333\include\xmemory(702,82(:警告C4244:"初始化":从"double"转换为"_Objty",可能的数据丢失[G:\agent_work\48\s\Application\FunctionLib.vcxproj]
这是我的代码:
let rx = /^([^(]+)(([^)]+)):s([w]+)s([^:]*):s(.*)s[([^]]+)]/
let [, codeFile, codeLine, severity, ruleId, message, project] = logLine.match(rx);
regex101链接:https://regex101.com/r/n5kG86/1
我需要做哪些修改才能用(x86)
解析行。有没有办法忽略这个特定的字符串,或者向前看,匹配最接近:
的()
请随时提出更好/更优雅的解决方案。
您可以使用以下正则表达式:
^(.+?)((d[d,]*)):s(w+)s([^:]*):s(.*)s[([^]]+)]$
更新Regex Demo
前两个捕获组发生了重要变化:
^
:启动(.+?)
:第一个将字符串与任意字符中的一个或多个匹配的捕获组(惰性匹配((
:匹配开场(
(d[d,]*)
:第二个捕获组,用于匹配以数字开头、后跟0个或多个数字/逗号字符的字符串)
:匹配结束)