Android 模式regex忽略引号和单引号的反斜杠
我用的是下面的模式Android 模式regex忽略引号和单引号的反斜杠,android,regex,Android,Regex,我用的是下面的模式 public static final String DEGREE_SIGN = "°"; public static final Pattern DMS = Pattern.compile("^\\s*(-?\\d{1,3})\\s*" + DEGREE_SIGN + "+\\s*(\\d{1,2})\\s*\'" + "+\\s*(\\d{1,2}\\.+?\\d{0,6})\\s*\"+$"); 并尝试使用字符串作为“
public static final String DEGREE_SIGN = "°";
public static final Pattern DMS = Pattern.compile("^\\s*(-?\\d{1,3})\\s*" + DEGREE_SIGN
+ "+\\s*(\\d{1,2})\\s*\'"
+ "+\\s*(\\d{1,2}\\.+?\\d{0,6})\\s*\"+$");
并尝试使用字符串作为“38°53'23\”
但是它失败了。在调试中,我可以看到正则表达式
java.util.regex.Matcher[pattern=^\s*(-?\d{1,3})\s*°+\s*(\d{1,2})\s*'+\s*(\d{1,2}\.+?\d{0,6})\s*"+$ region=0,11 lastmatch=]
它似乎正在删除\
前面的'
和“
如何修复此问题
公共静态最终模式DMS=
模式编译(“^\s*(?\d{1,3})\s*”+\s*(\d{1,2})\s*\'+\s*(\d{1,2}\.?\d{1,4}?\s*\“+$”)
在java中,以下是转义字符:-
- \'此时在文本中插入一个单引号字符
- \“此时在文本中插入双引号字符
- \此时在文本中插入反斜杠字符
因此,为了在java中的字符串中使用\'和\',我们需要分别使用\\'和\ \'对这些字符进行转义。您需要在正则表达式中更改此部分:
\\.+?
到
基本上,您试图使点成为可选的,而使用\.+?
只会使它成为一个延迟匹配1+次
这是因为,反斜杠充当转义字符->也请检查-@Deepakkaku是的,我知道它是转义字符,这就是它被放置在那里的原因。它不应该解决问题吗?您建议的修复方法是什么?“->”前面似乎要删除“->”因为它是转义字符,如果您需要反斜杠,请使用\\\Yes我忘记删除+,并认为是引号导致了问题。谢谢,我想这样做,它将检测1-3位数字,如果小数点,那么它应该检查多达6位。我将如何修改这一点,请您提供38°53'23\“或38°53'23.02342\“应通过38°53'23.02342a\”的示例输入,如果失败,您当前的正则表达式已匹配
38°53'23\”
和38°53'23.02342\
并拒绝8°53'23.02342a\”
\\.+?
\\?