正则表达式模式匹配java

时间:2015-10-19 04:23:35

标签: java regex pattern-matching

我需要为字符串设置正则表达式: Created ID @DBDOYEF has problems

单词@DBDOYEF可能包含a-z,A-Z,0-9和所有特殊字符,例如

~!#$%^&*()_+{}:"<>?,./\.

请帮我为这个单词创建一个模式。我用了

Created ID \\b[A-Z][0-9][\\//+-@#$%^~&*!():]+\\b has problems

为此,但在许多情况下都失败了。

2 个答案:

答案 0 :(得分:2)

你的问题是

  • \b仅匹配&#34;字符&#34; (字母/数字/下划线)和非单词字符(或字符串的开头/结尾)。因此,您需要一种不同的方法来确定您的匹配已结束。由于您的标识符之前和之后已经有空格,因此您已经有了这样的方法,可以删除\b
  • -是字符类中的元字符,需要放在字符类的开头或结尾处,因此它不会被解释为范围标记(如A-Z中所示)
  • 您的标识符以@开头,但不是[A-Z]的一部分,因此无法匹配。您可能希望(可选)与@开始匹配。
  • 显然,标识符不需要位置2的数字并且允许位置1之后的字母,因此您应该将三个字符类合并为两个(假设第一个字母需要是字母或数字)。

那会给你

Created ID @?[A-Z0-9][-A-Z0-9\\/+@#$%^~&*!():]+ has problems

如果-(X@Q)之类的ID也有效,您可以将其简化为

Created ID [-A-Z0-9\\/+@#$%^~&*!():]+ has problems

答案 1 :(得分:0)

  

它可能会也可能不会以@开头。有时它以:或A-Z或a-z或0-9

开头

您正在尝试[A-Z][0-9][\\//+-@#$%^~&*!():]+,其中需要 1 字母,然后是 1 数字,后跟任何标点符号。相反,对所有允许的字符使用相同的character class

<强>正则表达式

Created ID [@A-Za-z0-9~!#$%^&*()_+\-{}:\"<>?,./]+
  • [@A-Za-z0-9~!#$%^&*()_+\-{}:\"<>?,./]+随时匹配character class中的任何字符。

regex101 demo