C# 卡在C中的正则表达式上#
我现在有这个C# 卡在C中的正则表达式上#,c#,regex,C#,Regex,我现在有这个 ([\w\-"]+)[ ]+OBJECT-TYPE[^[::=]*]*::=[ ]*\{[ ]*([\w\-"]+) ([\w\-"]+) 它所做的就是搜索这样的东西: DATA1 OBJECT-TYPE SYNTAX SEQUENCE OF ContactInfoEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A table containing Contact Info information" ::=
([\w\-"]+)[ ]+OBJECT-TYPE[^[::=]*]*::=[ ]*\{[ ]*([\w\-"]+) ([\w\-"]+)
它所做的就是搜索这样的东西:
DATA1 OBJECT-TYPE
SYNTAX SEQUENCE OF ContactInfoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A table containing Contact Info information"
::= { DATA2 DATA3 }
我只是有一个问题,我想我已经解决了
OBJECT-TYPE[^[::=]*]*::=
这意味着搜索字符串“OBJECT-TYPE”之后的任何字符,该字符串不是“:=”直到它实际找到“:=”这很有效,直到我注意到
[^[::=]*]*
实际上是指:or=而不是exact字符串“:=”那么我该如何修复它呢
编辑:如果有人还在这里,所以我不需要再问其他问题,我如何忽略两人之间的任何和所有字符、符号、数字等。“示例:
不要忽略这个“忽略这里的一切”不要再次忽略“再次忽略”等你可以在这种结构中使用a:
(?:(?!::=).)*
要匹配除以外的任何字符,请执行以下操作:=
顺便说一下,
[^[::=]*]*
将匹配除[
,:
,=
,]
之外的任何字符,然后是0个或更多的]
对于第二部分,您可以使用类似的方法,并进行一些简化:
([\w"-]+)[ ]+OBJECT-TYPE(?:"[^"]*"|(?!::=).)*::=[ ]*{[ ]*([\w"-]+) ([\w"-]+)
尝试(:|=)将选择其中一个。不确定是否需要转义:或=尽管。您可以尝试负面环视:
^((?!:=))*
没有其他选择吗?我不喜欢lookaheads,它们在大文件和多个文件上占用了太多的CPU资源,@Vajura我也不太喜欢它们,但是不,如果使用否定类,它会复杂得多。你可以搜索“替代消极前瞻”,我得到的第一个选项是。你能定义“忽略”和“忽略”是什么意思吗不要忽视"? 正则表达式是关于匹配和不匹配。。。也许你的意思是引号之间的:=
不应该被视为真的:=
,有点像一个注释?哦,是的,对不起,糟糕的措辞,我只是说逗号之间的所有内容都应该与正则表达式匹配,是的,正如你说的,它不应该被视为真的:=@Vajura好的,我不确定您到底想在哪里使用这种行为,但我已经编辑了我的答案,以便在对象类型
之后加引号的内容被“忽略”。让我知道这是否适用于您:)