0

我有以下字符串:

String s = "http://www.[VP_ANY].com:8080/servlet/[VP_ALL]";

我需要检查此字符串是否包含 [VP_ANY] o [VP_ALL] 字样。我尝试了这样的事情(以及许多组合),但它不起作用:

Pattern.compile("\b(\\\\[VP_ANY\\\\]|\\\\[VP_ALL\\\\])\b").matcher(s).matches()

我究竟做错了什么?

我尝试了以下方法:

s = "www.[VP_ANY].com:8080/servlet/[VP_ALL]";

System.out.println(Pattern.compile("\[VP_ANY\]").matcher(s).matches());

System.out.println(s.replaceAll("\[VP_ANY\]", "A"));

第一个“System.out”返回 false,第二个返回正确的替换。

我用 2 个反斜杠转义了“[”和“]”字符,但是当我保存帖子时,只显示一个。但是我用的是2 ...

4

4 回答 4

1
Pattern.compile("\b(\\\\[VP_ANY\\\\]|\\\\[VP_ALL\\\\])\b").matcher(s).matches()
String s = "http://www.[VP_ANY].com:8080/servlet/[VP_ALL]";
                      ^^      ^^                ^^      ^
                      NoWB    NoWB              NoWB    WB

您的正则表达式将不起作用,因为.and [, between ]and .and between /and之间没有单词boundaray[

此外,我认为您的转义是错误的,您的单词边界需要多加一个反斜杠,而其他两个则少。

因此,由于单词边界不起作用,您应该可以

Pattern.compile("\\[VP_(?:ANY|ALL)\\])")
于 2012-05-22T13:11:56.090 回答
0

尝试这个

\[VP_ANY\]|\[VP_ALL\]

我去 Java

try {
    boolean foundMatch = "www.[VP_ANY].com:8080/servlet/[VP_ALL]".matches("\\[VP_ANY\\]|\\[VP_ALL\\]");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
于 2012-05-22T12:56:44.543 回答
0

试试这个

try {
    boolean foundMatch = subjectString.matches("(?i)\\bVP_(?:ANY|ALL)\\b");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

或这个

try {
    boolean foundMatch = subjectString.matches("(?i)\\[VP_(?:ANY|ALL)\\]");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
于 2012-05-22T12:57:07.983 回答
0
"http://www.[VP_ANY].com:8080/servlet/[VP_ALL]".replaceAll ("http://www.(\\[VP_ANY\\]).com:8080/servlet/(\\[VP_ALL\\])", "$1:$2")
res117: java.lang.String = [VP_ANY]:[VP_ALL]

如果你正在寻找一个文字 [,你必须掩盖它 - 否则它将意味着像 [AZ] 这样的组。

现在,如果您在运行时从文件或 JTextField 中读取正则表达式,仅此而已。但是,如果您将其写入源代码,编译器将看到 \ 并将其视为一般屏蔽,这可能需要屏蔽引号,如

char apo = '\''; 
String quote = "He said: \"Whut?\"";

所以你必须再次掩盖它,因为只"\\"意味着"\".

因此,对于开发来说,为了不感到太困惑,最好有一个简单的 GUI 应用程序,它带有 2 或 3 个文本字段来测试正则表达式。如果你成功了,你只需要添加另一层掩蔽,但要开发它们,你可以远离这第二层。

Divide et impera就像古罗马程序员告诉我们的那样。

于 2012-05-22T13:04:33.920 回答