Java模式正则表达式
当我尝试时:Java模式正则表达式,java,regex,Java,Regex,当我尝试时: Pattern p = Pattern.compile("[,.s;:{}/[]<>?`~!@#$%^&*()_+=]"); Pattern p=Pattern.compile(“[,.s;:{}/[]?`~!@$%^&*()”; 我的程序出错了。为什么不这样呢?这个正则表达式不会编译,因为在Java中,当在字符类中使用方括号时,需要对其进行转义: Pattern p = Pattern.compile("[,.s;:{}/\\[\\]<>?`~
Pattern p = Pattern.compile("[,.s;:{}/[]<>?`~!@#$%^&*()_+=]");
Pattern p=Pattern.compile(“[,.s;:{}/[]?`~!@$%^&*()”;
我的程序出错了。为什么不这样呢?这个正则表达式不会编译,因为在Java中,当在字符类中使用方括号时,需要对其进行转义:
Pattern p = Pattern.compile("[,.s;:{}/\\[\\]<>?`~!@#$%^&*()_+=]");
^^^^^^
示例取自文档。此正则表达式不会编译,因为在Java中,在字符类中使用方括号时,需要对其进行转义:
Pattern p = Pattern.compile("[,.s;:{}/\\[\\]<>?`~!@#$%^&*()_+=]");
^^^^^^
示例取自文档。这是正确的正则表达式:
Pattern p = Pattern.compile("[,.s;:{}/\\[\\]<>?`~!@#$%^&*()_+=]");
只有[
需要转义
]
如果位于字符类的第一个位置,则可以避免转义。这是正确的正则表达式:
Pattern p = Pattern.compile("[,.s;:{}/\\[\\]<>?`~!@#$%^&*()_+=]");
只有[
需要转义
]
如果它位于字符类的第一个位置,则可以避免转义。您需要转义特殊字符,如[、]、+、(,)等。我不是100%确定,但您可以使用\Q和\E告诉正则表达式将特殊字符视为文本
例如:
Pattern p=Pattern.compile(“[\\Q.s;:{}/[]?`~!@$%^&*()”[u+=\\ E]);
请参阅中的引号部分,您需要转义特殊字符,如[,],+,(,)等。我不是100%确定,但您可以使用\Q和\E告诉正则表达式将特殊字符视为文字 例如:
Pattern p=Pattern.compile(“[\\Q.s;:{}/[]?`~!@$%^&*()”[u+=\\ E]);
如前所述,请参见中的引号部分,您必须跳过特殊字符。。。 为此,我建议您使用
模式.quote
方法(请参阅作为参考)
String s=Pattern.quote(“[,.s;:{}/[]?`~!@$%^&*()”;
模式p=模式编译;
如前所述,您必须跳过特殊字符。。。
为此,我建议您使用模式.quote
方法(请参阅作为参考)
String s=Pattern.quote(“[,.s;:{}/[]?`~!@$%^&*()”;
模式p=模式编译;
您所说的崩溃是指它正在引发异常?那个异常是怎么说的?也许你错过了一个导入?你说的崩溃是指它抛出了一个异常?那个例外说明了什么?也许你错过了一个导入?为什么是双转义?@AprilRandolph,因为反斜杠也需要转义@AprilRandolph我编辑了我的答案以涵盖您的评论。@AprilRandolph如果这个问题解决了您的问题,您应该通过单击左侧的勾号来接受它:)谢谢。为什么要双转义?@AprilRandolph因为反斜杠也需要转义@AprilRandolph我已经编辑了我的答案以覆盖你的评论。@AprilRandolph如果这个问题解决了你的问题,那么你应该通过点击左边的勾号来接受它:)谢谢。另外,因为你使用的是引号[\\Q\\\[\\\]\\E]
转义[
和]
是不正确的,因为它会使\,[,\,]
character类和OP中的文本不希望包含\在此类中。嗯。。。似乎我复制/粘贴了另一个答案的正则表达式,而不是原始问题的正则表达式。已修复。另外,由于您正在使用引号[\\Q\\[\\]\\E]
转义[
和]
是不正确的,因为它将使\,[,,,]
字符类中的文字和OP不希望在此类中包含\。嗯。。。似乎我复制/粘贴了另一个答案的正则表达式,而不是原始问题的正则表达式。固定的。
Pattern p = Pattern.compile("[\\Q,.s;:{}/[]<>?`~!@#$%^&*()_+=\\E]");
String s = Pattern.quote("[,.s;:{}/[]<>?`~!@#$%^&*()_+=]");
Pattern p = Pattern.compile(s);