Sau khi đọc một số câu hỏi/câu trả lời trong vài tuần qua, tôi đã thấy việc sử dụng \d
trong biểu thức chính quy perl được nhận xét là không chính xác. Như trong các phiên bản sau của perl \d
không giống như [0-9]
, vì \d
sẽ đại diện cho bất kỳ ký tự Unicode nào có thuộc tính chữ số và rằng [0-9]
đại diện cho các ký tự '0', '1', '2', ..., '9'.Tôi có nên sử dụng d hoặc [0-9] để khớp các chữ số trong regex Perl không?
Tôi đánh giá cao rằng trong một số ngữ cảnh, [0-9]
sẽ là điều đúng để sử dụng và trong các trường hợp khác, \d
sẽ là. Tôi đã tự hỏi những người cảm thấy là mặc định chính xác để sử dụng?
Cá nhân tôi tìm thấy ký hiệu \d
rất gọn gàng và biểu cảm, trong khi so sánh [0-9]
thì hơi cồng kềnh. Nhưng tôi có ít kinh nghiệm làm mã đa ngôn ngữ, hay đúng hơn là mã cho các ngôn ngữ không phù hợp với phạm vi ký tự ASCII, và do đó có thể là ngây thơ.
tôi nhận thấy
$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\\d' | wc -l
298
$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\[0-9\]' | wc -l
26
\ d thực sự có thể khớp với hơn 10 ký tự khác nhau, nếu được áp dụng cho chuỗi Unicode. – pts