如何在android中为此编写正则表达式?

时间:2011-12-15 12:03:51

标签: android regex

我有一个带有特殊字符的字符串(数字)。我想搜索一个子串(仅包含数字)&我也想检测起始指数&字符串中匹配子字符串的结束索引。 例如:主字符串:(+ 91)-1231212 1231
要搜索的子字符串: 1212

目前我使用以下代码执行此操作,但代替 1212 ,它搜索 12312 。对于其他情况,它工作正常。

   String sss0 = "1212";
   String  sss1 =  "(+91)-1231212 1231";

    sss0 = sss0.replaceAll("[^\\d]","");

    System.out.println("*************************"+sss0);

    String ptn = "" + sss0.charAt(0);
    for(int jj=0; jj<sss0.length()-1; jj++){

        ptn += "[^" + sss0.charAt(jj) + sss0.charAt(jj+1) + "]*?" + sss0.charAt(jj+1);

    }
         System.out.println("ptn: " + ptn);

    Pattern p300 = Pattern.compile(ptn);

    Matcher m300 = p300.matcher(sss1);

    if(m300.find()){
        System.out.println("start, stop: " + m300.start() + "," + (m300.end()-1 ));
        System.out.println("substring: " + sss1.substring(m300.start(), m300.end()));
    }

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:0)

试试这个:

int start = sss1.indexOf(sss0);
if(start != -1) {  
   System.out.println("Start : " + start);
   System.out.println("End : " + start.length()); //maybe add +1 here depending on what you mean by end index.
}

你也可以将它放在循环中以查找子串的所有出现。

答案 1 :(得分:0)

伪代码:

pattern = ""
foreach char c in sss0:
    pattern += c + "[^0-9]*"

found_substring = match(pattern, sss1)

这个想法是用您愿意跳过的模式散布您正在寻找的文字字符。