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*)
:这匹配一个0到N倍字符的字符串(?s*)
,这是您真正想要的吗李>s
:应该像这样转义/
sssss keysomething
上尝试的正则表达式:
(s*)键(.*)
如果要在键
之前和
之前捕获未知字符串,则应如下所示(在SomethingkeySomething
上测试):
(*)键(*)
此模式无法编译。您需要使用\
转义/
。
其次,添加,您需要为组添加一个名称:
(?<first>s*)key(.*?)<\/dt>
(?s*)键(*?)
如果你想逐字匹配,你也需要转义
是一个尝试Regex的好网站。它将非常详细地描述您的模式,并指出任何错误。您当前问题的答案是
(?
不是有效的分组结构。有关有效分组结构的列表,我建议您转到“快速参考”的右下角,选择“分组结构”。这也是构建和测试搜索的一个非常好的网站
在修复此组构造之后,仍然存在未转义/
字符的问题,因此这也将返回一个错误
让我们一步一步地分解正在发生的事情:
(?s*)键(.*)
就是您要搜索的内容
(?
不是有效的分组结构,这是您出现错误的原因。根据您尝试执行的操作,您可以通过删除?
将其更改为捕获组,或通过将其更改为将其更改为非捕获组(?:
或者,如果你想做一些不同的事情,可能需要完全不同的改变。如果不知道你到底想要什么,我真的不能多说
s*
匹配0个或多个s字符
)
关闭分组构造
键
按字面意思匹配键
(.*)
匹配任何字符中的0个或多个字符。这在捕获组中。?
使量词变懒,因此它将匹配尽可能少的字符
将给出一个错误,因为在正则表达式中使用/
必须转义(\/
)。将其更改为
将符合
的字面意思
因此,在更改这两个错误之后,我们会得到如下结果:(?:s*)键(.*)
这现在起作用了。但是,我不知道它是否做了您希望它做的事情,因为我几乎不知道您真正想做的是什么。可以给我一个字符串示例,说明您想匹配什么吗?
(?s*)
应该匹配什么?您需要通过转义(
)\(
如果你想匹配括号。否则,?
没有意义-它是一个特殊的符号来匹配0
或1
之前的时间-如果你想匹配,它前面没有任何东西-还有转义
(?<first>s*)key(.*?)<\/dt>