gpt4 book ai didi

uri - 如何匹配文本中的 URI?

转载 作者:行者123 更新时间:2023-12-01 10:16:53 29 4
gpt4 key购买 nike

如何在文本 block 中发现 URI?

这个想法是将这样的文本运行变成链接。如果只考虑 http(s) 和 ftp(s) 方案,这很容易做到;但是,我猜测一般问题(考虑 tel、mailto 和其他 URI 方案)要复杂得多(如果可能的话)。

如果可能的话,我更喜欢 C# 中的解决方案。谢谢。

最佳答案

正则表达式可能是一个很好的起点,尽管众所周知 URI 和 URL 很难与单一模式匹配。

举例来说,最简单的模式看起来相当复杂(在 Perl 5 表示法中):

\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]* ))*

这会匹配http://example.com/foo/bar-baz

ftp://192.168.0.1/foo/file.txt

但至少会导致这些问题:

  • mailto:support@stackoverflow.com(不匹配 - 没有 //,但存在 @)
  • ftp://192.168.0.1.2(匹配,但数字太多,因此它不是有效的 URI)
  • ftp://1000.120.0.1(匹配,但 IP 地址需要 0 到 255 之间的数字,因此它不是有效的 URI)
  • nonexistantscheme://obvious.false.positive
  • http://www.google.com/search?q=uri+regular+expression(匹配,但查询不匹配我认为这是 80:20 规则的一个例子。如果你想捕捉大多数东西,那么我会按照建议去做,如果你不能自己写一个像样的正则表达式的话。

如果您正在查看从相当受控的来源(例如机器生成的)中提取的文本,那么这将是最好的做法。

如果您绝对肯定必须捕获遇到的每个 URI,并且您正在查看来自野外的文本,那么我想我会寻找其中包含冒号的任何单词,例如\s(\w:\S+)\s。一旦您有合适的 URI 候选者,然后将其传递给您正在使用的任何库的 URI 类中的真实 URI 解析器。

如果您对为什么很难编写 URI 模式感兴趣,我猜 URI 的定义是用 Type-2 grammar 完成的。 , 而正则表达式只能解析来自 Type-3 grammars 的语言.

关于uri - 如何匹配文本中的 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/82398/

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