任何人都可以帮助我将此正则表达式转换为Java吗?我不确定它为什么不起作用,我已经阅读了文档并将其用于Java,但它不适用于Java。但是,它适用于Perl正则表达式测试网站。
(.*?);[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
(我在控制台上打印出来测试了它)
答案 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]:");