Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使链接可点击,除非它们已经在使用C#_C#_Asp.net_Regex - Fatal编程技术网

使链接可点击,除非它们已经在使用C#

使链接可点击,除非它们已经在使用C#,c#,asp.net,regex,C#,Asp.net,Regex,我发现一些例子使用正则表达式来检测文本段落中URL的模式,并添加HTML代码使它们成为链接。这种方法的问题是,有时候,输入段落既包含以纯文本编写的URL(我想将其转换为可点击的),也包含一些已经有链接标记的URL。例如,考虑这一段: 我最喜欢的搜索引擎是http://www.google.com 但是 有时我也使用 我只想转换谷歌链接,但留下两个雅虎链接,因为他们是 我想要的是一个C#函数,它使用正则表达式来检测URL并转换它们,但它忽略了周围有“a”标记或已经在“a”标记内的URL 编辑 以

我发现一些例子使用正则表达式来检测文本段落中URL的模式,并添加HTML代码使它们成为链接。这种方法的问题是,有时候,输入段落既包含以纯文本编写的URL(我想将其转换为可点击的),也包含一些已经有链接标记的URL。例如,考虑这一段:

我最喜欢的搜索引擎是http://www.google.com 但是
有时我也使用
我只想转换谷歌链接,但留下两个雅虎链接,因为他们是

我想要的是一个C#函数,它使用正则表达式来检测URL并转换它们,但它忽略了周围有“a”标记或已经在“a”标记内的URL

编辑

以下是我到目前为止的情况:

