Java 正则表达式从字符串中提取信息

Java 正则表达式从字符串中提取信息,java,Java,我最近开始制作ircbot,在我的ban命令中,我需要提取目标和模式的名称 有不同的模式+和- 因此,字符串的一个示例如下所示 !!ban + Sjele 或 在本例中,我如何使用正则表达式和目标Sjele查找和获取模式-或+呢 我在在线regextester regexpal中尝试了这个,但没有成功,这是我对regex的知识所知甚少的结果 ((.*)(+| -)(.*)) 当这个正则表达式工作时,使用matcher和pattern,我想要3个变量: pref(应该是!!禁止) 模式(或+

我最近开始制作ircbot,在我的ban命令中,我需要提取目标和模式的名称

有不同的模式+和-

因此,字符串的一个示例如下所示

!!ban + Sjele

在本例中,我如何使用正则表达式和目标Sjele查找和获取模式-或+呢

我在在线regextester regexpal中尝试了这个,但没有成功,这是我对regex的知识所知甚少的结果

((.*)(+| -)(.*))
当这个正则表达式工作时,使用matcher和pattern,我想要3个变量:

  • pref(应该是!!禁止)
  • 模式(或+)
  • 目标(在本例中为Sjele)
谢谢

(英语不是我的第一语言,我确实很难理解,如果我不清楚,请告诉我,我会尽力解释得更好。)

在这种情况下,正则表达式有点过火。我创建了一个方法,该方法使用
字符串
进行测试,并返回一个
字符串
,其中包含您要查找的字符,如果不匹配,则返回
null

public static String getBanStatus(String s1)
{
    if (s1.contains(Character.toString('+'))) return "+";
    if (s1.contains(Character.toString('-'))) return "-";
    else return null; // Or return something meaning no match was found
}


如果你需要一个正则表达式,Pshemo提供的一个就足够了。

既然你想要正则表达式,你可以试试
!!禁止([+\-])(\\w+)
。在第1组中,您将有+或-和第2组将包含禁用/未绑定用户的名称

下面是一个简单的例子

Matcher m = Pattern.compile("!!ban ([+\\-]) (\\w+)").matcher(
        "!!ban - Sjele");
if (m.find())
    System.out.println(m.group(1) + ":" + m.group(2));

如果您使用的是Java7,您可以为组命名,以获得更好的代码

!!ban (?<operation>[+\\-]) (?<userName>\\w+)
!!禁止(?[+\-])(?\\w+)
像这样使用它

Matcher m2 = Pattern
        .compile("!!ban (?<operation>[+\\-]) (?<userName>\\w+)").matcher(
                "!!ban - Sjele");
if (m2.find())
    System.out.println(m2.group("operation") + ":" + m2.group("userName"));
Matcher m2=模式
.compile(!!ban(?[+\-])(?\\w+).matcher(
“!!ban-Sjele”);
if(m2.find())
System.out.println(m2.group(“操作”)+:“+m2.group(“用户名”));

您需要转义+和-符号,如so\+\-


否则,它们对正则表达式编译器具有特殊意义。

您可以尝试以下正则表达式:

!!ban\s*(\+|\-)\s*(\w+)

您将在第一组中使用模式,在第二组中使用目标

正则表达式在这里是多余的。只需使用字符串方法将模式和名称提取出来。正则表达式是\!\!ban([\+\-])(.*)在OP regex中只有
+
是特殊字符<代码>-在字符类(
[…]
)中是特殊的,但在字符类之外是普通字符。
!!ban\s*(\+|\-)\s*(\w+)