正则表达式,不匹配网址

时间:2011-03-18 20:45:33

标签: regex pattern-matching matching

我必须匹配超过30个字符的单词,但这些单词不能是网址。

我试图这样做,但效果不好:

(?<!ftp)([^\s\t\r\n<>]{30})

2 个答案:

答案 0 :(得分:1)

我有几点意见:

  • 您的正则表达式可以与ftp://example.com匹配,因为您使用的是lookbehind,它在第一个f之前看不到任何内容。请改为使用前瞻。
  • 此外,您需要确保匹配整个单词,否则您可以将部分方式匹配到网址。
  • \ s包括\ t,\ n等...所以后者是多余的。
  • 超过30个字符表示31个或更多字符,即{31,}

请改为尝试:

(?<![^\s<>])(?!ftp)([^\s<>]{31,})(?![^\s<>])

答案 1 :(得分:0)

试试这个:

\b(?<!ftp://)\w{30,}\b