我正在使用正则表达式,我不知道为什么它不起作用

时间:2013-05-07 07:10:30

标签: java regex

任何人都可以帮助我将此正则表达式转换为Java吗?我不确定它为什么不起作用,我已经阅读了文档并将其用于Java,但它不适用于Java。但是,它适用于Perl正则表达式测试网站。

(.*?);[01]:

我基本上有这个:

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1

我想要做的就是将名称expiem2pfemfrance等列表添加到字符串数组中

是的,这是我的代码: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

(我在控制台上打印出来测试了它)

4 个答案:

答案 0 :(得分:2)

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

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

尝试:

this.userlist = match.group(1).split(";[01]:?");

答案 1 :(得分:1)

使用此代码

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]

分割字符串的相关正则表达式为 ";[01]:?"

答案 2 :(得分:0)

String names = "expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1"
String[] nameArray = names.split(":");

List<String> nameList = new ArrayList<String>();
for (String name : nameArray) {
    String[] tupel = name.split(";");
    nameList.add(tupel[0]);
}

嗯,这不是一个很酷的正则表达式解决方案,但很容易理解。基本上,您将长字符串拆分为较小的字符串,这些字符串由以下内容分隔:

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

答案 3 :(得分:0)

两个问题:

  • 您的正则表达式捕获您的目标 - 正则表达式应该是分隔符,而不是您要保留的内容
  • 你有太多的代码。你只需要一行!

试试这个:

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