仅捕获一个匹配 - 正则表达式

时间:2009-10-04 06:55:24

标签: c# regex string-matching

我想通过表达式

仅捕获第一个匹配项
<p>.*?</p>

我已经尝试了<p>.*?</p>{1}但是它没有工作它会返回html文档中的所有p标记,请帮助

2 个答案:

答案 0 :(得分:4)

看起来你正在使用一个方法来返回给定正则表达式的字符串中的每个匹配,在这种情况下你需要将正则表达式锚定到字符串的开始,这样它就不会返回每个匹配,而只返回第一个:

^.*?<p>.*?</p>

使用括号捕捉您想要捕捉的内容。

PS:这里标准'避免使用正则表达式解析HTML,使用正确的HTML解析器'建议。对于嵌套的<p>部分,这个简单的正则表达式将失败(我不记得如果它在HTML中有效,但即使它们不是,你仍然可以得到它们。)

答案 1 :(得分:2)

Regex.Match方法默认执行此操作,正则表达式正确。

Regex regex = new Regex("<p>(.*?)</p>");
Match match = regex.Match("<p>1</p><p>2</p>");
Console.WriteLine("{0}", match.Value);

运行此程序将打印1