最难的正则表达式:匹配Url,解决的就给分

时间:2022-06-02 18:48:49
我测试的方法: 
在页面有两个TextBox,一个Button 

在第一个textBox中输入以下内容:

(测试内容)如果在www.baidu.com搜索csdn会出现csdn网址http://www.csdn.net/,
里面这个http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html是我的帖子

点Button 调用下面的方法:在第2个textbox 中输出结果。 
其中www.baidu.com、http://www.csdn.net/、http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html是有效网址,在第2个textbox 中要加上<a>标记,

第2个textbox 中应该得到的结果:

(测试内容)如果在<a href='http://www.baidu.com'>www.baidu.com</a>搜索csdn会出现csdn网址<a href='http://www.csdn.net/'>http://www.csdn.net/</a>,
里面这个<a href='http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html'>http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html</a>是我的帖子


但我做的时候是错误的,正则表达式肯定是错误的,但我测试的方法是不是不对啊 ???? 

protected void btnOK_Click(object sender, EventArgs e)
{
    this.txtUrl.Text = IsHavaUrl(this.TextBox1.Text);
}
调用的方法如下: 

private string IsHavaUrl(string sDetail) 

        Regex r; 
        Match m; 
        r = new Regex(@"((http(s)?://([\w-]+\.)+[\w-]+(/[\w-] ./?%&=]*)?))",RegexOptions.IgnoreCase); 
        for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) 
        { 
            sDetail = sDetail.Replace(m.Groups[0].ToString(), " <A href=\"" + m.Groups[0].ToString() + "\" target=\"_blank\" >" + m.Groups[0].ToString() + " </A >"); 
        }         
         
        return sDetail; 
}


求正确的正则表达式????~~~~

7 个解决方案

#1


看你的帖子还真累

猜了半天都不知道你说的重点是什么

#2


"(http(s)?://)?(w{3})?(\.[^.]*)*"

#3


我倒,难道我的表达有问题,

我的问题就是要用一个正则表达式,把以下内容:

(测试内容)如果在www.baidu.com搜索csdn会出现csdn网址http://www.csdn.net/, 
里面这个http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html是我的帖子 


转换为:

(测试内容)如果在 <a href= 'http://www.baidu.com ' >www.baidu.com </a >搜索csdn会出现csdn网址 <a href= 'http://www.csdn.net/ ' >http://www.csdn.net/ </a >, 
里面这个 <a href= 'http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html ' >http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html </a >是我的帖子 

OK~~~~

我倒啊~~~

#4


chuxue1342   : "(http(s)?://)?(w{3})?(\.[^.]*)*"

测试的时候报错:

“/TextBoxTest”应用程序中的服务器错误。
--------------------------------------------------------------------------------

字符串的长度不能为零。
参数名: oldValue 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ArgumentException: 字符串的长度不能为零。
参数名: oldValue

源错误: 


行 156:        for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
行 157:        {
行 158:            sDetail = sDetail.Replace(m.Groups[0].ToString(), "<A href=\"" + m.Groups[0].ToString() + "\" target=\"_blank\">" + m.Groups[0].ToString() + "</A>");
行 159:        }
行 160:
 

#5


up

#6


最难,?我晕。。

#7


string text="如果在www.baidu.com搜索csdn会出现csdn网址http://www.csdn.net/?id=22,里面这个http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html是我的帖子";
string pt=@"(www\.[!-~]+)|(https?://[!-~]+)";
string result = System.Text.RegularExpressions.Regex.Replace(text, pt, "<a href=$0 target=blank>$0</a>");


不能完全满足要求,希望有参考价值,
学习正则ing。。。。。

#1


看你的帖子还真累

猜了半天都不知道你说的重点是什么

#2


"(http(s)?://)?(w{3})?(\.[^.]*)*"

#3


我倒,难道我的表达有问题,

我的问题就是要用一个正则表达式,把以下内容:

(测试内容)如果在www.baidu.com搜索csdn会出现csdn网址http://www.csdn.net/, 
里面这个http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html是我的帖子 


转换为:

(测试内容)如果在 <a href= 'http://www.baidu.com ' >www.baidu.com </a >搜索csdn会出现csdn网址 <a href= 'http://www.csdn.net/ ' >http://www.csdn.net/ </a >, 
里面这个 <a href= 'http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html ' >http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html </a >是我的帖子 

OK~~~~

我倒啊~~~

#4


chuxue1342   : "(http(s)?://)?(w{3})?(\.[^.]*)*"

测试的时候报错:

“/TextBoxTest”应用程序中的服务器错误。
--------------------------------------------------------------------------------

字符串的长度不能为零。
参数名: oldValue 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ArgumentException: 字符串的长度不能为零。
参数名: oldValue

源错误: 


行 156:        for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
行 157:        {
行 158:            sDetail = sDetail.Replace(m.Groups[0].ToString(), "<A href=\"" + m.Groups[0].ToString() + "\" target=\"_blank\">" + m.Groups[0].ToString() + "</A>");
行 159:        }
行 160:
 

#5


up

#6


最难,?我晕。。

#7


string text="如果在www.baidu.com搜索csdn会出现csdn网址http://www.csdn.net/?id=22,里面这个http://topic.csdn.net/u/20071009/18/76cbd513-56f8-4a1b-a555-a17b7f33c50e.html是我的帖子";
string pt=@"(www\.[!-~]+)|(https?://[!-~]+)";
string result = System.Text.RegularExpressions.Regex.Replace(text, pt, "<a href=$0 target=blank>$0</a>");


不能完全满足要求,希望有参考价值,
学习正则ing。。。。。