请问一个正则表达式,如何匹配最长匹配项和最短匹配项

benbirdar 2008-10-14 09:53:07
Regex reg = new Regex("{(?<param>.*)}");
List<string> list = new List<string>();
Match m = reg.Match(str);
while (m.Success)
{
list.Add(m.Groups["param"].Value);
m = m.NextMatch();
}

我这个正则表达式,是获得字符串里的包含在大括号{}里面的内容,但是这个正则表达式是获得最长的{}里的内容
比如:
我的str="{内容1}/{内容2}{内容3}";

那么这个正则表达式获得的结果是: 内容1}/{内容2}{内容3


请高手帮忙,我怎么做可以获得
“内容1”、“内容2”、“内容3”、这三个部分的内容呢?



正则表达式有两个模式,,一个是匹配最长的匹配项,一个是匹配最短的匹配项,,我这个应该是最长的,,那最短的那种怎么写啊?
...全文
802 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nattystyle 2008-10-14
  • 打赏
  • 举报
回复
哈哈,楼上匹配的都不对,100分是我的了

你试试:

(?<={)\w+(?=})
bingbingw 2008-10-14
  • 打赏
  • 举报
回复
该死的网络,刚能回复~~
我姓区不姓区 2008-10-14
  • 打赏
  • 举报
回复

string str = "{内容1}/{内容2}{内容3}";
foreach (Match match in Regex.Matches(str, @"\{(?<param>[^}]*)\}"))
{
Console.WriteLine(match.Groups["param"].Value);
}

lizhengnan 2008-10-14
  • 打赏
  • 举报
回复
(?<=[{])[^}]*(?=[}])
lizhengnan 2008-10-14
  • 打赏
  • 举报
回复
(?<=[{])[^}]*(?=[}])
我姓区不姓区 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nattystyle 的回复:]
哈哈,楼上匹配的都不对,100分是我的了

你试试:

(? <={)\w+(?=})
[/Quote]
首先你的第一个?与<多了个空格就是一个错误,其次如果字符串是
{内容
1}/{内容2}{内容3}
那么“内容1”你就匹配不出来
说大话之前请先做好测试工作
止戈而立 2008-10-14
  • 打赏
  • 举报
回复
支持3楼。

或者这样也是可以的:
Regex reg=new Regex(@"(?<=\{)[^}]*(?=\})");
foreach(Match m in reg.Matchs(str))
{
//m.Value是匹配值
}

110,538

社区成员

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

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

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