Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex匹配其他Regex不匹配的任何内容';不匹配_C#_Regex - Fatal编程技术网

C# Regex匹配其他Regex不匹配的任何内容';不匹配

C# Regex匹配其他Regex不匹配的任何内容';不匹配,c#,regex,C#,Regex,我使用正则表达式。我有下面的正则表达式,它符合我的所有要求: 很长-对不起。它用于解析任意对象的格式字符串。它使我能够指定属性(例如IntValue)并向其转发可选的子格式 它匹配一个,后跟一个可选的非捕获模式?:,后跟一个可选的“选项”模式(?r)或(?a-r)。然后,属性名后跟一对[] 对于以下输入: Int:#IntValue Bool:#BoolValue[]Word Str:“#StrValue”Double:#DoubleValue[#.00]#(#r)Bar[#(#r)StrVa

我使用正则表达式。我有下面的正则表达式,它符合我的所有要求:

很长-对不起。它用于解析任意对象的格式字符串。它使我能够指定属性(例如IntValue)并向其转发可选的子格式

它匹配一个
,后跟一个可选的非捕获模式
?:
,后跟一个可选的“选项”模式
(?r)
(?a-r)
。然后,属性名后跟一对
[]

对于以下输入:

Int:#IntValue Bool:#BoolValue[]Word Str:“#StrValue”Double:#DoubleValue[#.00]#(#r)Bar[#(#r)StrValue[#Length]

它匹配:

  • #内在价值
  • #布尔值
  • #标准值
  • #双值[#.00]
  • #(?r)条[#(?r)标准值[#长度]]
好的

但是现在我需要所有其他的东西。我希望它在同一个正则表达式中能够对所有匹配进行foreach(我可以通过检查
id
plain
是否有捕获来决定我的大小写)

默认模式是:
((?!))*

在我的例子中,这看起来像(模式:
|(?(?:(?!)+)
) 是什么导致了巨大的正则表达式(whitch maches完美):

普。它做它应该做的,但是

有没有其他方法来匹配以前的正则表达式部分不匹配的所有内容


清楚吗?

你很幸运:你的正则表达式以一个锚字符开头,它是
#
。我们可以利用这一点

为该模式添加一个替代选项:
|[^#]+
。这将消耗除
#
字符以外的所有字符,将以
#
开头的特殊情况保留在模式的第一部分。因此,
#
字符将始终开始新的匹配

还有一个小问题:第一部分中有一个非可选的
id
组,由两个
\b
锚点包围,这意味着如果输入字符串中有一个
#
,后面没有字母(比如说
foo##bar
),模式的第二部分也不会匹配该
#


这个问题的一个简单解决方案是在模式的末尾使用
|[^#]+|#
来解释此边缘情况。第三个
#
案例只有在第一个案例失败时才会匹配。

为什么不直接执行
!regex.IsMatch(输入)?@Rob,因为我解析了一个字符串。我需要所有的零件。某些部分与我的属性模式匹配。但现在我还需要所有其他的东西
Regex.IsMatch
将只检查是否存在匹配项。是的,有多个匹配项。整个字符串将匹配
regex.IsMatch
对我没有帮助。在模式中附加
[^#]+
不是一个可以接受的解决方案吗?@lucastrezesniewski???哇!它似乎起作用了。看起来很简单。我必须思考一下,才能理解它为什么有效(确保它适用于所有情况)。@lucastrezesniewski Grrr。。你在我写评论的时候发表了你的评论。我想我明白了。是的,我想你是对的。(我什么都想要。)但我的属性模式总是以
#
开头。这迫使交替使用另一种情况。由于正则表达式的贪婪性,这应该是可行的。请将您的评论作为答案发布。之后的所有内容都是可选的。没有。
id
不是可选的,但是你的解释也可以。哦,对了,我一定看到了一个不在那里的