正则,帮看看

验证码识别 2011-06-16 04:40:29

static public string GetMatch(string input, string pattern)
{
Regex re = new Regex(pattern);
Match myMatch = re.Match(input);
if (myMatch != null)
{
return myMatch.Value;
}
else
{
return "";
}
}



strContent = " 121.189.226.72 1253432292 1253432292\r\n";
string strMatch = GetMatch(strContent, @".*(?:(\r\n))");


为何 strMatch 结果为 " 121.189.226.72 1253432292 1253432292\r\n"
( 我认为应该是 " 121.189.226.72 1253432292 1253432292")

非捕获组 (?:(\r\n)) 不起作用 ?
...全文
83 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
验证码识别 2011-06-16
  • 打赏
  • 举报
回复
原来我想错了 非捕获组
验证码识别 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
.*(?:(\r\n))
.*使用贪婪模式匹配到 121.189.226.72 1253432292 1253432292\r
然后开始匹配\n,失配后回溯一次。
.*匹配 121.189.226.72 1253432292 1253432292
\r\n匹配后面的\r\n
结果记录到分组1,外面又多了一层括号进行组合并取消外层的组合。
所以结果就是你看到的。

我估计你笔误,想写……
[/Quote]
感谢, 不过没看懂

(?: 子表达式)(非捕获组。) 不捕获由子表达式匹配的子字符串。

这个难道不是匹配, 但不记录内容的意思?

为什么我加了(?:(\r\n)), 结果中还有 \r\n?
porschev 2011-06-16
  • 打赏
  • 举报
回复

为什么不直接用replace替换掉。。。\r\n??
兔子-顾问 2011-06-16
  • 打赏
  • 举报
回复
strContent = "  121.189.226.72 1253432292 1253432292\r\n";
string strMatch = GetMatch(strContent,@".*(?=\r\n)");
兔子-顾问 2011-06-16
  • 打赏
  • 举报
回复
.*(?:(\r\n))
.*使用贪婪模式匹配到 121.189.226.72 1253432292 1253432292\r
然后开始匹配\n,失配后回溯一次。
.*匹配 121.189.226.72 1253432292 1253432292
\r\n匹配后面的\r\n
结果记录到分组1,外面又多了一层括号进行组合并取消外层的组合。
所以结果就是你看到的。

我估计你笔误,想写

@".*(?=(\r\n))

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