0

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

有不同的模式 + 和 -

所以一个字符串的例子看起来像

!!ban + Sjele

或者

!!ban - Sjele

在这种情况下,我将如何使用正则表达式和目标找到并获取模式 Sjele?

我在在线 regextester 正则表达式中尝试了这个,但它没有用,这是我对正则表达式的了解不足的情况下所能得到的

((.*)(+| -)(.*))

当这个正则表达式工作时使用匹配器和模式,我想要 3 个变量:

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

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

4

4 回答 4

0

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

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

于 2013-03-15T21:21:01.747 回答
0

你可以试试这个正则表达式:

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

您将在第一组中设置模式,在第二组中设置目标

于 2013-03-15T21:45:56.570 回答
0

对于这种情况,正则表达式有点矫枉过正。我创建了一个需要 aString进行测试的方法,它将返回String带有您要查找的字符的 a ,或者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 提供的就足够了。

于 2013-03-15T21:18:29.353 回答
0

由于您要求使用正则表达式,您可以尝试使用!!ban ([+\\-]) (\\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+)

并像这样使用它

Matcher m2 = Pattern
        .compile("!!ban (?<operation>[+\\-]) (?<userName>\\w+)").matcher(
                "!!ban - Sjele");
if (m2.find())
    System.out.println(m2.group("operation") + ":" + m2.group("userName"));
于 2013-03-15T21:19:22.950 回答