不包含非字母数字字符的行的正则表达式

时间:2018-09-18 22:33:27

标签: java regex

我想使用正则表达式进行匹配,例如下面的字符串:

  

发现-CashBack Bonus&CitiTYP®

-&®之类的所有非字母数字字符不能一个接一个地出现。

对此进行了尝试:^[A-Za-z0-9 ]+[-]*[A-Za-z0-9 ]+[&]*[A-Za-z0-9 ]+[®]*[A-Za-z0-9 ]+$

1 个答案:

答案 0 :(得分:0)

  

对此进行了尝试:^[A-Za-z0-9 ]+[-]*[A-Za-z0-9 ]+[&]*[A-Za-z0-9 ]+[®]*[A-Za-z0-9 ]+$

这不匹配,因为结尾的[A-Za-z0-9 ]+$在行尾需要1个字符[A-Za-z0-9 ],而字符串的结尾是®

要匹配行而不使用非字母数字字符(空格除外),可以使用正则表达式:

^.?([A-Za-z0-9 ]++.?)*$

这本质上是

  • [A-Za-z0-9 ]++-一系列字母数字字符或空格,后跟
  • .?-最多多一个字符,
  • (…)*-以上情况发生了多次。

开头的^.?允许在字符串的开头添加一个额外的字符。为了避免possessive quantifier,使用catastrophic backtracking ++很重要。