正则表达式取值的问题

yulinlover 2009-09-04 06:36:58
220 Welcome to TAP gateway for 263
ehlo ""
250-XFORWARD NAME ADDR PROTO HELO SOURCE
250-263.net
250-SIZE 47185920
250-ETRN
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5
250 8BITMIME

以上是我登录SMTP服务器后,使用ehlo指令后返回的内容,我希望用一个正则表达式取出这样的值:
我想取出从“250-AUTH”或者“250 AUTH”开头的行字符串里的所有登录类型

我自己使用的是:“250[-|\x20]AUTH[=|\x20](?<ValiTypes>(\w|\x20|-)+).+”这个来取的,但是取出来后,后期处理比较多(又是split的,又是trim的)。感觉麻烦,同事也觉得自己对正则的理解太差,所以来这里求个更强大的正则用一下。希望同志们多多帮忙

要求提供的正则达到如下要求:
如果是上面的返回字符串,则可以直接匹配出“PLAIN”“LOGIN”“CRAM-MD5”这些词。

另外一个小问题:
如果我想取以某个字符串“XXX”开头的行里不包含“XXX”内容的正则怎么写?
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yulinlover 2009-09-05
  • 打赏
  • 举报
回复
感谢lxcnn,你写的表达式@"(?m)(?<=250[-\x20]AUTH[=\x20](\S+\x20+)*)\S+(?=\x20+|$)"里好多东西都是我不是很了解的(好好的学习了一下),回来一查RegBuddy的手册,才知道这些不少都是被RegBuddy归结为高级语法里的东西。呵呵。顺便把这些所谓高级的语法贴在了我的Blog,想了解的大伙也可以去看一下。
十八道胡同 2009-09-05
  • 打赏
  • 举报
回复
zhongwei11 2009-09-05
  • 打赏
  • 举报
回复
去看看咯~~自己研究哈~~应该能写的出来  http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html~正则表达试
老Key 2009-09-04
  • 打赏
  • 举报
回复
xixi ,..帮lz顶了
-过客- 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengjian_428 的回复:]
2 (?=xxx)[^xxx]
[/Quote]

这种写法是错的,[^xxx]最终表示的是任意一个不是“x”的字符
如果是[^abc]表示的是除“a”、“b”、“c”外的任意一个字符,虽然是任意,但只能是一个字符,排除的是字符,而不是字符序列

如果我想取以某个字符串“XXX”开头的行里不包含“XXX”内容的正则怎么写?
(?m)^XXX(?:(?!XXX).)*$
-过客- 2009-09-04
  • 打赏
  • 举报
回复
try...

string test = @"220 Welcome to TAP gateway for 263 
ehlo ""
250-XFORWARD NAME ADDR PROTO HELO SOURCE
250-263.net
250-SIZE 47185920
250-ETRN
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5
250 8BITMIME
";
Regex reg = new Regex(@"(?m)(?<=250[-\x20]AUTH[=\x20](\S+\x20+)*)\S+(?=\x20+|$)");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
//输出
PLAIN
LOGIN
CRAM-MD5
PLAIN
LOGIN
CRAM-MD5
fengjian_428 2009-09-04
  • 打赏
  • 举报
回复
2 (?=xxx)[^xxx]

110,535

社区成员

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

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

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