0

我只想通过表达式捕获第一个匹配项

<p>.*?</p>

我已经尝试过<p>.*?</p>{1},但它不起作用它会返回 html 文档中的所有 p 标签,请帮助

4

2 回答 2

4

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

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

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

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

于 2009-10-04T06:59:59.613 回答
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.

于 2009-10-04T08:02:56.887 回答