Java 我在使用正则表达式时遇到了问题,我不知道为什么它不起作用

Java 我在使用正则表达式时遇到了问题,我不知道为什么它不起作用,java,regex,Java,Regex,有人能帮我把这个正则表达式转换成Java吗?我不确定它为什么不起作用,我已经阅读了文档并为Java制作了它,但它不适用于Java。然而,它在PerlRegex测试网站上运行良好 (.*?);[01]: 我基本上有: expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1 我要做的就是将名称列表expiem,2pfemfrance等放入字符串数组中 是的,这是我的代码:builder.toStr

有人能帮我把这个正则表达式转换成Java吗?我不确定它为什么不起作用,我已经阅读了文档并为Java制作了它,但它不适用于Java。然而,它在PerlRegex测试网站上运行良好

(.*?);[01]:
我基本上有:

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1
我要做的就是将名称列表
expiem
2pfemfrance
等放入字符串数组中

是的,这是我的代码:
builder.toString()
包含了我提到的内容

Pattern pattern = Pattern.compile("h=(.*)");
Matcher match = pattern.matcher(builder.toString());
if( match.find() ) {
    this.userlist = match.group(1).split("(.*?);[01]:");                              
    this.loaded = true;
    this.index = 0;
}   
顺便说一下,
match.group(1)
就是我发布的字符串,它就是

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1
(我通过在控制台上打印出来进行了测试)

String name=“expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1”
字符串[]nameArray=names.split(“:”);
列表名称列表=新的ArrayList();
for(字符串名称:nameArray){
String[]tupel=name.split(“;”);
nameList.add(tupel[0]);
}
这不是一个很酷的正则表达式解决方案,但我很容易理解。基本上,您可以将长字符串拆分为较小的字符串,这些字符串由以下内容分隔:

然后使用分隔符拆分小字符串;并将该结果的第一个条目(即名称)添加到列表中。

String names=“expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1”
字符串[]nameArray=names.split(“:”);
列表名称列表=新的ArrayList();
for(字符串名称:nameArray){
String[]tupel=name.split(“;”);
nameList.add(tupel[0]);
}
这不是一个很酷的正则表达式解决方案,但我很容易理解。基本上,您可以将长字符串拆分为较小的字符串,这些字符串由以下内容分隔:


然后使用分隔符拆分小字符串;并将该结果的第一个条目(即名称)添加到列表中。

您不需要将字符串捕获作为拆分表达式的一部分:它会吃掉您的字符串

您声明perl版本可以工作,但是这要求输入字符串以
结尾。如果没有,则需要在
之后添加一个
,以指定它是可选的

尝试:


您不需要将字符串捕获作为拆分表达式的一部分:它会吃掉您的字符串

您声明perl版本可以工作,但是这要求输入字符串以
结尾。如果没有,则需要在
之后添加一个
,以指定它是可选的

尝试:

使用此代码

String input = "h=expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1";

Pattern pattern = Pattern.compile("h=(.*)");
Matcher match = pattern.matcher(input);
if( match.find() ) {
   String substr = match.group(1);
   System.out.println(substr);

   String[] userlist = substr.split(";[01]:?");
   System.out.println(Arrays.toString(userlist));
}   
你得到

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1
[expiem, 2pfemfrance, runiora, stallker420, phoenixblaze0916, myothorax]
使用此代码拆分字符串的相关regexp是“
”;[01]:?”

String input = "h=expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1";

Pattern pattern = Pattern.compile("h=(.*)");
Matcher match = pattern.matcher(input);
if( match.find() ) {
   String substr = match.group(1);
   System.out.println(substr);

   String[] userlist = substr.split(";[01]:?");
   System.out.println(Arrays.toString(userlist));
}   
你得到

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1
[expiem, 2pfemfrance, runiora, stallker420, phoenixblaze0916, myothorax]
分割字符串的相关regexp是“
”;[01]:?”
两个问题:

  • 您的正则表达式正在捕获您的目标-正则表达式应该用于分隔符,而不是您想要保留的内容
  • 你的代码太多了。你只需要一条线
试试这个:

String[] names = builder.toString().split(";[01]:");
两个问题:

  • 您的正则表达式正在捕获您的目标-正则表达式应该用于分隔符,而不是您想要保留的内容
  • 你的代码太多了。你只需要一条线
试试这个:

String[] names = builder.toString().split(";[01]:");

你能发布你已经尝试过的吗?例如,您试图使用regex的实际Java代码。这不会影响完整字符串,只影响字符串的一部分,因此根据您将regexp放在何处,您的成功率会有所降低或提高。再多展示一下你使用的代码你能发布一下你已经尝试过的吗?例如,您试图使用regex的实际Java代码。这不会影响完整字符串,只影响字符串的一部分,因此根据您将regexp放在何处,您的成功率会有所降低或提高。更多地展示一下你所使用的代码。你不需要在最后增加一个
来去掉最后一个
;1
?@ValarDohaeris请注意,OP在输入字符串的末尾没有一个
,而您的代码没有。您不需要在末尾添加一个
,以去掉最后一个
;1
?@ValarDohaeris请注意,OP在输入字符串的末尾没有
,而您的代码有