在内容中如何获取网址啊?

时间:2021-08-15 04:04:28
比如我发帖,内容里面含有网址,我怎么在后台获取网址啊,单独取出来,用什么方法取啊?

27 个解决方案

#1


首先获取发帖的内容 然后通过正则取出连接 这个去GOOGLE搜一下最详细不过了!

#2


用正则提取!!


(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? 

#3


用正则表达式 http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

也可以用UBB [u r l = http://]           [ /u r l ]

#4


在cs里我怎么写?刚才试试怎么不行啊?
Regex regex2 = new Regex("(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])? ");
string c = txtcontent.Text;
        string con = regex2.Match(c).ToString();
这样怎么不行啊?取到的为空

#5


要取什么样的网址,有什么规律,给下你的源字符串看下

#6


就是百度也不行啊,什么样的都没

#7



string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>"; 
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled); 
foreach(Match mc in Matches) 

   Console.Write(mc.Groups["Link"].Value.ToString().Trim()); 

#8


对,用正则取出来!其它的方法应该不行。

#9


引用 7 楼 wuyq11 的回复:
string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>";
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled);
foreach(Match mc in Matches)
{
  Console.Write(mc.Groups["Link"].Value.ToString().Trim());
}
这个什么都不匹配啊,我晕,你们做个成功的我看看

#10


引用 7 楼 wuyq11 的回复:
string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>";
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled);
foreach(Match mc in Matches)
{
  Console.Write(mc.Groups["Link"].Value.ToString().Trim());
}


楼主,这样试了吗?或者是少了一个正则表达式的命名空间吧,呵呵 .

#11


引用 10 楼 zhxingway 的回复:
引用 7 楼 wuyq11 的回复:
string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>";
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled);
foreach(Match mc in Matches)
{
  Console.Write(mc.Groups["Link"].Value.ToString().Trim());
}


楼主,这样试了吗?或者是少了一个正则表达式的命名空间吧,呵呵 .
我写了啊 
引用的是using System.Text.RegularExpressions;
不对吗?

#12


路过的,顺便过来看看。

#13


关注。

#14


除了不会提问,我不知道该说楼主什么

自己在那着急有什么用呢,问题描述不清楚,谁也没办法给你解决的

把问题描述清楚,不要想当然的以为谁都清楚你想要些什么,否则也不会有那么多不可用的答案了

你要获取的字符串的规律是什么,你的源字符串是什么样的,说不清楚就给出实例,如果给实例记着一定要给出对应的结果

#15


1)文本過濾法
2)正測表達式法
3)DOM/SAX節點法
5)XPath
5)XSLT
以上四法可以组合使用

推薦方案:
1)XPath组合正则表达式最佳
XPath确定范围,Regex精確提取
2)XSLT
XSLT主體還是XPath,有幾百個內置函數可用。
3)使用SGML解析器SgmlReader
一個輕型的解析器,能夠自動處理不規範的HTML代碼

#16


引用 14 楼 lxcnn 的回复:
除了不会提问,我不知道该说楼主什么

自己在那着急有什么用呢,问题描述不清楚,谁也没办法给你解决的

把问题描述清楚,不要想当然的以为谁都清楚你想要些什么,否则也不会有那么多不可用的答案了

你要获取的字符串的规律是什么,你的源字符串是什么样的,说不清楚就给出实例,如果给实例记着一定要给出对应的结果
我说的是所有的网址,只要你能上的去网站,看到的地址就可以

#17


引用 15 楼 pcnetman888 的回复:
1)文本過濾法
2)正測表達式法
3)DOM/SAX節點法
5)XPath
5)XSLT
以上四法可以组合使用

推薦方案:
1)XPath组合正则表达式最佳
XPath确定范围,Regex精確提取
2)XSLT
XSLT主體還是XPath,有幾百個內置函數可用。
3)使用SGML解析器SgmlReader
一個輕型的解析器,能夠自動處理不規範的HTML代碼

能举个例子不?

#18


