【问题标题】:Regex to check if a character occurs more than X times in a string正则表达式检查一个字符是否在字符串中出现超过 X 次
【发布时间】:2016-11-05 15:19:30
【问题描述】:

检查一个字符是否在字符串中出现超过 2 次的正则表达式是什么?示例:允许使用“aab”,但不允许使用“aaa”或“aaba”。

有没有办法让它只匹配有效输入(当重复字符少于 3 个时),以便 preg_match() 函数为有效输入(少于 3 个重复字符)返回 1,否则返回 0?

谢谢!

【问题讨论】:

  • 使用substr_count($str, "a") 代替正则表达式。
  • 所以如果字符串是aabaabaa 是否允许,因为重复次数永远不会超过 2?
  • 现在指定。不应接受“aabaabaa”。
  • @liberty 那么它只是同一个字符在一个字符串中超过三遍吗?

标签: php regex preg-match


【解决方案1】:

这个正则表达式会找到一个重复 3 次的字符(或更多,因为必须命中三个才能获得更多)。

(.)\1{2}

正则表达式演示:https://regex101.com/r/WmUPWW/1

PHP 用法:

foreach(array('aaa', 'aab') as $string) {
    if(preg_match('/(.)\1{2}/', $string)) {
         echo $string . ' doesnt match :(' . "\n";
    } else {
         echo $string . ' matches'. "\n";
    }
}

PHP 演示:https://eval.in/672382

【讨论】:

  • 喜欢演示。证据就在布丁中,就像它一样;-)
  • 有没有办法让 preg_match 返回 1(如果存在)?只是问,因为我想循环几个表达式。
  • @liberty 这就是它的作用,这就是它进入条件的原因。 eval.in/672387 根据手册:preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.。或将返回值存储在变量中的演示,eval.in/672389
  • 如果这对你有用,请记住接受答案。
  • @chris85 对不起,我的意思是如果模式不存在则为 1,如果存在则为 0。
【解决方案2】:

在条件中使用正则表达式匹配和非匹配

以下x为max_length+1

(?:[^<letter>]*<letter>[^letter]*){x}

例如,对于字母 b,您会使用

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

对于所有元音

 (?:[^aeiou]*[aeiou][^aeiou]*){x}

有关 php 上的正则表达式使用,请参阅https://www.w3schools.com/php/php_regex.asp

【讨论】:

  • 1) {0-2} 是语法错误。 2) (?:.*b.*){0,2} 匹配 bbbbbbbbbbbbbbb
  • @Toto 你是对的,也缺少一个不匹配,我还添加了一些我在测试时发现的优化
猜你喜欢
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多