TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Parece que quieres "xn veces" o "xm veces", creo que una traducción literal a regex sería (x{n}|x{m}).
como esta https://regex101.com/r/vH7yL5/1
o, en un caso en el que pueda tener una secuencia de más de m "x" s (suponiendo que m> n), puede agregar 'después de no "x"' y 'seguido de no "x", traduciendo a [^x](x{n}|x{m})[^x]
pero eso sería suponga que siempre hay un carácter detrás y después de usted "x". Como puede ver aquí: https://regex101.com/r/bB2vH2/1
puede cambiarlo a (?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
, que se traduce en "sin 'x' o siguiente inicio de línea" y "seguido de 'x' o final de línea". Pero aún así, no coincidirá con dos secuencias con un solo carácter entre ellas (porque la primera coincidencia requeriría un carácter después y la segunda un carácter antes) como puede ver aquí: https://regex101.com/r/ oC5oJ4 / 1
Por último, para hacer coincidir la coincidencia distante de un carácter, puede agregar una mirada positiva hacia adelante (? =) En el "no 'x' después" o una mirada positiva detrás (? <=) En el "no 'x' antes", así: https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
De esta manera, coincidirá solo con el número exacto de 'x' que desee.
X
es el mejor que se puede obtener de forma en generalm
,n
.