Regex regex = new Regex("((http|ftp|https|):\\/\\/)?[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])?");
                            string con = regex.Match(rCon).ToString();
我这个可以获取完整的,但是如果这个网址后面连着汉字,也就获取到了,我怎么着才能把后面的汉子不获取到?

#19


你的源字符串是什么样的?还是给实例吧,再没有实例就当我路过好了

#20


 sdfsdfhttp://www.tudou.com/home/09jazzs时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊

#21


说实在的,这种需求如果不给出实例,能写出来那真就是神了

string test = "sdfsdfhttp://www.tudou.com/home/09jazzs时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg = new Regex(@"https?://(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
    richTextBox2.Text += m.Value + "\n";
}


但以楼主这种需求,就要求网址一定是http://或https://开头了,否则是没办法判断从哪开始取的

#22


引用 21 楼 lxcnn 的回复:
说实在的,这种需求如果不给出实例,能写出来那真就是神了

C# codestring test="sdfsdfhttp://www.tudou.com/home/09jazzs时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg=new Regex(@"https?://(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc= reg.Matches(test);foreach (Match min mc)
{
    richTextBox2.Text+= m.Value+"\n";
}

但以楼主这种需求,就要求网址一定是http://或https://开头了,否则是没办法判断从哪开始取的
我以WWW开头不行吗?为什么没办法判断从哪?

#23


引用 17 楼 guozhennan123 的回复:
引用 15 楼 pcnetman888 的回复:
 1)文本過濾法
 2)正測表達式法
 3)DOM/SAX節點法
 5)XPath
 5)XSLT
 以上四法可以组合使用

 推薦方案:
 1)XPath组合正则表达式最佳
 XPath确定范围,Regex精確提取
 2)XSLT
 XSLT主體還是XPath,有幾百個內置函數可用。
 3)使用SGML解析器SgmlReader
 一個輕型的解析器,能夠自動處理不規範的HTML代碼



 能举个例子不?


HtmlParser.HtmlWeb hw = new HtmlParser.HtmlWeb();
HtmlParser.HtmlDocument hd = new HtmlParser.HtmlDocument();
hd.DeclaredEncoding = System.Text.Encoding.Default;
hd.LoadHtml(this.txtSource.Text);
HtmlParser.HtmlNodeCollection hnc = hd.DocumentNode.SelectNodes(this.txtXpath.Text); 
if (hnc == null)
{
    this.txtResult.Text = "未匹配到任何数据";
    return;
}


StringBuilder sb = new StringBuilder();
sb.Append(hnc.Count).Append("个\r\n");    
foreach (HtmlParser.HtmlNode hn in hnc)
{
    string text = hn.InnerHtml;
    sb.Append(text).Append("\r\n");                
}

this.txtResult.Text = sb.ToString();

#24


以哪些特定字符子串开头,这就是规则,楼主有描述清楚吗?规则不确定,问题没法解决

说句不太中听的话,没有人是你肚子里的蛔虫,所以如果你自己不把问题描述清楚,是没有人能解决你的问题的

提问也是一门学问,你的需求描述越清晰,就越有利于你的问题快速解决

好吧,废话说了一大堆,21楼的代码,还有哪些需求不满足,给出实例,要完整的源字符串,而不仅仅是结果

#25


还是上面的源字符串,只是把网址换成www.baidu.com就可以来,怎么做那?

#26


那就这样试下,看看是否满足你所有的需求吧

string test = "sdfsdfwww.baidu.com时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg = new Regex(@"(?:https?://|www\.)(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
    richTextBox2.Text += m.Value + "\n";
}

#27


引用 26 楼 lxcnn 的回复:
那就这样试下,看看是否满足你所有的需求吧

C# codestring test="sdfsdfwww.baidu.com时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg=new Regex(@"(?:https?://|www\.)(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc= reg.Matches(test);foreach (Match min mc)
{
    richTextBox2.Text+= m.Value+"\n";
}
  多谢了啊,忙来好久了,

#1


首先获取发帖的内容 然后通过正则取出连接 这个去GOOGLE搜一下最详细不过了!

