TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Sepertinya Anda menginginkan "xn times" atau "xm times", saya rasa terjemahan literal ke regex akan seperti (x{n}|x{m}).
ini https://regex101.com/r/vH7yL5/1
atau, dalam kasus di mana Anda dapat memiliki urutan lebih dari m "x" s (dengan asumsi m> n), Anda dapat menambahkan 'setelah tidak ada "x"' dan 'diikuti dengan tidak ada "x", menerjemahkan ke [^x](x{n}|x{m})[^x]
tapi itu akan asumsikan bahwa selalu ada karakter di belakang dan setelah Anda "x". Seperti yang Anda lihat di sini: https://regex101.com/r/bB2vH2/1
Anda dapat mengubahnya menjadi (?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
, menerjemahkan menjadi "mengikuti no 'x' atau mengikuti baris awal" dan "diikuti dengan no 'x' atau diikuti oleh akhir baris". Tapi tetap saja, itu tidak akan cocok dengan dua urutan dengan hanya satu karakter di antara mereka (karena pertandingan pertama akan membutuhkan karakter setelahnya, dan yang kedua membutuhkan karakter sebelumnya) seperti yang Anda lihat di sini: https://regex101.com/r/ oC5oJ4 / 1
Terakhir, untuk mencocokkan satu karakter jauh yang cocok, Anda dapat menambahkan tampilan positif ke depan (? =) Pada "no 'x' setelah" atau tampilan positif di belakang (? <=) Pada "no 'x' before", seperti ini: https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Dengan cara ini Anda hanya akan mencocokkan jumlah persis dari 'x yang Anda inginkan.
X
adalah yang terbaik yang bisa Anda dapatkan untuk umumm
,n
.