【问题标题】:Regex to match [[Wikipedia:Manual of Style#Links|]] # in java正则表达式匹配 [[Wikipedia:Manual of Style#Links|]] # in java
【发布时间】:2013-09-29 10:55:04
【问题描述】:

我一直在尝试匹配以下字符串 -

String temp = "[[Wikipedia:Manual of Style#Links|]]" ;

使用正则表达式

boolean a = temp.matches("\\[\\[Wikipedia:[a-zA-Z_0-9]*#[a-zA-Z_0-9]*\\|\\]\\]");

"\\[\\[Wikipedia:(.*?)#(.*?)\\|\\]\\]"

"\\[\\[Wikipedia:(.*)*#(.+)*\\|\\]\\]"

"\\[\\[(.*?)#(.*?)\\|\\]\\]"

但他们都没有给出任何积极的匹配。

【问题讨论】:

  • 可能想试试:java-regex-tester.appspot.com 看看有没有帮助
  • 链接是否嵌入更大的文本中?
  • 您确定语法正确吗?括号应该在双引号之后和分号之前,并且您的第二个正则表达式应该可以工作。
  • @Jerry 是的,你明白了。已编辑。

标签: java xml regex parsing url


【解决方案1】:

我马上就看到了一个问题:您正在使用没有空格的字符类来匹配输入与空格。

试试这个:

boolean a = temp.matches("\\[\\[Wikipedia:[\\w ]*#[\\w ]+\\|\\]\\]");

请注意,[a-zA-Z_0-9] 可以替换为 [\w](但会包括所有语言的字母/数字,应该没问题)

【讨论】:

    【解决方案2】:
    public static void main(String[] args) {
        String temp = "[[Wikipedia:Manual of Style#Links|]]";
        Pattern pattern = Pattern.compile("\\[\\[Wikipedia:([\\w ]+)#([\\w ]+)\\|\\]\\]");
        Matcher matcher = pattern.matcher(temp);
    
        if(matcher.find()) {            
            System.out.println("Manual of Style: " + matcher.group(1));
            System.out.println("links : " + matcher.group(2));
        }
    }
    

    temp.matches("\\[\\[Wikipedia:([\\w ]+)#([\\w ]+)\\|\\]\\]");
    

    【讨论】:

      【解决方案3】:

      只需在您的自定义字符类中添加一个空格:

      String temp = "[[Wikipedia:Manual of Style#Links|]]" ;
      temp.matches("\\[\\[Wikipedia:[a-zA-Z_0-9 ]*#[a-zA-Z_0-9]*\\|\\]\\]");  //true
      

      【讨论】:

        猜你喜欢
        • 2011-03-30
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 2015-06-03
        • 2011-02-17
        相关资源
        最近更新 更多