Csharp/C#教程:用于识别URL的正则表达式分享


用于识别URL的正则表达式

我想为url创建一个Regex,以便从输入字符串中获取所有链接。 正则表达式应该识别以下格式的URL地址:

以及更复杂的url: – https://www.google.pl/#sclient=psy&hl=pl&site=&source=hp&q=regex+url&pbx=1&oq=regex+url&aq=f&aqi=g1&aql=&gs_sm=e&gs_upl=1582l3020l0l3199l9l6l0l0l0l0l255l1104l0。 2.3l5l0&BAV = on.2,or.r_gc.r_pw。&FP = 30a1604d4180f481&BIW = 1680&波黑= 935

我有以下一个

((www.|https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\))+[wd:#@%/;$()~_?+-=\.&]*) 

但它不承认以下模式:www.webpage.com。 有人可以帮我创建一个合适的正则表达式吗?

编辑:它应该找到一个合适的链接,然后将链接放在适当的索引中,如下所示:

 private readonly Regex RE_URL = new Regex(@"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\))+[wd:#@%/;$()~_?+-=\.&]*)", RegexOptions.Multiline); foreach (Match match in (RE_URL.Matches(new_text))) { // Copy raw string from the last position up to the match if (match.Index != last_pos) { var raw_text = new_text.Substring(last_pos, match.Index - last_pos); text_block.Inlines.Add(new Run(raw_text)); } // Create a hyperlink for the match var link = new Hyperlink(new Run(match.Value)) { NavigateUri = new Uri(match.Value) }; link.Click += OnUrlClick; text_block.Inlines.Add(link); // Update the last matched position last_pos = match.Index + match.Length; } 

我刚刚写了一篇关于识别大多数使用格式的url的博文,例如:

www.google.com https://www.google.com mailto:somebody@google.com somebody@google.com www.url-with-querystring.com/?url=has-querystring

使用的正则表达式是/((([A-Za-z]{3,9}:(?://)?)(?:[-;:&=+$,w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,w]+@)[A-Za-z0-9.-]+)((?:/[+~%/.w-_]*)???(?:[-+=&;%@.w_]*)#?(?:[w]*))?)/但我建议你到https://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the看看一个完整的工作示例以及正则表达式的解释,以防您需要扩展或调整它。

我不知道为什么你的匹配结果只是https://但我清理了你的正则表达式

 ((?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\)(?:www.)?|www.)[wd:#@%/;$()~_?+,-=\.&]+) 

(?:)是非捕获组,这意味着只剩下一个捕获组,其中包含完整匹配的字符串。

(?:(?:https?|ftp|gopher|telnet|file|notes|ms-help):(?://|\\)(?:www.)?|www.)链接现在开始从第一个列表开始,然后是可选的www. 或者用www.

[wd:#@%/;$()~_?+,-=\.&]我在列表中添加了一个逗号(否则你的长示例不匹配)转义了- (你是创造一个角色范围)和未转义的. (在角色类中不需要。

在Regexr上看到这个, 这是一个测试正则表达式的有用工具。

但URL匹配不是一项简单的任务,请在此处查看此问题

你给的正则表达式不适用于www。 地址,因为它期望一个URI方案 (URL之前的位,如http://)。 ‘www。’ 你的正则表达式中的部分不起作用,因为它只匹配www.://(这是没有意义的)

尝试这样的事情:

 (((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\))+)|(www.)[wd:#@%/;$()~_?+-=\.&]*) 

这将匹配具有有效URI方案的东西,或以“www”开头的东西。

上述就是C#学习教程:用于识别URL的正则表达式分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/951106.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