Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助在Java中创建正则表达式吗_Java_Regex - Fatal编程技术网

需要帮助在Java中创建正则表达式吗

需要帮助在Java中创建正则表达式吗,java,regex,Java,Regex,我正在尝试对字符串应用正则表达式,以获得以下格式的输出 输入字符串: params=Param1{index}~[Value1|Value2|....]^Param2~[Value1|Value2|....] 输出应为Map 例如 代码: 她就是我要做的代码 String textPatt = "params"; String key = textPatt.replace("/[\\[]/", "\\[").replace("/[\\]]/", "\\]"); String pattern =

我正在尝试对字符串应用正则表达式,以获得以下格式的输出

输入字符串:

params=Param1{index}~[Value1|Value2|....]^Param2~[Value1|Value2|....]
输出应为
Map
例如

代码:
她就是我要做的代码

String textPatt = "params";
String key = textPatt.replace("/[\\[]/", "\\[").replace("/[\\]]/", "\\]");
String pattern = new String("[\\?&]" + key + "=([^&#]*)");
 Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(masterUrl);
List<String> paramList = new ArrayList<String>();
if (m.find()) {
String param = m.group();

if(param != null){
    String[] multiParamArr  = null;
    if(param.indexOf("^") != -1){
        multiParamArr = param.split("\\^");


    }else{
        multiParamArr = new String[1];
        multiParamArr[0] = param;
    }
    if(multiParamArr != null && multiParamArr .length > 0){


            Pattern refinePattern = null;
            Matcher refineMatcher = null;
            String paramKeyy = null;
            String paramVal = null;

            HashMap<String,List<String>> ParamMap = new HashMap<String,List<String>>();
             List<String list = new ArrayList<String>();
            for(int i=0;i<multiParamArr.length;i++){
                String[] multiParam = null;
                 String patternKey = "^[^\\~]*";
                 refinePattern = Pattern.compile(patternKey);
                 refineMatcher = refinePattern.matcher(multiRefineArr[i]);
                 if(refineMatcher.find()){
                 paramKey = refineMatcher.group();
                  if(paramKey.indexOf("=") !=-1){
                      patternKey  = patternKey.substring(patternKey.indexOf("=")+1);
                  }
                  if(paramKey.indexOf("{") !=-1){
                      patternKey  = patternKey.substring(patternKey.indexOf("=")+1,patternKey.indexOf("{"));
                  }
                 }
                    if(multiParamArr[i].indexOf("|") != -1){
                         multiParam = multiParamArr[i].split("\\|");
                         int startIndex;
                         int endIndex;

                        for(int j=0;j<multiParam.length;j++){
                            startIndex = 0;
                            endIndex = 0;
                            ifmultiParamArr[j].indexOf("[") > -1){
                                 startIndex = multiParamArr[j].indexOf("[")+1;
                            }
                            ifmultiParamArr[j].indexOf("]") > -1){
                                endIndex = multiParamArr[j].indexOf("]");

                            }else{
                                endIndex = multiParamArr[j].length();
                            }
                        paramVal = multiParamArr[j].substring(startIndex,endIndex);

                        }
                    }else{
                        paramVal = multiParamArr[i].substring(multiParamArr[i].indexOfmultiParamArr[i].indexOf("]"));

                    }
                    list.add(paramVal);

                }
   paramMap.put((paramKey,list);
    }


}
String textPatt=“params”;
String key=textPatt.replace(“/[\\[]”,“\\[”)。replace(“/[\\]]”,“\\]”);
字符串模式=新字符串(“[\?&]”+key+“=([^&]*)”;
Pattern p=Pattern.compile(Pattern);
Matcher m=p.Matcher(masterUrl);
List paramList=new ArrayList();
if(m.find()){
字符串参数=m.group();
如果(参数!=null){
字符串[]multiParamArr=null;
if(参数indexOf(“^”)!=-1){
multiParamArr=param.split(\\^);
}否则{
multiParamArr=新字符串[1];
multiParamArr[0]=参数;
}
if(multiParamArr!=null&&multiParamArr.length>0){
Pattern=null;
匹配器优化匹配器=null;
字符串paramKeyy=null;
字符串paramVal=null;
HashMap ParamMap=新HashMap();

List不需要创建复杂的正则表达式并对其进行维护,您可以通过以下几个步骤以更简单、更易读的方式完成:

  • ^
  • 现在您有了一个字符串数组,每个字符串都包含一个参数及其值
  • ~
    上拆分每个字符串-您将得到一个包含两个字符串的数组,从第一个字符串中提取
    Param1
    Param2
    等)
  • 从第二个开始,您可以通过在上拆分来提取值列表
    |
    (管道)

  • 显示您解决此问题的尝试。请解释您已经尝试了什么,尝试时发生了什么,以及这与您希望发生的情况有何不同。她就是我正在尝试执行的代码。我添加了我的代码。我希望通过拆分和子字符串函数的正则表达式索引来实现这一点
    String textPatt = "params";
    String key = textPatt.replace("/[\\[]/", "\\[").replace("/[\\]]/", "\\]");
    String pattern = new String("[\\?&]" + key + "=([^&#]*)");
     Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(masterUrl);
    List<String> paramList = new ArrayList<String>();
    if (m.find()) {
    String param = m.group();
    
    if(param != null){
        String[] multiParamArr  = null;
        if(param.indexOf("^") != -1){
            multiParamArr = param.split("\\^");
    
    
        }else{
            multiParamArr = new String[1];
            multiParamArr[0] = param;
        }
        if(multiParamArr != null && multiParamArr .length > 0){
    
    
                Pattern refinePattern = null;
                Matcher refineMatcher = null;
                String paramKeyy = null;
                String paramVal = null;
    
                HashMap<String,List<String>> ParamMap = new HashMap<String,List<String>>();
                 List<String list = new ArrayList<String>();
                for(int i=0;i<multiParamArr.length;i++){
                    String[] multiParam = null;
                     String patternKey = "^[^\\~]*";
                     refinePattern = Pattern.compile(patternKey);
                     refineMatcher = refinePattern.matcher(multiRefineArr[i]);
                     if(refineMatcher.find()){
                     paramKey = refineMatcher.group();
                      if(paramKey.indexOf("=") !=-1){
                          patternKey  = patternKey.substring(patternKey.indexOf("=")+1);
                      }
                      if(paramKey.indexOf("{") !=-1){
                          patternKey  = patternKey.substring(patternKey.indexOf("=")+1,patternKey.indexOf("{"));
                      }
                     }
                        if(multiParamArr[i].indexOf("|") != -1){
                             multiParam = multiParamArr[i].split("\\|");
                             int startIndex;
                             int endIndex;
    
                            for(int j=0;j<multiParam.length;j++){
                                startIndex = 0;
                                endIndex = 0;
                                ifmultiParamArr[j].indexOf("[") > -1){
                                     startIndex = multiParamArr[j].indexOf("[")+1;
                                }
                                ifmultiParamArr[j].indexOf("]") > -1){
                                    endIndex = multiParamArr[j].indexOf("]");
    
                                }else{
                                    endIndex = multiParamArr[j].length();
                                }
                            paramVal = multiParamArr[j].substring(startIndex,endIndex);
    
                            }
                        }else{
                            paramVal = multiParamArr[i].substring(multiParamArr[i].indexOfmultiParamArr[i].indexOf("]"));
    
                        }
                        list.add(paramVal);
    
                    }
       paramMap.put((paramKey,list);
        }
    
    
    }