我已经搜索了许多ABAB pattern
匹配任意字符排序的 1212 或 2323 的答案,也读过这个
但我发现匹配 ABAB 模式的模式不起作用,它也匹配4444
我试图找出匹配以下主题的模式:
2323
4545
9898
但可能与 4444 或 5555 不匹配,因为那不是ABAB模式,我将其命名为AAAA模式
,有人可以给我线索吗
谢谢
您可以使用此模式:
(\d)(?!\1)(\d)\1\2
(\d)
- 捕获要分组的第一个数字$1
。(?!\1)
- 检查第二个数字不是第一个数字。(\d)
- 捕获要分组的第二个数字$2
。\1
- 如果与第一个数字相同,则匹配第三个数字。\2
- 如果与第二个数字相同,则匹配第四个数字。工作示例:http ://www.regex101.com/r/aV2uG1
这是一个比较混乱的正则表达式,几行代码就可以轻松解决这个任务。我对 PHP 不是很感兴趣,但这似乎可行:
$s = '1112';
$valid = (strlen($s) === 4) && ($s[0] === $s[2]) && ($s[1] === $s[3]) &&
($s[0] !== $s[1]);
可用于 ABAB 模式的更简单、更通用的正则表达式模式是
(.+)(.+)\1\2
分解:
(.+)
- 匹配一个或多个字符并存储在捕获组中 1
(.+)
- 匹配一个或多个字符并存储在捕获组中 2
\1
- 匹配捕获组中的相同项目1
\2
- 匹配捕获组中的相同项目2