我试图在用户输入的文本中找到链接并自动将它们转换为链接.
我正在使用当前的正则表达式,这很好找到文本的超链接.
Regex regexResolveUrl = new Regex("((http://|www\\.)([A-Z0-9.-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我遇到的几乎所有链接都有效,但是当我想要检测到有关的链接时它会给出问题.
即www.abc-xyz.com不起作用,上面的正则表达式,任何人都可以帮我这个吗?
如果你想-在字符类定义中按字面意思表示破折号,则需要将其作为最后一个(或第一个)字符.所以[abc-]是含有4个字符的字符类,a,b,c,-.另一方面,[ab-c]只包含3个字符,不包括-,因为-是范围定义.
所以,像这样(从你的模式):
[A-Z0-9.-:]
Run Code Online (Sandbox Code Playgroud)
定义3个范围,从Ato Z,from 0到9,和从.(ASCII 46)到:(ASCII 58).你想要的是:
[A-Z0-9.:-]
Run Code Online (Sandbox Code Playgroud)
我注意到你{1,}在你的模式中用来表示"一个或多个".
.NET正则表达式(像大多数其他版本一样)支持这些简写:
?:"零或一" {0,1}*:"零或多" {0,}+: "一个或多个" {1,}他们可能需要一些习惯,但他们也很标准.
@引用字符串文字的注释虽然将正则表达式模式的字符串文字中的斜杠加倍是例如Java(不必要)的标准,但在C#中,您实际上可以选择使用@-quoted字符串文字.
也就是说,这些字符串对是相同的:
"(http://|www\\.)"
@"(http://|www\.)"
"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"
Run Code Online (Sandbox Code Playgroud)
使用@可以导致更可读的正则表达式模式,因为文字斜杠不必加倍(尽管另一方面,双引号现在必须加倍).
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |