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

标签 java css regex

我想要一个 boolean 值来告诉我 CSS 选择器是否具有:

  • Id选择器(#)+Class选择器(.)在同一个元素中,比如table#someid.someclass
  • 同一元素中的类选择器(.)+Id选择器(#),如table.someclass#someid
  • 同一元素中的双类选择符(.),如table.class1.class2

子字符串必须在可能包含组合器的选择器中匹配,例如 table > 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 库版本的问题吗?还是我的代码有问题? 谢谢!

最佳答案

问题是

String selector = input.next();

必须替换为

String selector = input.nextLine();

关于CSS双类属性的Java正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339665/

相关文章:

CSS 外边框

javascript - 想要删除任何 HTML 标签

java - 基于 HSQLDB 的库非常慢 : trying to narrow down search for bug

python - 如何修复,TypeError : unsupported operand type(s) for %: 'NoneType' and 'int'

java - Java中如何将8个字符串一次转换为一个字节写入文件?

css - 时事通讯注册表单在不同浏览器和计算机上的位置

Java Regex 组导致 Stackoverflow 问题

php - CSS 中媒体查询的正则表达式

java - Doclet- 获取列表的泛型

java - 为什么函数式编程语言支持自动内存而不是命令式语言?