2

我已经搜索了许多ABAB pattern匹配任意字符排序的 1212 或 2323 的答案,也读过这个 但我发现匹配 ABAB 模式的模式不起作用,它也匹配4444

我试图找出匹配以下主题的模式:

2323
4545
9898

但可能与 4444 或 5555 不匹配,因为那不是ABAB模式,我将其命名为AAAA模式
,有人可以给我线索吗
谢谢

4

2 回答 2

9

您可以使用此模式:

(\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]);
于 2013-10-09T09:11:20.840 回答
0

可用于 ABAB 模式的更简单、更通用的正则表达式模式是

(.+)(.+)\1\2

分解:

(.+)- 匹配一个或多个字符并存储在捕获组中 1

(.+)- 匹配一个或多个字符并存储在捕获组中 2

\1- 匹配捕获组中的相同项目1

\2- 匹配捕获组中的相同项目2

工作示例:https ://regex101.com/r/qJ2wM7/1

于 2015-01-07T04:55:52.573 回答