这是我目前在C#中的正则表达式
"(?<name>" + word + @"[ \n]+MODULE-IDENTITY(?<data>[" + anySymbol + @"]*?)::=[ \n]*\{[ \n]*" + "(?<parent>" + word + " " + "(?<oid>" + word
以下是对所有内容的解释,它并不复杂:
?<name>
,?<data>
等仅用于命名变量word
和anySymbol
是保存特定符号的字符串。在word
\w
,-
和"
。在anySymbol
,它几乎是每个角色。MODULE-IDENTITY
是搜索::=
之后的anySymbol + @"]*?)
是第二个要查找的关键字现在复杂的部分来自MODULE-IDENTITY
之后和::=
之前的部分,可能会出现::=
,但它们只出现在双引号"in here"
内。现在我想要的是忽略那些::=
引号内的任何人都有想法?
答案 0 :(得分:2)
根据评论中的regex101链接,我制作了此正则表达式,可以匹配::=
""
之外的::=
中的""
的多个实例:
IMPORTS(?<data>(?:[^:"]|:(?!:=)|"[^"]*")*)::=
我不太了解它与原始C#代码的关系,但这可以帮助您走上正确的道路。基本上它是在IMPORTS
之后说的:
[^:"]
不是 :
或"
|
或 :(?!:=)
:
不是 跟随<{em} :=
(一起制作::=
你不想匹配)|
或 "[^"]*"
一个"
后跟任何不是"
的内容(但很可能是::=
),然后是"
整个事情不是放在(?:...)
组中,可以重复0次或更多次,其结果被捕获为<data>
。
一些一般提示:
.
支持使用否定类([^...]
)