我有一个我用RegexPal测试的正则表达式,它在RegexPal中按预期工作,但在Java中没有预期的效果。我知道这是由于字符被转义的方式,但我看不出如何绕过它。
我的表达是:Pattern.compile("((([a-zA-Z0-9])([a-zA-Z0-9 ]*)\\?)+)")
。我在这里要做的是决定某个东西是否是目录的有效相对路径(现在只在Windows中),所以它应匹配“Hello”,“Hello World”,“Hello \ World”之类的东西。 ,“Hello World \ foo \ bar”等。相反,它只会在目录名称包含问号时匹配,例如。 “文档?”。我认为这是因为在我的表达式中,双反斜杠必须在问号量词之前,但是当反斜杠被转义时compile()
看到的是\?
,它假定是一个转义的问号
无论如何确保问号没有被转义?我尝试在双反斜杠周围插入括号,但它只是逃避了右括号并导致“未关闭的组错误”
答案 0 :(得分:7)
使用4个反斜杠:
Pattern.compile("((([a-zA-Z0-9])([a-zA-Z0-9 ]*)\\\\?)+)")
^^^^
\
。\d
),需要通过另一个反斜杠进行转义:\\
。\n
),每个反斜杠都需要通过另一个反斜杠进行转义:{{ 1}}。