匹配文本中的URL,方括号括起来的除外

时间:2011-01-20 12:20:06

标签: regex

我正在尝试创建一个正则表达式,以便我可以识别文本中的URL。

可能的(可能的)测试用例:

  • http://a.url.com
  • http://a.url.co.uk
  • [http://a.url.com]
  • [http://a.url.co.uk]
  • [http://a.url.com]
  • [http://a.url.co.uk]
  • [http://a.url.com]
  • [http://a.url.co.uk]
  • [http://a.url.com]
  • [http://a.url.co.uk]
  • 文字 http://a.url.com ,此处
  • 文字 http://a.url.co.uk 此处
  • 文字[http://a.url.com]和此处
  • 文字[http://a.url.co.uk]和 这里
  • 文字[http://a.url.com]和 这里
  • 文字[http://a.url.co.uk]和 这里
  • 文字[http://a.url.com]和 这里
  • 文字[http://a.url.co.uk]和 这里
  • 文字[http://a.url.com]和 这里
  • 文字[http://a.url.co.uk]和 这里

只有没有方括号的行才能匹配。并且只应匹配URL,而不是整行。如果不清楚上面列表中的粗体文本是我希望匹配的正则表达式。

我目前正在研究的正则表达式是:

(^|[^\[ ])(https?://\S+)

只有前两行匹配,我无法弄清楚如何使其他行没有方括号匹配?

我使用过群组,因为稍后我会用一些HTML替换匹配。但需要首先让正则表达式正常工作。

我一直在使用这个在线工具来帮助我构建和测试正则表达式; http://gskinner.com/RegExr/

3 个答案:

答案 0 :(得分:1)

您还可以使用负前瞻断言来确保该行不使用正则表达式包含方括号:

^(?!.*\[.*\]).*(https?://\S+)

Rubular link

答案 1 :(得分:0)

这应该有效:

(?<=^[^\[\]]*)(https?://\S+)(?=[^\[\]]*$)

使用[^\[\]]*,您说在链接之前和之后可能有除方括号之外的任何符号。 这使用正向前瞻和后视来检查没有括号。

答案 2 :(得分:0)

您修改的工作正则表达式:

([^\S\]](https?:\/\/[^\]\s]+)[^\S\]]|^(https?:\/\/[^\]\s]+)$)

Rubular