#2


用正则提取!!


(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])? 

#3


用正则表达式 http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

也可以用UBB [u r l = http://]           [ /u r l ]

#4


在cs里我怎么写?刚才试试怎么不行啊?
Regex regex2 = new Regex("(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])? ");
string c = txtcontent.Text;
        string con = regex2.Match(c).ToString();
这样怎么不行啊?取到的为空

#5


要取什么样的网址,有什么规律,给下你的源字符串看下

#6


就是百度也不行啊,什么样的都没

#7



string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>"; 
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled); 
foreach(Match mc in Matches) 

   Console.Write(mc.Groups["Link"].Value.ToString().Trim()); 

#8


对,用正则取出来!其它的方法应该不行。

#9


引用 7 楼 wuyq11 的回复:
string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>";
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled);
foreach(Match mc in Matches)
{
  Console.Write(mc.Groups["Link"].Value.ToString().Trim());
}
这个什么都不匹配啊,我晕,你们做个成功的我看看

#10


引用 7 楼 wuyq11 的回复:
string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>";
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled);
foreach(Match mc in Matches)
{
  Console.Write(mc.Groups["Link"].Value.ToString().Trim());
}


楼主,这样试了吗?或者是少了一个正则表达式的命名空间吧,呵呵 .

#11


引用 10 楼 zhxingway 的回复:
引用 7 楼 wuyq11 的回复:
string strPattern=@"a[\s]+href=(? <Link>[^\s>]+)[^>]*>(? <Text>[^ <]*) </a>";
MatchCollection Matches=Regex.Matches("",strPattern,RegexOptions.IgnoreCase|RegexOptions.Compiled);
foreach(Match mc in Matches)
{
  Console.Write(mc.Groups["Link"].Value.ToString().Trim());
}


楼主,这样试了吗?或者是少了一个正则表达式的命名空间吧,呵呵 .
我写了啊 
引用的是using System.Text.RegularExpressions;
不对吗?

#12


路过的,顺便过来看看。

#13


关注。

#14


除了不会提问,我不知道该说楼主什么

自己在那着急有什么用呢,问题描述不清楚,谁也没办法给你解决的

把问题描述清楚,不要想当然的以为谁都清楚你想要些什么,否则也不会有那么多不可用的答案了

你要获取的字符串的规律是什么,你的源字符串是什么样的,说不清楚就给出实例,如果给实例记着一定要给出对应的结果

#15


1)文本過濾法
2)正測表達式法
3)DOM/SAX節點法
5)XPath
5)XSLT
以上四法可以组合使用

推薦方案:
1)XPath组合正则表达式最佳
XPath确定范围,Regex精確提取
2)XSLT
XSLT主體還是XPath,有幾百個內置函數可用。
3)使用SGML解析器SgmlReader
一個輕型的解析器,能夠自動處理不規範的HTML代碼

#16


引用 14 楼 lxcnn 的回复:
除了不会提问,我不知道该说楼主什么

自己在那着急有什么用呢,问题描述不清楚,谁也没办法给你解决的

把问题描述清楚,不要想当然的以为谁都清楚你想要些什么,否则也不会有那么多不可用的答案了

你要获取的字符串的规律是什么,你的源字符串是什么样的,说不清楚就给出实例,如果给实例记着一定要给出对应的结果
我说的是所有的网址,只要你能上的去网站,看到的地址就可以

#17


引用 15 楼 pcnetman888 的回复:
1)文本過濾法
2)正測表達式法
3)DOM/SAX節點法
5)XPath
5)XSLT
以上四法可以组合使用

推薦方案:
1)XPath组合正则表达式最佳
XPath确定范围,Regex精確提取
2)XSLT
XSLT主體還是XPath,有幾百個內置函數可用。
3)使用SGML解析器SgmlReader
一個輕型的解析器,能夠自動處理不規範的HTML代碼

能举个例子不?

#18


Regex regex = new Regex("((http|ftp|https|):\\/\\/)?[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])?");
                            string con = regex.Match(rCon).ToString();
