我希望正则表达式检查是否有"字" ([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);
}
答案 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*");