如何在正则表达式中使用“[”和“]”

时间:2017-06-02 15:12:03

标签: java regex string

我的Java程序中有这个正则表达式

if(Function.match(strAddress, "[~|+_=!$%^*@`(){}:;\"'<>?,]++"))
--do something

我想在正则表达式中加入[和]。我尝试使用转义字符,但没有去。如何将这些字符添加到我的正则表达式?

使用此示例

public class test {

    public static void main(String[] args) {
        String text = "asda[]";
        System.out.println("Test: "+ text.matches("[~|+_=!$%^*@`(){}:;\"'<>?,\\[\\]]++"));
    }
}

我试过\ [和[,它不能正常工作

上一次运行上面的代码给出了输出Test: false

1 个答案:

答案 0 :(得分:2)

尝试使用:

"[~|+_=!$%^*@`(){}:;\"'<>?,\\[\\]]++"
//-------------------------^^-^^

你必须用\\

来逃避这两个角色

修改

当然它只匹配这组字符

~|+_=!$%^*@`(){}:;\"'<>?,[]

但在您的示例中,您使用的是字母,因此您必须包含a-z表示较低字符,A-Z表示匹配较高字符:

[a-z~|+_=!$%^*@`(){}:;\"'<>?,\\[\\]]++
 ^^^-------------------------------

现在举个例子:

String text = "asda[]";
System.out.println("Test: " + text.matches("[a-z~|+_=!$%^*@`(){}:;\"'<>?,\\[\\]]++"));

它返回:

Test: true

修改

您可以使用此解决方案:

[a-z]*[~|+_=!$%^*@`(){}:;\"'<>?,\[\]]++

会给你:

abc[]  -> true
[]     -> true
abc    -> false
[]abc  -> false