问个Net正则表达式的问题,高分赠送

fkphp 2008-07-29 11:15:58
<meta\s+(name=\s*[\"\']?keywords[\"\']?\s+content=\s*[\"\']?[^>]+[\"\']?\s*>)|(<meta\s+content=\s*[\"\']?[^>]+[\"\']? name=\s*[\"\']?keywords[\"\']?\s*)[\/]?\s?>

上面这个正则表达式可以匹配下面这段字符
------------------------
<META content=".net,正则表达式,使用,反向引用" name="Keywords" />
------------------------

现在我需要获取到content的内容,我应该怎么改这个正则了,类似于下面这个调用

Regex searchTitle = new Regex("<b>(?<b>[\\s\\S]*?)<\\/b>", RegexOptions.IgnoreCase);
if (oM.Success)
{
Response.Write(oM.Groups["b"].Value.Trim());
}

...全文
311 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
深夜情感老师 2009-05-29
  • 打赏
  • 举报
回复
我想用正则很久了,可是至今我的正则仍然是半吊子
fkphp 2008-07-29
  • 打赏
  • 举报
回复
感激万分,好了.
a12321321321312321 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yuanmanguo 的回复:]
学习,帮订
[/Quote]
wangkun9999 2008-07-29
  • 打赏
  • 举报
回复
像这种位置不固定html属性代码用正则来实现比较费力,幸好这里还只是判断了两种情况,如果是有n多属性的话就很难用正则来实现了,像这种html代码,建议用下面的方式实现:
1.如果代码符合xml标准的话建议用xml来实现.
2.网上好像有那种可以解析hmtl格的组件parehtml;
wangkun9999 2008-07-29
  • 打赏
  • 举报
回复

string str="<html>asfsad<META content=\".net,正则表达式,使用,反向引用\" name=\"Keywords\" /> asfasfas<META name=\"Keywords\" content=\"测试第二种情况\" />";
System.Text.RegularExpressions.Regex reg=new System.Text.RegularExpressions.Regex(@"<meta(\s+content=(['""]?)(?<content>[^""'>]*)(\2)\s+name=(['""]?)Keywords(\4)\s+)|(\s+name=(['""]?)Keywords(['""]?)\s+content=(['""]?)(?<content>[^""'>]*)(['""]?)\s+).*?>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.MatchCollection m = reg.Matches(str); //设定要查找的字符串
for (int i = 0; i < m.Count; i++)
{
Response.Write(m[i].Groups["content"].ToString()+"<br>");
}

fkphp 2008-07-29
  • 打赏
  • 举报
回复
<meta\s+(name=\s*[\"\']?keywords[\"\']?\s+content=\s*[\"\']?[^>]+[\"\']?\s*>) ¦( <meta\s+content=\s*[\"\']?[^>]+[\"\']? name=\s*[\"\']?keywords[\"\']?\s*)[\/]?\s?>

wangkun9999 的已经OK了,不过只考虑了一种情况,你看我贴的正则,meta有几种情况,content可能放前面也可能放后面,所以才加了一个|,能不能再帮忙改进一下,感激不尽.
wangkun9999 2008-07-29
  • 打赏
  • 举报
回复
正则改进下:

System.Text.RegularExpressions.Regex reg=new System.Text.RegularExpressions.Regex(@"<meta\s+.*?content=(['""]?)(?<content>[^""'>]*)(\1)\s+name=(['""]?)Keywords(\3)\s.*?>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
fkphp 2008-07-29
  • 打赏
  • 举报
回复
还要加个条件,是keywords的,不是所有的content
wangkun9999 2008-07-29
  • 打赏
  • 举报
回复

string str="<META content=\".net,正则表达式,使用,反向引用\" name=\"Keywords\" /> ";
System.Text.RegularExpressions.Regex reg=new System.Text.RegularExpressions.Regex(@"<meta\s+.*?content=(['""]?)(?<content>[^""'>]*)(\1)\s+.*?>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.MatchCollection m = reg.Matches(str); //设定要查找的字符串
for (int i = 0; i < m.Count; i++)
{
Response.Write(m[i].Groups["content"].ToString()+"<br>");
}

快乐的毛毛虫 2008-07-29
  • 打赏
  • 举报
回复
帮你顶了
fkphp 2008-07-29
  • 打赏
  • 举报
回复
正在分析“<meta\s+(name=\s*["']?keywords["']?\s+content=\s*["']?<ContentGroupName>(?[^>]+)["']?\s*>)|(<meta\s+content=\s*["']?<ContentGroupName>(?[^>]+)["']? name=\s*["']?keywords["']?\s*)[\/]?\s?>”- 无法识别的分组构造。

报错了, 要求很简单,就是匹配meta的content值就可以了.
guyan033 2008-07-29
  • 打赏
  • 举报
回复
<meta\s+(name=\s*[\"\']?keywords[\"\']?\s+content=\s*[\"\']?<ContentGroupName>(?[^>]+)[\"\']?\s*>) ¦( <meta\s+content=\s*[\"\']?<ContentGroupName>(?[^>]+)[\"\']? name=\s*[\"\']?keywords[\"\']?\s*)[\/]?\s?>

Groups["ContentGroupName"].value

就可以得到content 的内容了
yuanmanguo 2008-07-29
  • 打赏
  • 举报
回复
学习,帮订
kbryant 2008-07-29
  • 打赏
  • 举报
回复
友情帮顶
hglai 2008-07-29
  • 打赏
  • 举报
回复
<meta\s+(name=\s*[\"\']?keywords[\"\']?\s+content=\s*[\"\']?[^>]+[\"\']?\s*>) ¦( <meta\s+content=\s*[\"\']?[^>]+[\"\']? name=\s*[\"\']?keywords[\"\']?\s*)[\/]?\s?>

这个能匹配到吗?你这个都是错误的,你说你自己要什么效果,我们帮你想正则式
fkphp 2008-07-29
  • 打赏
  • 举报
回复
直接用正则实现,正则查找应该怎么改了?
luoruogao 2008-07-29
  • 打赏
  • 举报
回复
<META content=".net,正则表达式,使用,反向引用" name="Keywords" />
把<META content=" 和" name="Keywords" />替换成空 就可以得到content了

longli67 2008-07-29
  • 打赏
  • 举报
回复
学习 mark..
家鸣 2008-07-29
  • 打赏
  • 举报
回复
要判断(name="Keywords")就改成:

string text = "<html>asfasfas<META name=\"Keywordsd\" content=\"测试第二种情况\" />";
text = Regex.Match(text, @"(?<=meta.+?(?<name>name=""Keywords"".+?)*content=['""]?)[^""']+(?=[""'](?(name)|.+name=""Keywords""))", RegexOptions.IgnoreCase).Value;
wangkun9999 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dk385 的回复:]
补充一个,两种情况都可以:

C# code
string text = "dfdfdfd<META content=\".net,正则表达式,使用,反向引用\" name=\"Keywords\" />dd";
text = Regex.Match(text, @"(?<=meta.+?content=['""]?)[^""']+(?=[""'])", RegexOptions.IgnoreCase).Value;
[/Quote]
能判断(name="Keywords")吗?
加载更多回复(1)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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