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