我想使用正则表达式进行匹配,例如下面的字符串:
发现-CashBack Bonus&CitiTYP®
-
,&
和®
之类的所有非字母数字字符不能一个接一个地出现。
对此进行了尝试:^[A-Za-z0-9 ]+[-]*[A-Za-z0-9 ]+[&]*[A-Za-z0-9 ]+[®]*[A-Za-z0-9 ]+$
答案 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 ++
很重要。