[英]How do I include a hyphen in a hyperlink Regex?
我试图在用户输入的文本中找到链接并自动将它们转换为链接。
我正在使用当前正则表达式,这很好找到文本的超链接。
Regex regexResolveUrl = new Regex("((http://|www\\.)([A-Z0-9.-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
到目前为止,我遇到的几乎所有链接都有效,但是当我想要检测与hypen的链接时它会给出问题。
即www.abc-xyz.com不起作用,上面的正则表达式,任何人都可以帮我这个吗?
如果你想-
在字符类定义中字面意思是破折号,你需要把它作为最后一个(或第一个)字符。 所以[abc-]
是一个包含4个字符的字符类, a
, b
, c
, -
。 另一方面, [ab-c]
只包含3个字符,不包括-
,因为-
是范围定义。
所以,像这样(从你的模式):
[A-Z0-9.-:]
定义3个范围,从A
到Z
,从0
到9
,以及从.
(ASCII 46)到:
(ASCII 58)。 你想要的是:
[A-Z0-9.:-]
我注意到你在模式中用{1,}
来表示“一个或多个”。
.NET正则表达式(像大多数其他版本一样)支持这些简写:
?
:“零或一” {0,1}
*
:“零或多” {0,}
+
:“一个或多个” {1,}
他们可能需要一些习惯,但他们也很标准。
@
-quoted字符串文字的注释 虽然将正则表达式模式的字符串文字中的斜杠加倍是例如Java中的标准(出于必要性),但在C#中,您实际上可以选择使用@
-quoted字符串文字。
也就是说,这些字符串对是相同的:
"(http://|www\\.)"
@"(http://|www\.)"
"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"
使用@
可以导致更可读的正则表达式模式,因为文字斜杠不必加倍(尽管另一方面,双引号现在必须加倍)。
将连字符添加为字符类中的第一个或最后一个字符。
逃脱连字符:
Regex("((http://|www\\.)([A-Z0-9.\-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.