我正在使用以下表达式:
^\s*(\w+)\s*:\s*(\w+)[\r\n\s]+(port|generic)
查找所有代码实例,例如:
I1 : ITT_example_design
PORT
这是一个多行结果。但是,这不起作用,但在 Notepad++ 的搜索功能中起作用。有什么想法有什么问题吗?
我正在使用以下表达式:
^\s*(\w+)\s*:\s*(\w+)[\r\n\s]+(port|generic)
查找所有代码实例,例如:
I1 : ITT_example_design
PORT
这是一个多行结果。但是,这不起作用,但在 Notepad++ 的搜索功能中起作用。有什么想法有什么问题吗?
首先,[\r\n\s]
您的正则表达式中的 是无用的,因为\s
它是[\r\n]
. 所以可以简化为^\s*(\w+)\s*:\s*(\w+)\s+(port|generic)
。
Notepad++ 和 SourceCookifier/CTags 使用不同的正则表达式引擎。N++ 使用 PCRE,而 CTags 使用 POSIX 样式(我不确定后者是否 100%,有人可以确认吗?)。
所以字符类\w
,\s
不适用于 SourceCookifier 的情况。分别将它们更改为适当[:word:]
的[:space:]
。
所以你的正则表达式应该是这样的:
[[:space:]]*([[:alnum:]]+)[[:space:]]*:[[:space:]]*([[:alnum:]_]+)[[:space:]]+(PORT|GENERIC)
CTags 正则表达式模式只适用于单行代码,不能同时适用于多行。因此,您需要在解析器本身中实现您的需求。