C# 正则表达式匹配太多 (\[(c | c)=)(#?([a-fA-F0-9]{1,2}{3})\](.*)\[/(c | c)\]

C# 正则表达式匹配太多 (\[(c | c)=)(#?([a-fA-F0-9]{1,2}{3})\](.*)\[/(c | c)\],c#,regex,C#,Regex,我想让这个表达式匹配如下文本:“这是[c=FFFFFF]白文本[/c]和[c=#000]黑文本[/c]” 它确实单独匹配一个BB代码,但如果彼此之后有更多的BB代码(如示例中所示),它将创建两个BB代码序列的匹配(1个匹配)。(从[c=FFFFFF]wh…到…ck text[/c]) 为什么会这样?另外,如何使点(.)在C#中包含换行符?这种情况发生是因为RE是;它将始终尝试产生尽可能大的匹配 应该可以使您的RE引擎不贪婪,请参阅链接文档以获取有关尝试方法的提示。之所以会出现这种情况,是因为RE

我想让这个表达式匹配如下文本:“这是[c=FFFFFF]白文本[/c]和[c=#000]黑文本[/c]”

它确实单独匹配一个BB代码,但如果彼此之后有更多的BB代码(如示例中所示),它将创建两个BB代码序列的匹配(1个匹配)。(从[c=FFFFFF]wh…到…ck text[/c])


为什么会这样?另外,如何使点(.)在C#中包含换行符?

这种情况发生是因为RE是;它将始终尝试产生尽可能大的匹配


应该可以使您的RE引擎不贪婪,请参阅链接文档以获取有关尝试方法的提示。

之所以会出现这种情况,是因为RE是;它将始终尝试产生尽可能大的匹配


应该可以使您的重新引擎不贪婪,请参阅链接文档以获取尝试方法的提示。

如果您不关心嵌套标记,您可以这样做:

(\[[cC]=)(\?([a-fA-F0-9]{3}{1,2})\](.*?\[/[cC]\]
//^-惰性匹配

如果您想使用正则表达式处理嵌套标记,请检查代码项目。

如果您不关心嵌套标记,可以执行以下操作:

(\[[cC]=)(\?([a-fA-F0-9]{3}{1,2})\](.*?\[/[cC]\]
//^-惰性匹配

如果要使用正则表达式处理嵌套标记,请检查代码项目。

如果设置选项
RegexOptions,则点匹配换行符。如果设置选项
RegexOptions,则点匹配换行符。

如果设置选项
RegexOptions.Singleline
()。

您需要一个惰性正则表达式来不拾取所有[c]标签

试试这个

\[c=(#?.*)\](.*)\[/c\]或
\[c=(#?\w*?)\](\w*?)\[/c\]

您应该将regex对象上的选项设置为ingnore大小写。

您需要一个惰性正则表达式来不拾取所有的[c]标记

试试这个

\[c=(#?.*)\](.*)\[/c\]或
\[c=(#?\w*?)\](\w*?)\[/c\]

您应该将regex对象上的选项设置为ingnore大小写。

regex是一种快速而肮脏的方法,这里的解决方案是使用
*?
而不仅仅是
*
。然而,如果您想要一个更健壮的解决方案,没有regex可能会更容易。在C#中,您碰巧能够创建嵌套结构,但这并不意味着它实际上很容易。最好使用词法分析器并构造DOM。很可能代码更易于阅读和维护。

Regex是一种快速而肮脏的方法,这里的解决方案是使用
*?
而不仅仅是
*
。然而,如果您想要一个更健壮的解决方案,没有regex可能会更容易。在C#中,您碰巧能够创建嵌套结构,但这并不意味着它实际上很容易。最好使用词法分析器并构造DOM。最有可能的是,代码更易于阅读和维护。

您希望将“FFFFFF和#000”匹配成什么,还是希望将“FFFFFF白色测试和#000黑色文本”匹配成“FFFFFF和#000”还是希望将“FFFFFFFF白色测试和#000黑色文本”匹配成什么