我这个可以获取完整的,但是如果这个网址后面连着汉字,也就获取到了,我怎么着才能把后面的汉子不获取到?

#19


你的源字符串是什么样的?还是给实例吧,再没有实例就当我路过好了

#20


 sdfsdfhttp://www.tudou.com/home/09jazzs时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊

#21


说实在的,这种需求如果不给出实例,能写出来那真就是神了

string test = "sdfsdfhttp://www.tudou.com/home/09jazzs时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg = new Regex(@"https?://(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
    richTextBox2.Text += m.Value + "\n";
}


但以楼主这种需求,就要求网址一定是http://或https://开头了,否则是没办法判断从哪开始取的

#22


引用 21 楼 lxcnn 的回复:
说实在的,这种需求如果不给出实例,能写出来那真就是神了

C# codestring test="sdfsdfhttp://www.tudou.com/home/09jazzs时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg=new Regex(@"https?://(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc= reg.Matches(test);foreach (Match min mc)
{
    richTextBox2.Text+= m.Value+"\n";
}

但以楼主这种需求,就要求网址一定是http://或https://开头了,否则是没办法判断从哪开始取的
我以WWW开头不行吗?为什么没办法判断从哪?

#23


引用 17 楼 guozhennan123 的回复:
引用 15 楼 pcnetman888 的回复:
 1)文本過濾法
 2)正測表達式法
 3)DOM/SAX節點法
 5)XPath
 5)XSLT
 以上四法可以组合使用

 推薦方案:
 1)XPath组合正则表达式最佳
 XPath确定范围,Regex精確提取
 2)XSLT
 XSLT主體還是XPath,有幾百個內置函數可用。
 3)使用SGML解析器SgmlReader
 一個輕型的解析器,能夠自動處理不規範的HTML代碼



 能举个例子不?


HtmlParser.HtmlWeb hw = new HtmlParser.HtmlWeb();
HtmlParser.HtmlDocument hd = new HtmlParser.HtmlDocument();
hd.DeclaredEncoding = System.Text.Encoding.Default;
hd.LoadHtml(this.txtSource.Text);
HtmlParser.HtmlNodeCollection hnc = hd.DocumentNode.SelectNodes(this.txtXpath.Text); 
if (hnc == null)
{
    this.txtResult.Text = "未匹配到任何数据";
    return;
}


StringBuilder sb = new StringBuilder();
sb.Append(hnc.Count).Append("个\r\n");    
foreach (HtmlParser.HtmlNode hn in hnc)
{
    string text = hn.InnerHtml;
    sb.Append(text).Append("\r\n");                
}

this.txtResult.Text = sb.ToString();

#24


以哪些特定字符子串开头,这就是规则,楼主有描述清楚吗?规则不确定,问题没法解决

说句不太中听的话,没有人是你肚子里的蛔虫,所以如果你自己不把问题描述清楚,是没有人能解决你的问题的

提问也是一门学问,你的需求描述越清晰,就越有利于你的问题快速解决

好吧,废话说了一大堆,21楼的代码,还有哪些需求不满足,给出实例,要完整的源字符串,而不仅仅是结果

#25


还是上面的源字符串,只是把网址换成www.baidu.com就可以来,怎么做那?

#26


那就这样试下,看看是否满足你所有的需求吧

string test = "sdfsdfwww.baidu.com时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg = new Regex(@"(?:https?://|www\.)(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
    richTextBox2.Text += m.Value + "\n";
}

#27


引用 26 楼 lxcnn 的回复:
那就这样试下,看看是否满足你所有的需求吧

C# codestring test="sdfsdfwww.baidu.com时刻冬季恋歌,源啊,这有什么用啊,随便输就有来啊";
Regex reg=new Regex(@"(?:https?://|www\.)(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?", RegexOptions.ECMAScript);
MatchCollection mc= reg.Matches(test);foreach (Match min mc)
{
    richTextBox2.Text+= m.Value+"\n";
}
  多谢了啊,忙来好久了,