正则表达式以匹配正则表达式标志"ismU"



我试图编写一个正则表达式以匹配" ismu"标志。要求如下:1(每个角色最多只出现一次2(角色可以按任何顺序显示:" is"," si"," mi"," smi"," uims"

要求1(导致"?"量词和2(导致" |"交替。

" i?| u?| m?| s?"只能适用于1的长度。

" [imsu] {1,4}"可以适用于4的长度,但它接受重复的标志(例如," ii"(

测试用例为真:[" i"," im"," mi"," ums"," iusm"];测试用例为false:[" i"," mm"]。

您可以使用负面的lookahead断言来测试是否重复字符(任何地方(。为了表达这一点,您需要一个捕获组(.)和对捕获1的引用。

^(?!.*(.).*1)[imsU]+$

请注意,您不必使用比+更精确的量词,因为LookAhead已经检查了两次相同的字符,并且字符类中只有四个不同的字符。

但是,要提高效率(特别是要避免在长字符串上测试.*(.).*1(,您也可以写下这样的模式:

^(?!.{0,2}(.).{0,2}1)[imsU]{1,4}$

最新更新