gpt4 book ai didi

c# - 如何在超链接 Regex 中包含连字符?

转载 作者:行者123 更新时间:2023-11-30 13:29:02 25 4
gpt4 key购买 nike

我正在尝试在用户输入的文本中查找链接并自动将它们转换为链接。

我正在使用当前的正则表达式,这很适合从文本中找到超链接。

Regex regexResolveUrl = new Regex("((http://|www\\.)([A-Z0-9.-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})", RegexOptions.Compiled | RegexOptions.IgnoreCase);

到目前为止,它对我遇到的几乎所有链接都有效,但是当我想检测带有超标的链接时,它会出现问题。

即www.abc-xyz.com 无法使用上述正则表达式,有人可以帮我解决这个问题吗?

最佳答案

如果您希望 - 在字符类定义中按字面意思表示破折号,则需要将其作为最后(或第一个)字符。所以[abc-]是一个包含4个字符的字符类,a, b, c, -。另一方面,[ab-c]只包含3个字符,不包括-,因为-是一个范围定义。

所以,像这样(根据您的模式):

[A-Z0-9.-:]

定义了 3 个范围,从 AZ,从 09,从 . (ASCII 46) 到 : (ASCII 58)。你想要:

[A-Z0-9.:-]

引用资料


关于重复的注意事项

我注意到您在模式中使用了 {1,} 来表示“一个或多个”。

.NET 正则表达式(像大多数其他风格一样)支持这些简写:

  • ?:“零或一”{0,1}
  • *:“零个或多个”{0,}
  • +:“一个或多个”{1,}

它们可能需要一些时间来适应,但它们也很标准。

引用资料

相关问题


关于 C# @-quoted string literals 的注意事项

虽然将正则表达式模式的字符串文字中的斜杠加倍是规范,例如Java(出于必要),在 C# 中,您实际上可以选择使用 @-quoted string literals。

也就是说,这些字符串对是相同的:

"(http://|www\\.)"
@"(http://|www\.)"

"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"

使用 @ 可以产生更易读的正则表达式模式,因为文字斜线不必加倍(尽管另一方面,双引号现在必须加倍)。

引用资料

关于c# - 如何在超链接 Regex 中包含连字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com