正则表达式匹配维基百科内部文章链接

时间:2014-09-24 07:18:33

标签: java regex

我希望将维基百科文章源代码中的正则表达式匹配文本与以下规则匹配:


  1. 仅匹配内部文章的链接。所以不要将链接与文件,类别,用户等等任何名称空间匹配(这些名称空间的完整列表here
    • 匹配[[Without|namespace]]
    • 的示例链接
    • 示例链接不匹配[[Category:Nope]][[File:Nopeish]]

    1. 仅匹配具有分隔符“|”的链接。带有此符号的链接显示在带有不同文本的文章中,作为他们所指的文章的标题
      • 匹配[[Something|else]]
      • 的示例链接
      • 示例链接不匹配[[text]]

      1. 匹配两组中的链接
        • 匹配[[Something|else]]的示例链接将与文本匹配为两组:
          1. 组:"Something"
          2. 组:"else"

      2. 我已经对此进行了测试,到目前为止,我已经提出了以下正则表达式:\[\[(?!.+?:)(.+?)\|(.+?)\]\],它无法正常工作,因为它也匹配如下文本:

        [[Problem]] non link text [[Another link|problemAgain]]
          ^------------ group 1 (wrong) -------^ ^-group 2 -^
        
        [[This should be|matched|]]
        

        DEMO

        由于

1 个答案:

答案 0 :(得分:3)

只使用否定的字符类而不是.+?

\[\[(?!.+?:)([^\]\[]+)\|([^\]\[]+)\]\]

Java正则表达式,

"\\[\\[(?!.+?:)([^\\]\\[]+)\\|([^\\]\\[]+)\\]\\]"

DEMO

OR

只需你可以这样做,

\[\[([^\]\[:]+)\|([^\]\[:]+)\]\]

Java正则表达式,

"\\[\\[([^\\]\\[:]+)\\|([^\\]\\[:]+)\\]\\]"

DEMO