一个正在表达式:(例) A*B ,
一个用来匹配的字符串:(例) 123AB75942A8506B4213
我正通过 A*B这个正在表达式来取到AB和A8506B,
求一个方法:
public String[] getStrExpression("A*B","123AB75942A8506B4213"){
      //do something
      return string[];
}
数组中的值应该是AB和A8506B;另:返回的字符串中不能有AB75942A8506B。(附加,如果只解答上题也给分)。

解决方案 »

  1.   


    public String[] getStrExpression(String regex,String changeStr){ 
          final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        Matcher m = pattern.matcher(changeStr);
        List<String> list = new ArrayList<String>();
        while (m.find()) {
          list.add(m.group(2));
        }
        return list.toArray(new String[0]);
      

  2.   


    我的JDK是1.4的该了一下
    public static String[] getStrExpression(String regex,String changeStr){ 
          final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
                Matcher m = pattern.matcher(changeStr);
                List list = new ArrayList();
                while (m.find()) {
                 String str= m.group(2);
                  list.add(str);
                }
                return (String[]) list.toArray(new String[0]);
    }报错 :怎么回事
    Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 2
    at java.util.regex.Matcher.group(Unknown Source)
    at com.sinosoft.searchutils.SearchString1.getStrExpression(SearchString1.java:43)
    at com.sinosoft.searchutils.SearchString1.main(SearchString1.java:50)
      

  3.   

     //为什么非用A*B?换一个正则表达式行不?
    public String[] getString(String str){
    List<String> list=new LinkedList<String>();
     String regex="A\\w*?B";
     Matcher m=Pattern.compile(regex).matcher(str);
     while(m.find()){
     list.add(m.group());
     }
     String []rtn=new String[list.size()];
     list.toArray(rtn);
     return rtn;
    }
      

  4.   

    比较基础的题
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class Test {
    public static String[] getStrExpression(String regex,String str){ 

    List<String> temp = new ArrayList<String>();
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(str);
    while(m.find()){
    temp.add(m.group());
    }
    String[] result=new String[temp.size()];
    temp.toArray(result);
    return result;

    public static void main(String[] args){
    String regex="A.*?B";
    String str="123AB75942A8506B4213";
    String[] result=getStrExpression(regex,str);
    for(String s:result){
    System.out.println(s);
    }
    }
    }
      

  5.   

    A后不能再出现A,B前不能再出现B
    ^AB|A.*(1!A).*B|.*(1!<B).*B$
      

  6.   

    随便写了一个,看看对你有没有帮助;
    public static void main(String[] args){
    String aim="123AB75942A8506B4213";
    Pattern p = Pattern.compile("[A][0-9]*[B]");
    Matcher m = p.matcher(aim);
    StringBuffer temp = new StringBuffer();
    while (m.find()) {
      temp.append(aim.substring(m.start(),m.end()));
      temp.append("\r\n");
    }
    //返回以换行分割的字符串;如果要求返回String数组,在处理一下就可以了,
    System.out.println(temp.toString());

    }其实返回一个Array也是一样的。
    你写的Regex:A*B表示以多个或者0个A打头且以B结尾的字符串,并不能匹配你的目标字串