CSS双重类属性的Java正则表达式匹配

时间:2014-04-28 11:16:41

标签: java css regex

我想有一个布尔值告诉我CSS选择器是否有:

  • Id选择器(#)+类选择器(。)在同一元素中,例如表#someid.someclass
  • 类选择器(。)+ Id选择器(#)在同一元素中,例如table.someclass #someid
  • 同一元素中的双类选择器(。),例如table.class1.class2

子字符串必须在选择器中匹配,该选择器可能包括组合表,例如表> tr#someid.someclass> TD ...

这是我的代码:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MultipleClassId {
private static final String regexs[] = {
        "(#[^\\s\\+>~\\.\\[:]+)(\\.[^\\s\\+>~\\.\\[:]+)",
        "(\\.[^\\s\\+>~\\.\\[:]+)(#[^\\s\\+>~\\.\\[:]+)",
        "(\\.[^\\s\\+>~\\.\\[:]+)(\\.[^\\s\\+>~\\.\\[:]+)" };

public boolean isMultipleClassId(String selector) {
    for (int i = 0; i < regexs.length; i++) {
        Pattern p = Pattern.compile(regexs[i]);
        Matcher m = p.matcher(selector);
        if (m.find())
            return true;
    }
    return false;

}

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter selector: ");
    String selector = input.next();
    MultipleClassId specificityCalculator = new MultipleClassId();
    boolean isMultiple = specificityCalculator.isMultipleClassId(selector);

    System.out.println(isMultiple);
}

}

如果选择器的第一个元素具有多个属性选择器(例如“tr#someid.someclass”)以及上面列出的任何一种情况,它会找到该模式。但是,如果我有一个选择器,如“table tr#someid.someclass”,则返回false。

然而,在RegexPlanet中,它正确匹配(请查看以下链接http://fiddle.re/ykedp)。

这是我的Java库版本的问题吗?或者我的代码有问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

问题只是

String selector = input.next();

必须替换为

String selector = input.nextLine();