Регулярное выражение PHP: строка должна содержать X символов N раз

0

Я новичок в мире регулярного выражения.
Я хочу создать выражение, которое может соответствовать X символу N раз в строке.
например:

X = t

N = 2

то он должен соответствовать строковому test или tit или tt.

  • 2
    Могу ли я спросить, почему вам нужно сделать что-то подобное? Это не кажется логичным.
Теги:

2 ответа

2
Лучший ответ

Решение с использованием RegEx

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

Где N = 2

  • ^ Закрепляет регулярное выражение в начале строки.

  • [^t]* Отрицательный класс символов, соответствует чему-либо, кроме t. * Quntifies это любое количество раз

  • t За этим следует

  • [^t]* Далее следует что-либо, кроме t

  • {2} Проверяет шаблон 2 раза. То есть он гарантирует, что не t равно нулю или больше раз, за которым следует t, а затем не t равно нулю или больше времени. Вся вещь должна произойти 2 раза

  • $ Закрепляет регулярное выражение в конце строки.

Демо-версия Regex

Контрольная работа

$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
  • 0
    это именно то, что я искал. Можете ли вы объяснить это выражение .. ??
0

Это не работа для регулярных выражений. Вы должны просто подсчитать количество вхождений символа t в строке и проверить, что оно равно 2.

Канонический способ подсчета вхождения символа в строке состоит в использовании tr///

Например:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню