Javascript正则表达式到Java正则表达式

Javascript正则表达式到Java正则表达式,java,android,regex,Java,Android,Regex,我在Javascript中有以下正则表达式: /^(\{?(08)([3-9]){1}-([0-9]){7,7}}?$/ 它匹配的数字如下: 087-1234893083-2839283086-4283944等 我已将其转换为Java(Android),如下所示: public boolean isValidMobilePhone(String phone){ boolean returnObj=false; Pattern p = Pattern.compile

我在Javascript中有以下正则表达式:

/^(\{?(08)([3-9]){1}-([0-9]){7,7}}?$/

它匹配的数字如下:

087-1234893083-2839283086-4283944等

我已将其转换为Java(Android),如下所示:

public boolean isValidMobilePhone(String phone){
        boolean returnObj=false;
        Pattern p = Pattern.compile("^({?(08)([3-9]){1}-([0-9]){7,7}}?)$");
        Matcher m = p.matcher(phone);
        boolean matchFound = m.matches();
        if (matchFound){
            returnObj=true;
        }
        return returnObj;
    }
以下是我得到的错误:

07-12 23:26:10.478:错误/AndroidRuntime(11464): java.util.regex.PatternSyntaxException:语法错误 索引3附近的U_REGEX_RULE_语法:07-12 23:26:10.478: 错误/AndroidRuntime(11464):^({?(08)([3-9]){1}-([0-9]){7,7}?$07-12 23:26:10.478:错误/AndroidRuntime(11464):^07-12 23:26:10.478: 错误/AndroidRuntime(11464):在 com.ibm.icu4jni.regex.NativeRegEx.open(本机方法)

我想不出第三个“?”字怎么了!我尝试用“\”来转义它,但无法编译


有人能帮我吗?

逃离
{
,很可能是靠近末尾的
}

Pattern p = Pattern.compile("^(\\{?(08)([3-9]){1}-([0-9]){7,7}\\}?)$");

{
字符是用于重复的特殊字符(例如,
a{3,5}
重复
a
3-5次),需要在Java正则表达式中转义。

只需删除分隔符即可

对于javascript:

var  pattern = /^(\{?(08)([3-9]){1}-([0-9]){7,7}\}?)$/;
对于Java:

string pattern = "^(\{?(08)([3-9]){1}-([0-9]){7,7}\}?)$"; 
使用以下命令:

Pattern.compile("^08[3-9]-([0-9]){7}$");
甚至:

Pattern.compile("08[3-9]-([0-9]){7}");

你需要两个
\
来转义它。公平地说,如果在
{n,n}
格式中没有使用,一些正则表达式引擎会按照字面上的意思使用
{n,n}
格式。对不起,我睡着了!我现在正在工作,但稍后会回来…我会向他们报告。嗨,当我使用该模式时,我收到以下错误:
无效的转义序列(有效的是\b\t\n\f\r\“\'\\)
没问题。下次使用正则表达式时,您可能希望获得正则表达式备忘单。也可以尝试使用baregrep。