正则表达式如何匹配字符x重复5n次的所有字符串

时间:2016-04-19 23:40:45

标签: regex

如何为每个以下案例编写正则表达式:

  1. 匹配字符x重复0或5次的字符串,例如。 abc或abcxxxxx将通过;

  2. 匹配字符x重复5n次的所有字符串,例如: xxxxx,xxxxxxxxxx,xxxxxxxxxxxxxxx ...将通过

  3. 谢谢大家的出色答案!!但对于上一个问题的默默无闻,我的观点是如何使用正则表达式的迭代,比如,如果我想要将字符x重复5 ^ n次,该怎么办

4 个答案:

答案 0 :(得分:0)

我猜你想要这样的东西:

/(?:x{5})*/ Example

答案 1 :(得分:0)

这将匹配整个字符串,如下所述:

^([^x]*(x{5})+(?!x)(?:x{5})*|[^x]+(?!x)$)

(注意:需要前瞻)

aaaxxxxx    Match
aaaxxxxxx   No Match
xxxxx       Match
xxxxxxxxxx  Match
abcxxxxx    Match
abc         Match
abcx        No Match

Try me

答案 2 :(得分:0)

试试这个

\b(?:[^x]*x{5})+[^x]*\b

Regex demo

<强>解释
[^x]*匹配x以外的任何内容 x{5}正好与x匹配5次 (?:[^x]*x{5})+重复次数

答案 3 :(得分:-3)

对于第一部分,最好不使用正则表达式,通过计算这样的特定字符:

if ( (strpos($yourstring, 'xxxxx') == true) || (strpos($yourstring, 'x') == false)) {
    // our condition fulfilled
}

第二,您可以使用此正则表达式选择任何重复5次(或更多)的字符

/(.)\1{4}/

(是的,我们将使用4,而非5)示例:https://regex101.com/r/jD3tH5/1

如果您使用preg_match_all

,它将选择“所有”重复

此代码还将捕获找到匹配项的位置:

<?php

$pattern = '/(.)\1{4}/';

$string = '122333444455555666666777777788888888';

preg_match_all($pattern, $string, $matches, PREG_OFFSET_CAPTURE);

print_r($matches);

?>

如果您不想要这个职位,那么只需删除最后一个选项PREG_OFFSET_CAPTURE并使用此选项:

preg_match_all($pattern, $string, $matches, PREG_OFFSET_CAPTURE);