我需要编写一个正则表达式,它可以检测一个只包含字符 x、y 和 z 的字符串,但是这些字符与它们的邻居不同。
这是一个例子
xyzxzyz = 通过
xyxyxyx = 通过
xxyzxz = 失败(重复 x)
zzzxxzz = 失败(相邻字符重复)
我认为这会起作用 ((x|y|z)?)*,但它似乎不起作用。有什么建议么?
编辑
请注意,我正在寻找一个不允许向前看或向后看操作的答案。唯一允许的操作是交替、连接、分组和闭包
我需要编写一个正则表达式,它可以检测一个只包含字符 x、y 和 z 的字符串,但是这些字符与它们的邻居不同。
这是一个例子
xyzxzyz = 通过
xyxyxyx = 通过
xxyzxz = 失败(重复 x)
zzzxxzz = 失败(相邻字符重复)
我认为这会起作用 ((x|y|z)?)*,但它似乎不起作用。有什么建议么?
编辑
请注意,我正在寻找一个不允许向前看或向后看操作的答案。唯一允许的操作是交替、连接、分组和闭包
这应该做你想要的:
^(?!.*(.)\1)[xyz]*$
(显然,仅在具有前瞻功能的引擎上)
内容本身由第二部分处理:([xyz]*
任意数量的 x、y 或 z 字符)。锚^...$
在这里是说它必须是整个字符串。并且特殊条件(没有相邻对)由否定前瞻处理(?!.*(.)\1)
,这表示字符串中的任何位置都不能有一个字符后跟相同的字符。
我今天走路时有一个想法并将其放在正则表达式上,但我还没有找到它不正确匹配的模式。所以这里是正则表达式:
^((y|z)|((yz)*y?|(zy)*z?))?(xy|xz|(xyz(yz|yx|yxz)*y?)|(xzy(zy|zx|zxy)*z?))*x?$
这是一个小提琴!
如果您发现模式不匹配,请告诉我,我会尝试修改它!我知道这有点晚了,但我真的很困扰我无法解决它。
I understand this is quite an old question and has an approved solution as well. But then I am posting 1 more possible and quick solution for the same case, where you want to check your regular expression that contains consecutive characters.
Use below regular expression:
String regex = "\\b\\w*(\\w)\\1\\1\\w*";
Listing possible cases that above expression returning the result.
Case 1: abcdddd or 123444
Result: Matched
Case 2: abcd or 1234
Result: Unmatched
Case 3: &*%$$$ (Special characters)
Result: Unmatched
Hope this will be helpful... Thanks:)