字符串与正则表达式不匹配

时间:2015-03-15 22:17:43

标签: java regex

我希望正则表达式检查是否有"字" ([a-zA-Z0-9])如果有一个括号,那么在这六个"关系之一之后必须有(id = [0-9] +)。接着是另一个词。在单词和关系之间必须至少有一个空格。单词和关系之间以及(,),id,=和number之间可以有更多的空格。三条弦就是缩短线条。

无论我尝试什么,此代码始终显示为false:

String first = "\\s[a-zA-Z0-9]+(\\s\\(\\sid\\s=\\s[0-9]+\\s\\))?\\s+";
String second = "(contains|contained-in|part-of|has-part|successor-of|predecessor-of)\\s+";
String third = "[a-zA-Z0-9]+(\\s\\(\\sid\\s=\\s[0-9]+\\s\\))?\\s";
Pattern linePattern = Pattern.compile(first + second + third);

public static void main(String[] args) {
    String a = "apple(id=107) contained-in tree";
    Matcher matcher = linePattern.matcher(a);
    boolean matches = matcher.matches();
    System.out.println(matches);
}

1 个答案:

答案 0 :(得分:0)

尝试使用\s*

\s*[a-zA-Z0-9]+(\s*\(\s*id\s*=\s*[0-9]+\s*\))?\s*(contains|contained-in|part-of|has-part|successor-of|predecessor-of)\s+[a-zA-Z0-9]+(\s*\(\s*id\s*=\s*[0-9]+\s*\))?\s*

Pattern linePattern = Pattern.compile("\\s*[a-zA-Z0-9]+(\\s*\(\\s*id\\s*=\\s*[0-9]+\\s*\\))?\\s*(contains|contained-in|part-of|has-part|successor-of|predecessor-of)\\s+[a-zA-Z0-9]+(\\s*\\(\\s*id\\s*=\\s*[0-9]+\\s*\\))?\\s*");