我正在查看来自Twitter的JSON提要,并试图使用正则表达式使URL可点击。
问题是文本中的URL有尾随逗号。逗号可以合法地成为URL的一部分,但在这种情况下,它们只是用户插入的标点符号。
这有什么办法吗?我错过了什么吗?
答案 0 :(得分:2)
你不会错过任何东西;没有万无一失的确定“预期”URL的方法,如果它被提供为明文并被明文包围。你最好的选择是做出有根据的猜测。
一种常见的方法是检查所讨论的标点符号是否后跟空格或是字符串的终止符。如果是,请不要将其解释为URL的一部分;否则,包括它。
请记住,此问题不仅限于逗号或单个字符(请考虑省略号...
)。
答案 1 :(得分:1)
如果是标点符号,您可以忽略最后一个字符(因此,网址中间的标点符号不会影响它)。
例如。正则表达式可能是这样的:
`([a-z/A-Z0-9.,]*?)([.,]?)\s`
警告(正则表达式的第一部分不包含所有网址内容,因此您仍然需要修复它。但实质上,我们([a-z/A-Z0-9.,]*?)
与网址的主要部分匹配。{{1允许使用多个字符,但我们使用*
使其不贪婪。
然后我们使用?
来匹配可能的尾随标点符号,并使用([.,]?)
来匹配空格或空格。
因此,第一个子表达式是url,您可以将其转换为链接。
如果您可以访问互联网,则可以尝试访问该资源以查看它是否返回404以确定尾随标点是否是网址或实际标点符号的一部分。