求个简单的正则表达式

net205 2011-09-29 10:15:16
var abc = new string[] { "news", "/news", "/news/", "/news/abc", "/news/abcdew/", "/news/abcd/test.aspx", "/news/add/abc.jpb", "/news/wew/news/"};

这样的字符串,我想匹配到news后面第一个斜线与第二个斜线之间的字符,结果应该是:
"news" -> 失败
"/news" -> 失败
"/news/" -> 失败
"/news/abc" -> 成功,groups[1]为 abc
"/news/abcdew/" -> 成功,groups[1]为 abcdew
"/news/abcd/test.aspx" -> 成功,groups[1]为 abcd
"/news/add/abc.jpb" -> 成功,groups[1]为 add
"/news/wew/news/" -> 成功,groups[1]为 wew

我目前使用的是/news/(.+?)(/\.)?和/news/(.+)?(/\.)? ,这2个都不行。
...全文
189 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangwenquan123 2011-10-11
  • 打赏
  • 举报
回复
时隔10天lz在次现身
            List<string> list = new List<string> { "/gz", "/", "/gz?a=23", "/gz/abc.aspx", "/gz/abc.aspx?id=23", "/job/", "/job/?abc=233", "/job#top", "/job/?abc=233#top" };
Regex reg = new Regex(@"(?<=/)[^#?/]+");
foreach (string s in list)
Console.WriteLine(reg.Match(s).Value);
net205 2011-10-11
  • 打赏
  • 举报
回复
还有类似这样的:
/job#top     -> 能匹配,得到job
/job/?abc=233#top -> 能匹配,得到job
net205 2011-10-11
  • 打赏
  • 举报
回复
谢谢各位.
huangwenquan123的可以, sunny906的不满足要求,其他的几个好像可以,没仔细测

现在需求有变,情况是:
Request.RawUrl获取url后面的地址,有很多种情况,类似:
/gz
/
/gz?a=23
/gz/abc.aspx
/gz/abc.aspx?id=23
/job/
/job/?abc=233

除了上面第二个以外,其他的都要能匹配,配置到的字符应该是gz或job

我写了一个不符合要求:/(.+)[/|\?]*
然后取match.Groups[1].Value
sunny906 2011-09-30
  • 打赏
  • 举报
回复

string[] str = new string[] { "news", "/news", "/news/", "/news/abc", "/news/abcdew/", "/news/abcd/test.aspx", "/news/add/abc.jpb", "/news/wew/news/" };
foreach (string s in str)
{
Match match = Regex.Match(s, "/news/(?:.)+", RegexOptions.IgnoreCase);
Console.WriteLine(match.Value);
}

///news/abc
///news/abcdew/
///news/abcd/test.aspx
///news/add/abc.jpb
///news/wew/news/
querystringcom 2011-09-30
  • 打赏
  • 举报
回复
专业接分
nbgcqlk 2011-09-30
  • 打赏
  • 举报
回复
Regex reg = new Regex(@"^.*news\/([^\/]+)\/?.*$");
Console.WriteLine(M.Groups[1].Value);
编程有钱人了 2011-09-30
  • 打赏
  • 举报
回复
3L正解!
编程有钱人了 2011-09-30
  • 打赏
  • 举报
回复
3L正解!
你的选择H 2011-09-29
  • 打赏
  • 举报
回复

var abc = new string[] { "news", "/news", "/news/", "/news/abc", "/news/abcdew/", "/news/abcd/test.aspx", "/news/add/abc.jpb", "/news/wew/news/" };

for (int i = 0; i < abc.Length; i++)
{

Console.WriteLine(Regex.Match(abc[i], @"(?<=/news/)\w*(?=/?)"));
}
/*
结果:
abc
abcdew
abcd
add
wew
*/
better0001 2011-09-29
  • 打赏
  • 举报
回复
顶起,学习。
huangwenquan123 2011-09-29
  • 打赏
  • 举报
回复
            string[] abc = new string[] { "news", "/news", "/news/", "/news/abc", "/news/abcdew/", "/news/abcd/test.aspx", "/news/add/abc.jpb", "/news/wew/news/" };
Regex reg = new Regex(@"(?<=news/)[^/]+");
foreach (string s in abc)
Console.WriteLine(reg.Match(s).Value);

111,094

社区成员

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

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

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