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