C# 无法识别的分组构造

C# 无法识别的分组构造,c#,.net,regex,match,C#,.net,Regex,Match,我有一个正则表达式,它应该将字符串置于已知字符串之间,但它不断抛出一个异常: 无法识别的分组构造 我的代码: Match matchKey = Regex.Match(m.Value, @"(?s*)key(.*?)</dt>"); Match matchKey=Regex.Match(m.Value,@“(?s*)键(.*)”; 键是第一个已知字符串,是第二个 我不明白这里出了什么问题?我测试了你的正则表达式,但它确实不起作用。注: (?s*):如果要捕获此组,您必须 选择?

我有一个正则表达式,它应该将字符串置于已知字符串之间,但它不断抛出一个异常:

无法识别的分组构造

我的代码:

Match matchKey = Regex.Match(m.Value, @"(?s*)key(.*?)</dt>");
Match matchKey=Regex.Match(m.Value,@“(?s*)键(.*)”;
键是第一个已知字符串,
是第二个


我不明白这里出了什么问题?

我测试了你的正则表达式,但它确实不起作用。注:

  • (?s*)
    :如果要捕获此组,您必须 选择
    或添加组名,如
    (?s*)
  • (?s*)
    :这匹配一个0到N倍字符的字符串
    s
    ,这是您真正想要的吗
  • :应该像这样转义/
下面是我在字符串
sssss keysomething
上尝试的正则表达式:

(s*)键(.*)

如果要在
之前和
之前捕获未知字符串,则应如下所示(在
SomethingkeySomething
上测试):

(*)键(*)

此模式无法编译。您需要使用
\
转义
/
。 其次,添加,您需要为组添加一个名称:

(?<first>s*)key(.*?)<\/dt>
(?s*)键(*?)

如果你想逐字匹配,你也需要转义


是一个尝试Regex的好网站。它将非常详细地描述您的模式,并指出任何错误。

您当前问题的答案是
(?
不是有效的分组结构。有关有效分组结构的列表,我建议您转到“快速参考”的右下角,选择“分组结构”。这也是构建和测试搜索的一个非常好的网站

在修复此组构造之后,仍然存在未转义
/
字符的问题,因此这也将返回一个错误

让我们一步一步地分解正在发生的事情:

(?s*)键(.*)
就是您要搜索的内容

(?
不是有效的分组结构,这是您出现错误的原因。根据您尝试执行的操作,您可以通过删除
将其更改为捕获组,或通过将其更改为
将其更改为非捕获组(?:
或者,如果你想做一些不同的事情,可能需要完全不同的改变。如果不知道你到底想要什么,我真的不能多说

s*
匹配0个或多个s字符

关闭分组构造

按字面意思匹配键

(.*)
匹配任何字符中的0个或多个字符。这在捕获组中。
使量词变懒,因此它将匹配尽可能少的字符

将给出一个错误,因为在正则表达式中使用
/
必须转义(
\/
)。将其更改为
将符合
的字面意思

因此,在更改这两个错误之后,我们会得到如下结果:
(?:s*)键(.*)


这现在起作用了。但是,我不知道它是否做了您希望它做的事情,因为我几乎不知道您真正想做的是什么。

可以给我一个字符串示例,说明您想匹配什么吗?
(?s*)
应该匹配什么?您需要通过
转义
)\(
如果你想匹配括号。否则,
没有意义-它是一个特殊的符号来匹配
0
1
之前的时间-如果你想匹配,它前面没有任何东西-还有转义
(?<first>s*)key(.*?)<\/dt>