Я новичок в мире регулярного выражения.
Я хочу создать выражение, которое может соответствовать X символу N раз в строке.
например:
X = t
N = 2
то он должен соответствовать строковому test
или tit
или tt
.
Решение с использованием RegEx
/^([^t]*t[^t]*){2}$/
Где N = 2
^
Закрепляет регулярное выражение в начале строки.
[^t]*
Отрицательный класс символов, соответствует чему-либо, кроме t
. *
Quntifies это любое количество раз
t
За этим следует
[^t]*
Далее следует что-либо, кроме t
{2}
Проверяет шаблон 2
раза. То есть он гарантирует, что не t равно нулю или больше раз, за которым следует t, а затем не t равно нулю или больше времени. Вся вещь должна произойти 2 раза
$
Закрепляет регулярное выражение в конце строки.
Контрольная работа
$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
Это не работа для регулярных выражений. Вы должны просто подсчитать количество вхождений символа t
в строке и проверить, что оно равно 2.
Канонический способ подсчета вхождения символа в строке состоит в использовании tr///
Например:
for my $word (qw/ test tit tt tradescantia titillate intumescent trattoria /) {
print $word, "\n" if $word =~ tr/t// == 2;
}