Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 为什么将此正则表达式类更改为.+不提供任何匹配?_C#_.net_Regex - Fatal编程技术网

C# 为什么将此正则表达式类更改为.+不提供任何匹配?

C# 为什么将此正则表达式类更改为.+不提供任何匹配?,c#,.net,regex,C#,.net,Regex,如果我用这个 string showPattern = @"return new_lightox\(this\);"">[a-zA-Z0-9(\s),!\?\-:'&%]+</a>"; MatchCollection showMatches = Regex.Matches(pageSource, showPattern); 我得到了一些匹配项,但我想去掉[a-zA-Z0-9\s,!\?\-:'&%]+并使用任何字符+ 但如果这样做,我就没有对手了 我做错了什么?默认情

如果我用这个

string showPattern = @"return new_lightox\(this\);"">[a-zA-Z0-9(\s),!\?\-:'&%]+</a>";
MatchCollection showMatches = Regex.Matches(pageSource, showPattern);
我得到了一些匹配项,但我想去掉[a-zA-Z0-9\s,!\?\-:'&%]+并使用任何字符+ 但如果这样做,我就没有对手了


我做错了什么?

默认情况下。不匹配换行符,但类\s匹配。

您正在匹配一个标记,因此您可能希望沿着这些行而不是+:

让。匹配换行符,启用SingleLine/DOTALL模式-如图所示,在函数调用中使用标志,或使用内联修饰符,如整个表达式所示:

"(?s)return new_lightox\(this\);"">.+</a>"
或仅针对其特定部分:

"return new_lightox\(this\);"">(?s:.+)</a>"
最好再进一步,这样做:

"return new_lightox\(this\);"">(?s:(?!</?a).+)</a>"
这将防止关闭属于不同的链接


但是,在这里您需要非常小心-不清楚您总体上在做什么,但是regex不是解析HTML的好工具,并且可能会导致各种各样的问题。请考虑改用HTML DOM解析器,例如。

为了准确起见,此答案应说明\s匹配所有空格,而不仅仅是换行符。您能让问题的标题更具描述性吗?现在,其他需要答案的人找不到答案。我已经尝试了一个更好的标题,但如果有人有更好的标题,请继续并更改它。。。啊,看来我的编辑和亚伯的错了:@iwein:完成了,但是如果还不够清楚,就把它改成更好的。编辑:对不起,彼得,我们真的很不般配。我更喜欢你的,我把它改回来了
"return new_lightox\(this\);"">(?s:.+)</a>"
"return new_lightox\(this\);"">(?s:(?!</?a).+)</a>"