我的锚标签如下: -
<a href="/as" title="asd" page="as" name="asd" reference="Yes" type="relativepath">as
</a>
我试着用这种方式: -
<a [^>]*?>(?<text>.*?)</a>
当结尾锚标记</a>
应该在同一行时,它工作正常。
但在我的情况下,结束锚标记应该在下一行。
如果结束锚标记位于下一行,我需要一个它应该支持的正则表达式。
建议欢迎。
答案 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;
输出:
修改强>
这是正则表达式的更新版本,它考虑了没有属性的<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>"