我希望正则表达式检查是否有一个“单词”([a-zA-Z0-9]),如果有括号,则必须在其中一个之后加上(id = [0-9] +)这六个“关系”后跟另一个词。单词和关系之间必须至少有一个空格。单词与关系之间以及(,),id,=与数字之间可以有更多的空格。这三个字符串只是用来缩短行。

无论我尝试什么,此代码始终显示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);
}

最佳答案

尝试使用\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*");

关于java - 字符串与正则表达式不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29066857/

10-11 04:56
查看更多