我想匹配两个字符串,但顺序不重要。例如,下面的检查应该给予true而不是false。
final String line = "LIST \"\" (\"car1\" \"car0\") RETURN (SPECIAL-USE STATUS)\n";
final String regex = ".*LIST.*\\(\"car0\"\\ \"car1\"\\)\\ RETURN.*\\R";
System.out.println(line.matches(regex));
字符串
我期望字符串行中的值应该与正则表达式匹配,而不管单词的顺序(car1和car0)。
2条答案
按热度按时间rbl8hiat1#
你能做到的
字符串
如果您不理解它的含义,您应该熟悉
java.util.regex.Pattern
的文档。这个链接基本上是你在Java中编写正则表达式的圣经。如果这对你来说还不够清楚,这里有一个完全相同的字符串的分解视图,但是每个单独的组件都有一个分解。
型
有些事情要注意。
1.转义意味着你决定停止解释一个符号的特殊含义,你只想让Java把它放到String中。要转义,请使用反斜杠(\)。不过,你也看到了,逃跑是很棘手的。有时你需要两个反斜杠,有时你需要一个。如果你需要帮助了解何时何地你需要1或2(或更糟的是,更多),我会看看这个链接。
Java Regular Expression - how to use backslash的
1.一个捕获组加上一个|symbol允许你在正则表达式中使用OR子句。上面的正则表达式基本上是说,“匹配一个通配符,后跟LIST,后跟另一个通配符,后跟一个左括号,后跟一个 OR CLAUSE,其中以下情况之一必须为真。我们可以匹配文字字符串 “car1”“car0” 或另一个文字字符串 “car0”“car1”。在 OR子句 * 之后,我们匹配一个右括号、一个空格、字符串RETURN、另一个通配符,最后是一个新的行匹配器”。这就引出了我的下一个观点。
1.除了 * 或子句*,这里的一切都是有序的。这意味着,必须在匹配下一个之前匹配一个。OR子句 * 使您能够在其中一个选项之间进行分支,但仅此而已。否则,一切都遵循按顺序进行的规则。
atmip9wb2#
regex变量可以写成:
字符串