PostBody = "My favourite search engine is http://www.google.com but sometimes I also use <a href=\"http://www.yahoo.com\">http://www.yahoo.com</a>";
String pattern = @"http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&amp;\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?";
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern);
System.Text.RegularExpressions.MatchCollection matches = regex.Matches(PostBody);
for (int i = 0; i < matches.Count; i++)
{
  PostBody = PostBody.Replace(matches[i].Value, String.Format("<a href=\"{0}\">{1}</a>", matches[i].Value, matches[i].Value));
}
ltrlPostBody.Text = PostBody;
PostBody=“我最喜欢的搜索引擎是http://www.google.com 但有时我也使用“;
字符串模式=@“http(s)?:/([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\\\\\$\%\^\&;\*(\)\U\-=\+\\/\.\:\',]*)?”;
System.Text.RegularExpressions.Regex Regex=新的System.Text.RegularExpressions.Regex(模式);
System.Text.RegularExpressions.MatchCollection matches=regex.matches(PostBody);
for(int i=0;i
以下是我得到的(为了清晰起见,我将其拆分为多行):

我最喜欢的搜索引擎是
但有时我也使用
">
">

我只想转换第一个链接(在本例中),因为它尚未成为链接标记的一部分。

如果您已经编写了正则表达式,以确定何时使用锚标记包装文本,您可以使用正则表达式通过

你可以做一些简单的事情

private string Pattern = "whateverregexpatternyouhavewritten";
private bool MatchesPattern(string input)
{
    return Regex.IsMatch(Pattern, input);
}

如果已经编写了正则表达式来确定何时使用锚定标记包装文本,则可以使用RegularExpressions通过

你可以做一些简单的事情

private string Pattern = "whateverregexpatternyouhavewritten";
private bool MatchesPattern(string input)
{
    return Regex.IsMatch(Pattern, input);
}
你也可以使用,这会给你更多的力量(例如你不想逃跑)

<script></script>

元素和样式元素:

using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using HtmlAgilityPack;

namespace ConsoleApplication3 {
  class Program {
    static void Main(string[] args) {
      var text = @"My favourite search engine is http://www.google.com but 
sometimes I also use <a href=""http://www.yahoo.com"">http://www.yahoo.com</a>
<div>http://catchme.com</div>
<script>
  var thisCanHurt = 'http://noescape.com';
</script>";
      var doc = new HtmlDocument();
      doc.LoadHtml(text);
      var regex = new Regex(@"http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&amp;\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?", RegexOptions.IgnoreCase);
      var nodes = doc.DocumentNode.SelectNodes("//text()");
      foreach (var node in nodes) {
        if (node.ParentNode != null && (node.ParentNode.Name == "a" || node.ParentNode.Name == "script" || node.ParentNode.Name == "style")) {
          continue;
        }
        node.InnerHtml = regex.Replace(node.InnerText, (match) => {
          return string.Format(@"<a href=""{0}"">{0}</a>", match.Value);
        });
      }

      var builder = new StringBuilder(100);
      using (var writer = new StringWriter(builder)) {
        doc.Save(writer);
      }
      var compose = builder.ToString();
    }
  }
}
使用System.IO;
使用系统文本;
使用System.Text.RegularExpressions;
使用HtmlAgilityPack;
命名空间控制台应用程序3{
班级计划{
静态void Main(字符串[]参数){
var text=@“我最喜欢的搜索引擎是http://www.google.com 但是
有时我也使用
http://catchme.com
var Thiscanharthttp://noescape.com';
";
var doc=新的HtmlDocument();
doc.LoadHtml(文本);
var regex=new regex(@“http(s):/([\w+?\.\w+])+([a-zA-Z0-9\~\!\\\\\\\\\\$\%\\\\\\\\\*(\)\\\-\=\+\\\/\.\:\\\\\\\\\',]*)?”,RegexOptions.IgnoreCase);
var nodes=doc.DocumentNode.SelectNodes(“//text()”);
foreach(节点中的var节点){
if(node.ParentNode!=null&(node.ParentNode.Name==“a”| | node.ParentNode.Name==“script”| | node.ParentNode.Name==“style”)){
持续
}
node.InnerHtml=regex.Replace(node.InnerText,(匹配)=>{
返回string.Format(@“”,match.Value);
});
}
var builder=新的StringBuilder(100);
使用(var writer=newstringwriter(生成器)){
保存文档(编写器);
}
var compose=builder.ToString();
}
}
}
你也可以使用,这会给你更多的力量(例如你不想逃跑)

<script></script>

元素和样式元素:

using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using HtmlAgilityPack;

namespace ConsoleApplication3 {
  class Program {
    static void Main(string[] args) {
      var text = @"My favourite search engine is http://www.google.com but 
sometimes I also use <a href=""http://www.yahoo.com"">http://www.yahoo.com</a>
<div>http://catchme.com</div>
<script>
  var thisCanHurt = 'http://noescape.com';
</script>";
      var doc = new HtmlDocument();
      doc.LoadHtml(text);
      var regex = new Regex(@"http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&amp;\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?", RegexOptions.IgnoreCase);
      var nodes = doc.DocumentNode.SelectNodes("//text()");
      foreach (var node in nodes) {
        if (node.ParentNode != null && (node.ParentNode.Name == "a" || node.ParentNode.Name == "script" || node.ParentNode.Name == "style")) {
          continue;
        }
        node.InnerHtml = regex.Replace(node.InnerText, (match) => {
          return string.Format(@"<a href=""{0}"">{0}</a>", match.Value);
        });
      }

      var builder = new StringBuilder(100);
      using (var writer = new StringWriter(builder)) {
        doc.Save(writer);
      }
      var compose = builder.ToString();
    }
  }
}
使用System.IO;
使用系统文本;
使用System.Text.RegularExpressions;
使用HtmlAgilityPack;
命名空间控制台应用程序3{
班级计划{
静态void Main(字符串[]参数){
var text=@“我最喜欢的搜索引擎是http://www.google.com 但是
有时我也使用
http://catchme.com
var Thiscanharthttp://noescape.com';
";
var doc=新的HtmlDocument();
doc.LoadHtml(文本);
var regex=new regex(@“http(s):/([\w+?\.\w+])+([a-zA-Z0-9\~\!\\\\\\\\\\$\%\\\\\\\\\*(\)\\\-\=\+\\\/\.\:\\\\\\\\\',]*)?”,RegexOptions.IgnoreCase);
var nodes=doc.DocumentNode.SelectNodes(“//text()”);
foreach(节点中的var节点){
if(node.ParentNode!=null&(node.ParentNode.Name==“a”| | node.ParentNode.Name==“script”| | node.ParentNode.Name==“style”)){
持续
}
node.InnerHtml=regex.Replace(node.InnerText,(匹配)=>{
返回string.Format(@“”,match.Value);
});
}
var builder=新的StringBuilder(100);
使用(var writer=newstringwriter(生成器)){
保存文档(编写器);
}
var compose=builder.ToString();
}
}
}

我们将很乐意帮助您解决此问题。但是,您必须首先向我们展示您迄今为止所做的工作。我们将很乐意帮助您解决此问题。但是,您必须首先向我们展示您迄今为止所做的工作。非常有效。谢谢!非常有效。谢谢!