我最近开始制作ircbot,在我的禁令命令中,我需要提取目标名称和模式。
有不同的模式+和 -
所以字符串的一个示例看起来像
!!ban + Sjele
或
!!ban - Sjele
我如何找到并获得该模式 - 或者使用正则表达式+和+在这种情况下的目标Sjele?
我在网上regextester regexpal中试过这个并且它不起作用,这与我对正则表达式的低知识一样接近
((.*)(+| -)(.*))
当这个正则表达式工作时使用匹配器和模式,我想要3个变量:
感谢
(英语不是我的第一语言,我确实有麻烦被理解,如果我不清楚,请告诉我,我会尝试更好地解释。)
答案 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+)
您将在第一组中使用模式,在第二组中使用目标。