用正则表达式匹配以字符串结尾的所有字符串,匹配字符该如何写?急!急!!急!!!

kitewgd 2006-12-17 10:47:54
请教各位大虾,用正则表达式匹配以字符串<f id=开头,以字符串</f>结尾的所有字符串,匹配字符该如何写?
...全文
3943 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dolfen 2006-12-18
  • 打赏
  • 举报
回复
以上的有一点不足,在以下这两种情况下:
1、<f id="f1">...<f>...</f>...</f>...<f id="f2">...<f>...</f>
匹配的只是第一个<f到第一个</f>,而不是第二个</f>
2、<f id= >...</f>
这种不完整的也被匹配到。

正则表达式改成这个样
<f\s+id=[^>\s]+((?:[^<]|<(?!f id=))*)</f>
可以匹配比较配对的完整的<f></f>标签对

不过还没有完全解决多重嵌套的问题,以下用depth关键字就解决了,不过有很多正则表达式引擎还没有支持,.net的Regex支持。
<f\s+id=(?>[^<>]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))</f>
wumingxiaodi 2006-12-18
  • 打赏
  • 举报
回复
string vsPattern = @"^<f id=.*</f>$";
if(Regex.IsMatch(vsText,vsPattern,RegexOptions.IgnoreCase))
{

}

测试过,呵呵
@"^<f id=\w*</f>$" 好像 ?<f id= adsfa ></f>"这样id=后面有空格的不能匹配?
共同学习!
icefeiji 2006-12-18
  • 打赏
  • 举报
回复
楼上的已经解决了~

偶是臭要饭的的朋友,来混饭吃了~
liujia_0421 2006-12-18
  • 打赏
  • 举报
回复
MatchCollection mc = Regex.Matches(yourString, @"<f\s+id=\w*</f>", RegexOptions.IgnoreCase);
-过客- 2006-12-18
  • 打赏
  • 举报
回复
这主要看你的<f id=和</f>之间是否有特殊情况的存在了,如果在这之间不会出现<或<f id=这样的字符串,好多正则都可以匹配的,试下下面的

MatchCollection mc = Regex.Matches(str, "<f id=.*?</f>", RegexOptions.IgnoreCase);
mobydick 2006-12-18
  • 打赏
  • 举报
回复
string yourStr = ......
MatchCollection mc = Regex.Matches(yourStr, "<f\\s+id=.+?>[\\s|\\S]*?</f>", RegexOptions.IgnoreCase);
foreach(Match m in mc)
{
m.Value;
}
cancerser 2006-12-18
  • 打赏
  • 举报
回复
<f id=[^<]*?</f>
liujia_0421 2006-12-18
  • 打赏
  • 举报
回复
匹配所有:

MatchCollection mc = Regex.Matches(yourString, @"^<f id=\w*</f>$", RegexOptions.IgnoreCase);
liujia_0421 2006-12-18
  • 打赏
  • 举报
回复
@"^<f id=\w*</f>$"
luck0235 2006-12-17
  • 打赏
  • 举报
回复
MatchCollection mc = Regex.Matches(yourString, "<f id=(?<any>.+?)</f>", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
Response.Write(m.Groups["any"].Value.ToString() + "<br />");
}
wangkun9999 2006-12-17
  • 打赏
  • 举报
回复
今天刚写完个类似的(中间有没有字符?):
中间有字符的:
string str = "SDGS<f id=content size=XXX style='XXXXX'>DGSDGS</f>";
str = System.Text.RegularExpressions.Regex.Replace(str,"<f id=.*?>.*?</f>","$");
Response.Write(str);
中间没有字符的:
string str = "SDGS<f id=content size=XXX style='XXXXX'></f>";
str = System.Text.RegularExpressions.Regex.Replace(str,"<f id=.*?></f>","$");
Response.Write(str);
chsl918 2006-12-17
  • 打赏
  • 举报
回复
<f id=[^>]*>([\s\S](?!<f id=))*?</f([^>])*>
缺点是要是出现了如下的形式则出错

<f id=开头, 中间还有一个<f id=的字符,结束符</f>
xyq1986 2006-12-17
  • 打赏
  • 举报
回复
^(<f id=)[\w\W]*(<\/f>)$
不确定
liujia_0421 2006-12-17
  • 打赏
  • 举报
回复
最好能写个该类型字符串的例子来看下...

110,538

社区成员

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

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

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