本来虽然也看过一些正则表达式的用法/ 但是对于有些需求还是不知道从何下手。
现在工作中,遇到一个问题,求一正则表达式!需求:
010003000000000对于上面的一个字符窜,每3个 0 为一组, 从后面往前开始遍历,直到发现 某一组的3个数里面有一个不是0,那么遍历结束,返回这一组以前的所有数字对于上例,去掉 最后3组最后9个0之后, 结果为 010003另外再举个例子
000010003000000000, 去掉 最后3组最后9个0之后, 结果为 000010003最后, 其实对于到底每几个 0 为一组,最好还可以随意设置,比如,我可以要 4个0 为一组,可以要5个零为一组。
这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!
现在工作中,遇到一个问题,求一正则表达式!需求:
010003000000000对于上面的一个字符窜,每3个 0 为一组, 从后面往前开始遍历,直到发现 某一组的3个数里面有一个不是0,那么遍历结束,返回这一组以前的所有数字对于上例,去掉 最后3组最后9个0之后, 结果为 010003另外再举个例子
000010003000000000, 去掉 最后3组最后9个0之后, 结果为 000010003最后, 其实对于到底每几个 0 为一组,最好还可以随意设置,比如,我可以要 4个0 为一组,可以要5个零为一组。
这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!
import java.util.regex.Matcher;public class Test
{
public String subtail(String str,int parm){
int len = str.length();
String regex = "[0]{"+parm+"}";
if(len<=parm){
return str;
}
boolean b = false;
do{
if(len<=parm){
return str;
}
String temp = str.substring((len-parm));
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(temp);
b = m.matches();
String what = Boolean.valueOf(b).toString();
if("true".equals(what)){
len = len - parm;
str = str.substring(0,len);
}else{
return str;
}
}while(b);
return str;
}
public static void main(String[] args){
Test t = new Test();
String result = t.subtail("020",5);
System.out.println(result);
}
};
((0{"+N+"})*)$
*/
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
为啥我运行你那正则的时候,抛运行期的异常--PatternSyntaxException啊?
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
这个case不需要考虑,业务可以保证不会全0
"((0{ "+N+ "})*)$ "
^ ^
有两个空格,删掉就好
问题找到了,直接从这copy下去的正则里面有空格
改成((0{"+N+"})*)$就没问题了还有那个数字最后一位也是空格,所以匹配的时候也没成功,哈哈to lz:
lyhk21的那个式子好用,哈哈
我知道怎么回事了,没有"禁用UBB",导致网页自动帮我添加了空格
*/
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
晕,刚才用的是FireFox,不能插入Java Code,再试一次[code=Java]
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}