Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Android 模式regex忽略引号和单引号的反斜杠_Android_Regex - Fatal编程技术网

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\”
\\.+?
\\?