Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
为什么Pattern.compile在android studio和Java SE中的行为不同?_Java_Android_Regex - Fatal编程技术网

为什么Pattern.compile在android studio和Java SE中的行为不同?

为什么Pattern.compile在android studio和Java SE中的行为不同?,java,android,regex,Java,Android,Regex,我需要匹配任意字符串中的hashmap。模式是*(“账户[^}]*?})。* 在中编译为时会引发错误: 05-18 12:06:46.666 4611-4611/com.mlntdrv.mybudgetpulse E/AndroidRuntime: FATAL EXCEPTION: main Process: com.mlntdrv.mybudgetpulse, PID: 4611 java.util.regex.PatternSyntaxException: Syntax er

我需要匹配任意字符串中的hashmap。模式是
*(“账户[^}]*?})。*

在中编译为时会引发错误:

05-18 12:06:46.666 4611-4611/com.mlntdrv.mybudgetpulse E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mlntdrv.mybudgetpulse, PID: 4611
    java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 19:
    .*("accounts[^}]*?}).*
                       ^
        at java.util.regex.Pattern.compileImpl(Native Method)
        at java.util.regex.Pattern.compile(Pattern.java:411)
        at java.util.regex.Pattern.<init>(Pattern.java:394)
        at java.util.regex.Pattern.compile(Pattern.java:381)
        at com.mlntdrv.mybudgetpulse.LoginActivity.extractAccountsFromLoginResponse(LoginActivity.java:127)
        at com.mlntdrv.mybudgetpulse.LoginActivity.access$100(LoginActivity.java:27)
        at com.mlntdrv.mybudgetpulse.LoginActivity$1$1.onResponse(LoginActivity.java:71)
        at com.mlntdrv.mybudgetpulse.LoginActivity$1$1.onResponse(LoginActivity.java:58)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5292)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
        at dalvik.system.NativeStart.main(Native Method)
作为代码:

。。。
私有静态最终字符串模式\u ACCOUNTS=“.*(\”ACCOUNTS[^}]*?})。*”;
...
Pattern regex=Pattern.compile(Pattern\u账户);
Matcher matches=regex.Matcher(loginResponse);
if(匹配.find()){
accounts=g.fromJson(匹配.group(1),accounts.getClass());
}
归还账户;
...
Java SE代码:

public class Main {
    private static final String PATTERN_ACCOUNTS = ".*(\"accounts[^}]*?}).*";

    public static void main(String[] args) {
    // write your code here
        Pattern regex = Pattern.compile(PATTERN_ACCOUNTS);
        Matcher matches = regex.matcher("blabla, \"accounts\":{\"1\":\"main\"}, blabla");

        if (matches.find()) System.out.println(PATTERN_ACCOUNTS + " matches -> " + matches.group(1));
    }
}

为什么它不能在AS中成功编译,但在JavaSE中却可以?我做错什么了吗?

如果你摆脱了大括号,它会起作用吗

private静态最终字符串模式\u ACCOUNTS=“.*(\”ACCOUNTS[^}]*?\})。*”;
Android使用与JavaSE不同的正则表达式引擎,JavaSE需要引用大括号进行文本匹配


更多信息:

尽管它可能很奇特,但它确实奏效了。谢谢!
public class Main {
    private static final String PATTERN_ACCOUNTS = ".*(\"accounts[^}]*?}).*";

    public static void main(String[] args) {
    // write your code here
        Pattern regex = Pattern.compile(PATTERN_ACCOUNTS);
        Matcher matches = regex.matcher("blabla, \"accounts\":{\"1\":\"main\"}, blabla");

        if (matches.find()) System.out.println(PATTERN_ACCOUNTS + " matches -> " + matches.group(1));
    }
}