我尝试定义一些RegularExpression时无效的转义序列错误

时间:2013-12-05 21:27:39

标签: 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没有编译并且说我Invalid escape sequence (valid ones are \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])+)\])";

3 个答案:

答案 0 :(得分:5)

因为Java将\视为字符串文字中的转义字符,所以您需要在模式中转义它们,因此它们将被解释为正则表达式的一部分(而不是正常的转义字符):< / p>

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]+))";

答案 1 :(得分:2)

你需要转义反斜杠:即写\\而不是\

\在字符串文字中用于特殊字符:例如\t是一个标签。因此,如果您需要实际的反斜杠,则需要编写\\

答案 2 :(得分:0)

如果Java使用C ++样式字符串引用,则需要对双引号和转义进行转义(或三字符,这可能是MS特定的)。

如果是这样,这些应该是新的字符串。其中一个正则表达已经“逃脱了。” 最后一个正则表达式有一些引号。 我使用 RegexFormat 对每个进行格式化检查,然后将它们打包成C风格的字符串。

 passwordPattern="((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
 imageFileExtensionPattern="([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)"
 HTMLtagPattern="<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
 ExtractHTMLlinkPattern="\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
 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])+)\\])";


 (?:
      [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] 
           )+
      )
      \]
 )