TL; DR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Похоже, вы хотите «xn раз» или «xm раз», я думаю, что буквальный перевод регулярного выражения будет (x{n}|x{m}).
таким https://regex101.com/r/vH7yL5/1
или, в случае, когда у вас может быть последовательность из более чем m "x" s (при условии, что m> n), вы можете добавить 'после отсутствия "x" и', за которым не следует "x", что переводится [^x](x{n}|x{m})[^x]
как Предположим, что всегда есть символ позади и после вас "x". Как видно здесь: https://regex101.com/r/bB2vH2/1
вы можете изменить его на (?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
, что переводится как «после символа 'x' или после начала строки» и «за которым не следует 'x' или за которым следует конец строки». Но все же он не будет соответствовать двум последовательностям, между которыми будет только один символ (потому что для первого совпадения потребуется символ после, а для второго - символ перед), как вы можете видеть здесь: https://regex101.com/r/ oC5oJ4 / 1
Наконец, чтобы найти совпадение на расстоянии одного символа, вы можете добавить положительный взгляд вперед (? =) На «нет 'x' после» или положительный взгляд назад (? <=) На «нет 'x' перед», вот так: https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Таким образом, вы сопоставите только то точное количество символов, которое вам нужно.
X
это лучшее , что вы можете получить для общегоm
,n
.