java - 检查几个正则表达式的字符串并说出哪个匹配

标签 java regex server client matcher

首先,我知道已经有数以千计的 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/

相关文章:

java - Android:捕获每种可能类型的 "Enter"键(硬键和软键)的代码?

java - PKCS12 格式的 keystore 对于 keytool 来说似乎是空的,但是被 Firefox 读取了吗?

regex - 使用 IFn 扩展 Clojure 正则表达式以支持映射

django - 如何限制连接到一个端口并将其他请求重定向到另一个端口?

http - Nginx 背后的虚拟主机最合适的控制面板是什么?

node.js - 是什么让我的 Node 应用程序使用 pm2 每 30 秒重新启动一次

javascript - java 中的 3e5 for android

java - 如何将 Spring bean id 注入(inject)另一个 Spring 配置的 Bean 中?

c - 正则表达式检测 c 函数体的开头

regex - 折叠并捕获单个Regex表达式中的重复模式