c#中锚标记的正则表达式

时间:2015-04-13 14:22:29

标签: c# regex

我的锚标签如下: -

    <a href="/as" title="asd" page="as" name="asd" reference="Yes" type="relativepath">as
</a>

我试着用这种方式: -

 <a [^>]*?>(?<text>.*?)</a>

当结尾锚标记</a>应该在同一行时,它工作正常。
但在我的情况下,结束锚标记应该在下一行。

如果结束锚标记位于下一行,我需要一个它应该支持的正则表达式。

建议欢迎。

2 个答案:

答案 0 :(得分:2)

您应该使用(?s)内联选项:

(?s)<a [^>]*?>(?<text>.*?)</a>

请参阅demo

在C#中,您还可以通过以下方式使用RegexOptions.Singleline选项:

var input = "<a href=\"/as\" title=\"asd\" page=\"as\" name=\"asd\" reference=\"Yes\" type=\"relativepath\">as\r\n</a>";
var regex = new Regex(@"<a [^>]*?>(?<text>.*?)</a>", RegexOptions.Singleline);
var result2 = regex.Match(input).Value;

输出:

enter image description here

修改

这是正则表达式的更新版本,它考虑了没有属性的<a>标签(这几乎是不可能的,但让我们想象:)),并且还使它不区分大小写(谁知道,也许<A HREF="SOMETHING_HERE">也可能发生):

var regex = new Regex(@"(?i)<a\b[^>]*?>(?<text>.*?)</a>", RegexOptions.Singleline);

答案 1 :(得分:0)

只需使用DOTALL修饰符,即使你的正则表达式中存在DOT以匹配偶数换行符。

@"(?s)<a [^>]*?>(?<text>.*?)</a>"

OR

你可以使用否定的字符类。

@"<a [^>]*?>(?<text>[^<>]*)</a>"