Java: получить все строки с помощью Regex - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь получить все строки из сценария JavaScript, я создал код, но он не перехватывает все, он пропускает некоторые

Мой код

String Strings;
    public String GetStrings(String str){
        try{
        String Str= str;
         Strings = "";
         while(true){
            Pattern pattern = Pattern.compile("('|\")");    
            Matcher matcher = pattern.matcher(Str);    
            if(matcher.find()){
                Pattern pattern1 = Pattern.compile("(" + matcher.group(1) + "[^" + matcher.group(1) + "]*" + matcher.group(1) + ")");    
                Matcher matcher1 = pattern1.matcher(Str);    
                if(matcher1.find()){
                    Strings += "|" + matcher1.group(1) + "|";
                    Str =  Str.replace(matcher1.group(1)," ");
                }
                }else{
                    break;
                    }
        }
        }catch(Exception err){return err.toString(); }
        return Strings;
        }

Вход

var A="&";var B="(";var D="[]";var X="'";var W='&';var Q='';var STR="'";var Q="'******'";var G="^";var F="...";var T='$';var wm = "()"
console.log(A + B + D + "^" + wm + '#');

Выход

|"&"||"("||"[]"||"'"||'&'||''||"'******'"||"^"||"..."||'$'||"()"||'#'|

Как видите, не все строки записаны, некоторые не отображаются, если у кого-то есть решение или можно указать проблему, пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Вам необходимо использовать следующее регулярное выражение:

(\"(.*?)\")|(\'(.*?)\')

пример:

public String getStrings(String str){
   String regex = "(\\\"(.*?)\\\")|(\\'(.*?)\\')";

   Pattern pattern = Pattern.compile(regex);
   Matcher matcher = pattern.matcher(str);

   String output = "";
   while (matcher.find()){
       output = output+"|"+matcher.group(0)+"|";
   }

   return output;

}

Выход:

|"&"||"("||"[]"||"'"||'&'||''||"'"||"'******'"||"^"||"..."||'$'||"()"||"^"||'#'|

Regex Объяснение

0 голосов
/ 15 октября 2019

Входной и ожидаемый выходные данные не совпадают, но согласно тому, что я понял, это

public String GetStrings(String str){    
       StringBuffer b = new StringBuffer();
       for (int i = 0; i < str.length(); ++i) {

            char ch = str.charAt(i);

            if (Character.isWhitespace(ch))
                b.append("\\s");
            else if (Character.isDigit(ch))
                b.append("\\d");
            else if (Character.isUpperCase(ch))
                b.append("A-Z");
            else if (Character.isLowerCase(ch))
                b.append("a-z");
        }
                b.append("||");

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...