我目前正在尝试匹配降价文本中的所有纯文本链接。
降价文字示例:
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>>
。此外,降价中的链接可以采用(url)
的形式,因此我们也必须避免匹配普通括号。
所以我在java中匹配纯文本url的工作正则表达式是:
"[^(\\<|\\(](https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|][^(\\>|\\)]"
,
使用[^(\\<|\\(]
和[^(\\>|\\)]
以避免匹配包装括号。
但是这里有一个问题,我也不想要匹配这种网址:
[1]: http://slashdot.org
所以,如果降价文字是
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
。
我想知道满足这个标准的模式是什么?
答案 0 :(得分:2)
这里有一个解析问题。正则表达式很好,但只是在这里使用正则表达式将使它变得一团糟(假设你实现它)。修复此问题后,您可能会发现自己面临其他问题,例如代码中的URL(在`或以制表符开头的行或四个空格之间),您不想替换它们。
解决方案是分成行然后
^\[\d+\]:\s+
)这是我在this small pseudo-markdown parser中使用的逻辑,您可以测试here。
请注意,使用现有的已证明的降价解析器始终存在解决方案,其中有许多解析器。