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