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

时间:2013-03-15 21:07:04

标签: java

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

有不同的模式+和 -

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

!!ban + Sjele

!!ban - Sjele

我如何找到并获得该模式 - 或者使用正则表达式+和+在这种情况下的目标Sjele?

我在网上regextester regexpal中试过这个并且它不起作用,这与我对正则表达式的低知识一样接近

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

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

  • pref(应该是!!禁止)
  • 模式(或 - 或+)
  • 目标(在这种情况下是Sjele)

感谢
(英语不是我的第一语言,我确实有麻烦被理解,如果我不清楚,请告诉我,我会尝试更好地解释。)

4 个答案:

答案 0 :(得分:0)

对于这种情况,正则表达式有点矫枉过正。我创建了一个方法,该方法需要String进行测试,并返回包含您要查找的字符的String,如果没有匹配则返回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给出的就足够了。

答案 1 :(得分: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"));

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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