gpt4 book ai didi

regex - 如何匹配 Markdown 中的纯文本 URL?

转载 作者:行者123 更新时间:2023-12-03 02:56:22 33 4
gpt4 key购买 nike

我目前正在尝试匹配 Markdown 文本中的所有纯文本链接。

Markdown 文本示例:

Dude, look at this url http://www.google.com .. it's a great search engine

我希望将其转换为

Dude, look at this url <http://www.google.com> .. it's a great search engine

简而言之,处理 url应该变成<url> ,但正在处理现有的 <url>不应该成为<<url>> 。另外,Markdown 中的链接可以是 (url) 的形式。 ,所以我们也必须避免匹配普通的括号。

所以我在java中匹配纯文本url的工作正则表达式是: "[^(\\<|\\(](https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|][^(\\>|\\)]" ,

[^(\\<|\\(][^(\\>|\\)]以避免匹配括号。

但是这里存在一个问题,我也不想想要匹配这种网址:

[1]: http://slashdot.org

所以,如果 Markdown 文本是

Dude, look at this url http://www.google.com .. it's a great search engine
[1]: http://slashdot.org

我只想要http://www.google.com进行匹配,但不匹配 http://slashdot.org .

我想知道满足这个标准的模式是什么?

最佳答案

这里有一个解析问题。正则表达式很好,但仅仅在这里使用正则表达式会让事情变得一团糟(假设你实现了它)。解决此问题后,您可能会发现自己面临其他问题,例如您不想替换的代码中的 URL(` 之间或以制表符或四个空格开头的行中)。

解决方案是分成几行,然后

  1. 检测模式(例如^\[\d+\]:\s+)
  2. 仅在不遵循不兼容模式的行上应用替换内容(例如链接更改的网址)

这就是我在 this small pseudo-markdown parser 中使用的逻辑您可以测试 here .

请注意,总有使用现有经过验证的 Markdown 解析器的解决方案,其中有很多。

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

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