【发布时间】:2013-12-18 09:00:39
【问题描述】:
我目前正在尝试匹配降价文本中的所有纯文本链接。
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。
我想知道满足这个标准的模式是什么?
【问题讨论】:
-
在我自己的 Markdown 解析器中,我通过逐行解析来处理此类问题,如果检测到某些模式(例如 [1]:),则根本不进行替换
-
两者之间的标准是什么?点数?还是网址以 .org 结尾?
-
@oyss 很明显是前面括号之间有整数的时候。
-
你真的要使用正则表达式吗?我不确定您是否可以与它们一起处理代码块+列表。为什么不修改解析器?
-
@dystroy 仍然过于狂野,无法为其编写模式。我正在考虑使用 (?