当前位置:  开发笔记 > 编程语言 > 正文

Java Regex双反斜杠转义特殊字符

如何解决《JavaRegex双反斜杠转义特殊字符》经验,为你挑选了1个好方法。

我有一个正则表达式,我已经使用RegexPal进行了测试,它在RegexPal中按预期工作,但在Java中没有预期的效果.我知道这是由于字符被转义的方式,但我看不出如何绕过它.

我的表达是:Pattern.compile("((([a-zA-Z0-9])([a-zA-Z0-9 ]*)\\?)+)").我在这里要做的是决定某个东西是否是目录的有效相对路径(现在只在Windows中),所以它应匹配"Hello","Hello World","Hello\World"之类的东西. ,"Hello World\foo\bar"等.相反,它只会在目录名称包含问号时匹配,例如."文档?".我认为这是因为在我的表达式中,双反斜杠必须在问号量词之前,但是当反斜杠被转义时所看到的compile()\?它所假设的是一个转义的问号.

反正是否确保问号没有被转义?我试过在双反斜杠周围插入括号,但它只是逃避了右括号并导致"未闭合组错误"



1> sp00m..:

使用4个反斜杠:

Pattern.compile("((([a-zA-Z0-9])([a-zA-Z0-9 ]*)\\\\?)+)")
                                               ^^^^

    你需要匹配一个反斜杠char : \.

    反斜线为正则表达式一个特殊字符(用于预定义类如\d例如),这需要由另一个反斜杠转义:\\.

    由于Java使用字符串文字作为regexp,反斜杠也是字符串文字的特殊字符(例如用于换行符char \n),每个反斜杠需要通过另一个反斜杠进行转义:\\\\.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有