正则表达式的问题:Look-behind group does not have an obvious maximum length near index ...

breve 2006-05-20 12:37:52
有这样子的string格式: "aaaa;bbbbb;cccccc;dddddd;"
字段之间以分号隔开,现在要分别取出每个字段的内容,字段内容可以是除分号外的任意多个字符。
譬如我们要取出的第三个字段的内容应该是cccccc。
我的正则表达式是这样子写的:
(?<=^([^;]*;){2})[^;]*(?=;)

这个正则表达式在一般的正则表达式测试工具上都能跑出正确的结果,但是如果运行在以java api为基础的测试软件譬如JRegexpTester上就会报错:
Error : pattern syntax : Look-behind group does not have an obvious maximum length near index 15
(?<=^([^;]*;){2})[^;]*;
^

那位大虾碰到过类似的问题吗?还望不吝赐教则个:)
...全文
1050 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
interhanchi 2006-05-21
  • 打赏
  • 举报
回复
那你可以吧ma.group(1)付给一个 List呀,然后再从List里面读了。
breve 2006-05-21
  • 打赏
  • 举报
回复
这样的确是可以把各个字段取出来,但是如果要精确地取出某一段,譬如第三个字段的内容应该是"cccccc",正则表达式应该怎么写呢?
interhanchi 2006-05-21
  • 打赏
  • 举报
回复
其实这样写也可以

Pattern pa=Pattern.compile("(.*?)(?=;)");
interhanchi 2006-05-21
  • 打赏
  • 举报
回复
import java.util.regex.*;
import java.util.*;
public class Outer{

public static void main( String[]argv ) {
String s="aaaa;bbbbb;cccccc;dddddd;";
Pattern pa=Pattern.compile("(.*?)(?=;)(.*?)");
Matcher ma=pa.matcher(s);
while(ma.find()){
System.out.println(ma.group(1));
}

}
}

看是不是你想要的。
breve 2006-05-21
  • 打赏
  • 举报
回复
我不能直接写java代码来控制:),原因前面已经说过了。现在只能通过正则表达式来处理,所以前面我才会写出
(?<=^([^;]*;){2})[^;]*(?=;) 这样的正则表达式

多谢楼上这么热心的帮忙了,直接通过正则表达式实现的话有什么方法吗
breve 2006-05-20
  • 打赏
  • 举报
回复
这样做的确可以
不过我现在所做的工作是把正则表达式写好,然后把正则表达式和测试文件放到服务器上直接跑出结果,而不是直接去写java源代码。所以正则表达式这个问题看来是绕不开的。

多谢大家的指导,不知道还有没有什么更好的解决方案?
UnAgain 2006-05-20
  • 打赏
  • 举报
回复
mark
interhanchi 2006-05-20
  • 打赏
  • 举报
回复
呵呵,楼上的,split方法的实现就是用正则表达式来实现的。
kingofworl 2006-05-20
  • 打赏
  • 举报
回复
这件事用正则表达式麻烦
不如
StringTokenizer str=new StringTokenizer(s,";");
while (str.hasMoreTokens()) {
System.out.println(str.nextToken());
}
或者
String[] s1=s.split(";");
interhanchi 2006-05-20
  • 打赏
  • 举报
回复
最简单得方法:
String s="aaaa;bbbbb;cccccc;dddddd;";
String[] s1=s.split(";");//数组s1里面就依次存着你想要的值。
System.out.println(Arrays.toString(s1));

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