TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
ดูเหมือนว่าคุณต้องการ "xn times" หรือ "xm times" ฉันคิดว่าการแปลตามตัวอักษรเป็น regex จะเป็น(x{n}|x{m}).
เช่นนี้ https://regex101.com/r/vH7yL5/1
หรือในกรณีที่คุณสามารถมีลำดับของมากกว่า m "x" วินาที (สมมติม> n) คุณสามารถเพิ่ม 'ต่อไปนี้ไม่มี '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
สุดท้ายเพื่อให้ตรงกับการจับคู่ระยะห่างของอักขระหนึ่งตัวคุณสามารถเพิ่มการมองเชิงบวกไว้ข้างหน้า (? =) บน "ไม่ 'x' หลัง" หรือการมองเชิงบวกด้านหลัง (? <=) บน "ไม่ 'x' ก่อนหน้า", ดังนี้: https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
วิธีนี้จะทำให้คุณจับคู่เฉพาะจำนวน "x ที่คุณต้องการเท่านั้น
X
ที่ดีที่สุดคือคุณจะได้รับโดยทั่วไป,m
n