Trước hết, [\d]{1}
tương đương với \d
.
Đối với câu hỏi của bạn, sẽ tốt hơn nếu bạn sử dụng xác nhận chiều rộng bằng không như đường biên lookbehind/lookahead hoặc từ (\b
). Nếu không, bạn sẽ không khớp các chữ số đơn liên tiếp vì không gian hàng đầu của chữ số thứ hai sẽ được so khớp với khoảng trắng cuối của chữ số đầu tiên (và các kết quả trùng lặp sẽ không được tìm thấy).
Dưới đây là làm thế nào tôi sẽ viết này:
(?<!\S)\d(?!\S)
này có nghĩa là "phù hợp với một chữ số duy nhất nếu có không phải là một nhân vật phi khoảng trắng trước đó, và không có một nhân vật phi khoảng trắng sau khi nó" .
Tôi đã sử dụng âm kép như (?!\S)
thay vì (?=\s)
để bạn cũng sẽ khớp các chữ số đơn ở đầu hoặc cuối chuỗi.
Tôi thích này trên \b\d\b
ví dụ của bạn bởi vì nó trông giống như bạn thực sự chỉ muốn để phù hợp khi chữ số được bao quanh bởi không gian, và \b\d\b
sẽ phù hợp với 4
và 5
trong một chuỗi như 192.168.4.5
Để cho phép chấm câu ở cuối, bạn có thể sử dụng như sau:
(?<!\S)\d(?![^\s.,?!])
Thêm bất kỳ ký tự dấu bổ sung mà bạn muốn cho phép sau khi chữ số đến lớp nhân vật (bên trong dấu ngoặc vuông, nhưng chắc chắn rằng nó là sau khi lần thứ e ^
).
Nguồn
2013-02-26 21:03:55
Bạn đang thiếu một số trường hợp đặc biệt ở đây. Khi số ở đầu, ở cuối và khi nó chỉ là một chữ số trong một chuỗi. – abc667