0

谁能帮我把这个正则表达式转换成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

4 回答 4

2

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

您声明 perl 版本有效,但这要求输入字符串以:. 如果不是,则需要在后面添加一个?:指定它是可选的。

尝试:

this.userlist = match.group(1).split(";[01]:?");
于 2013-05-07T07:21:34.323 回答
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]:?"

于 2013-05-07T07:27:07.623 回答
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]);
}

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

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

于 2013-05-07T07:20:15.003 回答
0

两个问题:

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

尝试这个:

String[] names = builder.toString().split(";[01]:");
于 2013-05-07T08:05:22.777 回答