首页 / 知识
关于文本匹配:如何匹配文本中的URI?
2023-04-16 12:54:00

How to match URIs in text?如何在文本块中发现URI? 这样做的目的是将这种文本运行转换为链接。 如果仅考虑http和ftp方案,这将非常简单。 但是,我猜测一般问题(考虑tel,mailto和其他URI方案)要复杂得多(如果可能的话)。 如果可能,我希望使用C#解决方案。 谢谢。 正则表达式可能证明是一个很好的起点,尽管众所周知,URI和URL很难与单个模式匹配。 为了说明这一点,最简单的模式看起来相当复杂(用Perl 5表示法):
这将匹配
和 但至少会导致以下问题:
如果您正在查看从相当可控的来源(例如机器生成的)中提取的文字,那么这将是最好的选择。
如果您绝对肯定要捕获遇到的每个URI,并且正在查看文本,那么我想我会寻找其中带有冒号的任何单词,例如 如果您对为什么很难编写URI模式感兴趣,我想可能是URI的定义是使用Type-2语法完成的,而正则表达式只能解析Type-3语法中的语言。 某些内容是否为URI取决于上下文。通常,它们唯一的共同点是它们以" scheme_name:"开头。方案名称可以是任何名称(以合法字符为准)。但是其他字符串也包含冒号而不是URI。 因此,您需要确定感兴趣的方案。通常,对于您关心的每种方案,您都可以搜索" scheme_name:",然后是字符,直到空格为止。不幸的是,URI可以包含空格,因此,如果将它们嵌入文本中,则可能会造成歧义。您无法采取任何措施解决歧义-撰写文本的人将不得不对其进行修复。 URI可以选择包含在<>中。不过,大多数人都不会这样做,因此认识到这种格式只会偶尔有所帮助。 URI的Wikipedia文章列出了相关的RFC。 [编辑添加:使用正则表达式完全验证URI是一个噩梦-即使您以某种方式找到或创建了正确的URI,也将非常庞大且难以注释和维护。幸运的是,如果您正在做的是突出显示链接,那么您可能不需要关心奇数假阳性,因此您无需进行验证。只需查找" http://"," mailto:\ S * @"等] Ubiquity的URL工具执行以下操作:
如果您还希望匹配" something.tld",这并不容易,因为普通文本将具有该模式的许多实例,但是如果您仅希望匹配以方案开头的URI,则可以尝试使用此正则表达式(对不起,我不知道如何将其插入C#)
您可以在此处添加更多方案,并且要考虑到最后一个字符不是无效的字符(例如,如通常的字符串" http://www.example.com"那样,它会与方案匹配直到下一个空格字符)。 ) 这是带有正则表达式的代码片段,可满足各种需求: http://snipplr.com/view/6889/regular-expressions-for-uri-validationparsing/ 对于许多协议,您可以只搜索"://"而不加引号。虽然不确定其他。 下面的perl regexp应该可以解决问题。 C#是否具有perl正则表达式?
|
最新内容
相关内容
linux运行图形界命令?
linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,图形,linux图形化界面命令第一种方式比较简单,只需要选择相应的带图linux怎样运行命令?
linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux编译完运行命令?
linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,在linux中编译C输入完程序后输入个:wq然后按什么键就然后就回到了linux命令程序运行?
linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Linux中如何启动进程?进程调度命令有哪些?实现调度启动进程的方法有linux硬链接删除命令?
linux硬链接删除命令?,数据,系统,不了,时间,名称,链接,文件,档案,地方,设备,linux怎么备份删除bin下的.sh命令1、dump命令 Linux dump命令用于linux运行多个命令?
linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,linux多个用户同时执行命令会冲突吗不会冲突。解释:用户登录linux的linux运行命令查看?
linux运行命令查看?,系统,信息,状态,命令,名称,情况,地址,软件,进程,第一,linux查看进程命令首先打开xshell软件,连接上linux服务器,使用指令pslinux中命令运行软件?
linux中命令运行软件?,软件,系统,名称,工具,电脑,位置,环境,中心,在线,初级,如何用命令行在Linux下安装软件?首先启动CentOS7,在VMware中点击上linux链接网络命令行?
linux链接网络命令行?,地址,系统,网络,工作,软件,工具,信息,密码,服务,标准,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出linux常用命令文本?
linux常用命令文本?,工作,命令,网络,地址,系统,管理,标准,信息,目录,文件,Linux用户以及权限相关常用命令总结sudo和su类似,有一些附加的属性,管脚本linux上运行命令?
脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,typescript脚本中怎样运行Linux命令?1、Script可用于记录当前用户linux命令下载链接?
linux命令下载链接?,软件,名称,系统,工具,网络,官网,代理,命令,平台,位置,linux命令怎么下载pdf文件方法如下 wget是linux下一个从网络上自动