正则表达式匹配正则表达式标志“ismU”

时间:2018-02-06 21:27:43

标签: regex

我正在尝试编写一个正则表达式来匹配“ismU”标志。 要求如下: 1)每个角色最多只出现一次 2)角色可以按任何顺序出现:“是”,“si”,“mi”,“smi”,“Uims”

要求1)导致“?”量词,2)导致“|”交替。

“我?| U |?米|?的?”只适用于1的长度。

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

测试用例为True:[“i”,“im”,“mi”,“Ums”,“iUsm”]; 测试用例为假:[“I”,“mm”]。

1 个答案:

答案 0 :(得分:0)

你可以使用负前瞻断言来测试一个角色是否重复(任何地方)。要表达这一点,您需要一个捕获组(.)以及对捕获\1的引用。

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

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

但是,为了提高效率(特别是避免在长字符串上测试.*(.).*\1),您还可以编写如下模式:

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