0

使用

(a{4,})

我可以连续匹配 4 个或更多特定字符

啊啊啊啊啊啊

([0-9]{4,})

我可以连续匹配 4 个或更多特定字符组

1 123 1234321 12

但我正在寻找一种方法来捕捉字符串中单个字符的运行。含义:我有一个范围内的字符串集合[a-zA-z0-9]。每当这些字符之一重复超过 4 次时,正则表达式应该匹配。

给你一个更实际的例子:在...

这是 Teeeeeeest 版本 1.0.33333.4

...它应该能够匹配e角色的运行和角色的运行3

现在,以下显然不能满足我的需求......

([a-zA-Z0-9]{4,})

...因为它只会捕获允许的字符的所有运行。但我只需要捕捉单个字符重复 4 次或更多次的时刻。

我真的很想避免通过单个正则表达式使用 a 循环所有 64 个可能的字符,for(...)并且我确信“必须有一种方法”来使用一个正则表达式来做到这一点。但是,由于我已经尝试了所有的东西,并且我的头几乎要撞到墙上,所以我选择加入,希望有人可以通过将我推向正确的方向来帮助我。

我怎样才能preg_match运行单个字符的字符运行?(又名:正则表达式会是什么样子?)

编辑(接受答案后)

感谢您的回答和评论,因为我发现做我想做的唯一选择是

(a{4,}|b{4,}|c{4,}|d{4,}|e{4,}|f{4,}|g{4,}|h{4,}|i {4,}|j{4,}|k{4,}|l{4,}|m{4,}|n{4,}|o{4,}|p{4,}|q{4 ,}|r{4,}|s{4,}|t{4,}|u{4,}|v{4,}|w{4,}|x{4,}|y{4,} |z{4,}|A{4,}|B{4,}|C{4,}|D{4,}|E{4,}|F{4,}|G{4,}|H {4,}|I{4,}|J{4,}|K{4,}|L{4,}|M{4,}|N{4,}|O{4,}|P{4 ,}|Q{4,}|R{4,}|S{4,}|T{4,}|U{4,}|V{4,}|W{4,}|X{4,} |Y{4,}|Z{4,}|0{4,}|1{4,}|2{4,}|3{4,}|4{4,}|5{4,}|6 {4,}|7{4,}|8{4,}|9{4,})

但这感觉不太好……而且看起来也不健康,是吗?;)

反正我就这样结束了...

preg_match_all('#([a-zA-Z0-9])\1{3}#',
               'This is Teeeeeeest version 1.0.33333.4',
               $matches));
var_dump($matches);
4

1 回答 1

4

您需要使用正则表达式“反向引用”功能。在您的情况下,它将是:

([a-zA-Z0-9])\1{3}

使用您的测试字符串查看此小提琴。

于 2013-08-05T05:14:39.167 回答