首先,我知道已经有数以千计的 RegEx 帖子,遗憾的是我的 google/stackoverflow 搜索技巧无法帮助找到我要找的东西。
我有一个服务器客户端通信。客户端等待用户的输入。 然后他将它发送到服务器,服务器检查它是否是一个有效的命令。
Pattern lowercase = Pattern.compile("LOWERCASE.*");
Pattern uppercase = Pattern.compile("UPPERCASE.*");
Pattern reverse = Pattern.compile("REVERSE.*");
Pattern bye = Pattern.compile("BYE");
Pattern shutdown = Pattern.compile("SHUTDOWN");
如果它以这些命令之一开始,则执行特定操作。 我在创建一个检查多种模式的 Matcher 时遇到问题,然后我想进入类似
Matcher.matches(uppercase|reverse|bye|...) //Is this how I do it?
switch(inputString){
case(lowercase): do something
case(reverse): do something else
}
等等。 我希望我的要求是可以理解的。 并且会有多个客户端与服务器对话,以防这与答案相关(例如线程和静态模式不能正常工作或其他)
谢谢。
最佳答案
你一个模式一个模式地做,并使用 if
而不是 switch
:
if (lowercase.matcher(inputStr).find()) {
... // Do something
} else if (reverse.matcher(inputStr).find()) {
... // Do something else
} else {
...
}
您可以将所有模式组合成一个,并使用捕获组代替:
Pattern all = Pattern.compile(
"(?<lower>LOWERCASE.*)|(?<upper>UPPERCASE.*)|(?<reverse>REVERSE.*)|..."
);
Matcher m = all.matcher(inputStr);
if (m.find()) {
String upper = m.group("upper");
String lower = m.group("lower");
String reverse = m.group("reverse");
if (upper != null) {
... // Do something
}
if (lower != null) {
... // Do something
}
if (reverse != null) {
... // Do something
}
}
请注意,上面的代码使用命名捕获组( <upper>
、 <lower>
等)
关于java - 检查几个正则表达式的字符串并说出哪个匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689923/