Javascript正则表达式到Java正则表达式
我在Javascript中有以下正则表达式: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
/^(\{?(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。