如何为每个以下案例编写正则表达式:
匹配字符x重复0或5次的字符串,例如。 abc或abcxxxxx将通过;
匹配字符x重复5n次的所有字符串,例如: xxxxx,xxxxxxxxxx,xxxxxxxxxxxxxxx ...将通过
谢谢大家的出色答案!!但对于上一个问题的默默无闻,我的观点是如何使用正则表达式的迭代,比如,如果我想要将字符x重复5 ^ n次,该怎么办
答案 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
答案 2 :(得分:0)
答案 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);