PHP正则表达式:字符串必须包含X个字符N次

时间:2015-03-11 02:49:09

标签: php regex perl

我是正规表达世界的新手 我想创建一个表达式,可以在一个字符串中匹配X个字符N次 例如:

X = t

N = 2

然后它应匹配字符串testtittt

2 个答案:

答案 0 :(得分:2)

使用RegEx的解决方案

/^([^t]*t[^t]*){2}$/

N = 2

  • ^将正则表达式锚定在字符串的开头。

  • [^t]*否定字符类,匹配t以外的任何内容。 *多次统一

  • t其后是t

  • [^t]*此外还有t

  • 以外的任何内容
  • {2}量化模式2次。也就是说,它确保不是零次或多次,然后是t,然后不是零次或更多次。整件事必须发生2次

  • $将正则表达式锚定在字符串的末尾。

Regex Demo

<强>测试

$X='t';
$N=2;

$regex="/^([^".$X."]*".$X."[^".$X."]*){".$N."}$/";

echo preg_match($regex, "test" );
// => True

使用substr_count

的解决方案

substr_count函数返回字符串

中子字符串的出现次数
$X='t';
$N=2;
if ( substr_count('test', $X ) == $N )
//The string is ok
else
//The string is not ok

答案 1 :(得分:0)

这不是正则表达式的工作。您应该只计算字符串中字符t的出现次数,并检查它是否等于2.

计算字符串中字符出现次数的规范方法是使用tr///

例如:

for my $word (qw/ test tit tt tradescantia titillate intumescent trattoria /) {
    print $word, "\n" if $word =~ tr/t// == 2;
}