我正在使用此正则表达式来计算页面上href's
的所有内容:
(?: HREF)= [\ “|'](*。?)[\?” |'|>] +
工作正常。但我想只匹配不像媒体的链接(png | jpg | avi | wav | gif)等。
我尝试过添加
之类的东西((?PNG)。)
到我的正则表达式,但这不起作用。我看过this question 但无法获得任何有效的解决方案。
答案 0 :(得分:3)
我知道这个问题已经回答了。
我想使用CsQuery代替HtmlAgilityPack
我认为语法更紧凑,与其他结构非常相似,因为它基于LINQ
//input is your input HTML string
var links = CQ.Create(input).Find("a").Select(x=>x.Cq().Attr("href"));
例如
var links = CQ.Create("<div><a href='blah'></a><a href='blah2'></a></div>").Find("a").Select(x=>x.Cq().Attr("href"));
Console.Write(string.Join(",",dom)); //prints blah,blah2
希望这有助于任何人:)
答案 1 :(得分:2)
using HtmlAgilityPack;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
List<string> href = new List<string>();
private void addHREF()
{
//put your input to check
string input = "";
doc.LoadHtml(input);
//Which files ignore?
string[] stringArray = { ".png", ".jpg" };
foreach (var item in doc.DocumentNode.SelectNodes("//a"))
{
string value = item.Attributes["href"].Value;
if (stringArray.Any(value.Contains) == false)
href.Add(value);
}
}
我测试了我的输入效果很好......如果您有任何问题请告诉我..
答案 2 :(得分:1)
即使我建议不采用这种方法,您也会发现这个正则表达式很有帮助:
(?<=href\s*=\s*['"]?)(?>(https?://)?([\da-z\.-]+)\.([a-z\.]{2,6})([/\w\.-]*)*/?)(?<!png|gif|etc)
(基于来自8 Regular Expressions You Should Know的网址正则表达式)
请注意,此表达式不允许URL中的空格。这是因为没有引号的HREF将匹配以下属性(例如,"domain.com/resource.txt title"
)
示例:强>
static void Main( string[] args )
{
string l_input =
"<a href=\n" +
" \"HTTPS://example.com/page.html\" title=\"match\" />\n" +
"<a href='http://site.com/pic.png' title='do not match'> <a href=domain.com/resource.txt title=match>\n" +
" <script src=scripts.com/script.js>";
foreach ( Match l_match in Regex.Matches( l_input, @"(?<=href\s*=\s*['""]?)(?>(https?://)?([\da-z\.-]+)\.([a-z\.]{2,6})([/\w\.-]*)*/?)(?<!png|gif|etc)", RegexOptions.IgnoreCase ) )
Console.WriteLine( "'" + l_match.Value + "'" );
/*
* Returns:
*
* HTTPS://example.com/page.html
* domain.com/resource.txt
*
*/
Console.ReadKey( true );
}
答案 3 :(得分:1)
我的努力
@"(?<=\shref\s*=\s*[""']?)(?![""']|\S+\.(?:png|jpg|avi|wav|gif)[""']?[\s>])\S+?(?=[""']?[\s>])";
它使用正面的后视来定位内容,并使用负向前瞻以确保它不包含点后跟 png jpg avi wav gif 后跟可选引用标记和空格或>
。然后匹配直到可选的引号后跟空格或>
。内容不必引用,但不得包含空格。