java - 当我尝试定义某些正则表达式时出现无效的转义序列错误

标签 java android regex

我正在尝试定义一些正则表达式

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/

相关文章:

java - 在 Java 中实例化对象而不将其分配给变量有什么意义?

java - 如何参数化Dockerfile?

java - 如何实现 "animated CollapsingToolbar?"

javascript - 使用文本掩码指令进行正则表达式月份验证

regex - 在正则表达式中间使用插入符号或美元符号是否有意义?

java - 从 GamePanel 调用方法

android - 如何找出Android logcat消息 "Skipped n frames. Too much work on main thread"的原因

android - 如何在TextView中显示带有css样式表的html?

android - 如何将 PictureDrawable 转换为位图

regex - 用于检查捕获组之间的子字的正则表达式