TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Có vẻ như bạn muốn "xn times" hoặc "xm times", tôi nghĩ bản dịch theo nghĩa đen sang regex sẽ (x{n}|x{m}).
giống như thế này https://regex101.com/r/vH7yL5/1
hoặc, trong trường hợp bạn có thể có một chuỗi nhiều hơn m "x" s (giả sử m> n), bạn có thể thêm 'theo sau không "x"' và 'theo sau không "x", dịch sang [^x](x{n}|x{m})[^x]
nhưng điều đó sẽ giả sử rằng luôn có một ký tự đứng sau và sau bạn "x" s. Như bạn có thể thấy ở đây: https://regex101.com/r/bB2vH2/1
bạn có thể thay đổi nó thành (?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
, dịch thành "không theo sau 'x' hoặc sau dòng bắt đầu" và "theo sau là không 'x' hoặc theo sau là cuối dòng". Tuy nhiên, nó sẽ không khớp với hai chuỗi chỉ có một ký tự giữa chúng (vì trận đầu tiên sẽ yêu cầu một ký tự đứng sau và chuỗi thứ hai là một ký tự trước đó) như bạn có thể xem tại đây: https://regex101.com/r/ oC5oJ4 / 1
Cuối cùng, để so khớp từ xa với một ký tự, bạn có thể thêm một cái nhìn tích cực về phía trước (? =) Vào "không 'x' sau" hoặc một cái nhìn tích cực phía sau (? <=) Vào "không 'x' trước", như thế này: https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
Bằng cách này, bạn sẽ chỉ đối sánh chính xác số 'x mà bạn muốn.
X
là tốt nhất bạn có thể nhận được cho tổng thểm
,n
.