我正在尝试定义一些正则表达式
String passwordPattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
String imageFileExtensionPattern="([^\s]+(\.(?i)(jpg|png|gif|bmp))$)";
String HTMLtagPattern="<("[^"]*"|'[^']*'|[^'">])*>";
String ExtractHTMLlinkPattern="\s*(?i)href\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+))";
但是 Eclipse 不会编译并告诉我无效的转义序列(有效的转义序列为\b\t\n\f\r\"\'\\)
也使用官方 W3C 电子邮件正则表达式 (RFC2822) 得到相同的错误
String emailPattern="(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|”(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*”)@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])";
最佳答案
由于 Java 将 \
视为字符串文字中的转义字符,因此您需要在模式中对它们进行转义,因此它们将被解释为正则表达式的一部分(而不是正常的转义字符) ):
String passwordPattern="((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
String imageFileExtensionPattern="([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)";
String HTMLtagPattern="<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
String ExtractHTMLlinkPattern="\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
关于java - 当我尝试定义某些正则表达式时出现无效的转义序列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411100/