2013-10-09 26 views
2

我搜索了很多答案,以配合ABAB pattern匹配任意字符排序的1212或2323的是,已经阅读this too ,但我发现,要匹配的模式ABAB模式没有也行,它比赛4444正则表达式匹配号码(必须相同)

我揣摩要匹配的模式下面这样的主题:

2323 
4545 
9898 

,但可能不符合4444或5555,因为这是不是在ABAB模式,我将其命名为AAAA模式
能有人给我线索
感谢

+0

你需要一个反向引用http://www.regular-expressions.info/brackets.html –

+0

是否必须匹配ABAB和AAAA或仅ABAB? –

+0

应该只匹配ABAB而不是AAAA – xnome

回答

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]); 
+1

你也可以解释模式是如何运作的! –

+1

这将解释http://regex101.com/r/yY1nI7的正则表达式 – Rex

+0

@MatteoTassinari - 我回答快,然后展开 - 希望没关系':)' – Kobi

0

可以使用的ABAB模式更简单,更一般的正则表达式是

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

击穿:

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

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

\1 - 在拍摄小组赛同一项目1

\2 - 在捕获组2

匹配相同的项目工作例如:https://regex101.com/r/qJ2wM7/1