Bạn có thể muốn quan tâm đến những gì được coi là thư và điều này tùy thuộc vào ngôn ngữ của bạn. Sử dụng ISO Latin-1 sẽ cho phép các ký tự tiếng Tây phương có dấu được đối sánh dưới dạng chữ cái. Trong chương trình sau, ngôn ngữ mặc định không nhận ra é và do đó créé không khớp. Bỏ ghi chú mã thiết lập miền địa phương, và sau đó nó bắt đầu khớp.
Cũng lưu ý rằng \ w bao gồm các chữ số và ký tự gạch dưới cùng với tất cả các chữ cái. Để chỉ nhận được các chữ cái, bạn cần phải bổ sung các ký tự không phải chữ số, chữ số và dấu gạch dưới. Điều này chỉ để lại chữ cái.
Điều đó có thể dễ hiểu hơn bằng cách đặt khung câu hỏi là câu hỏi "Cụm từ thông dụng nào khớp với bất kỳ chữ số nào trừ 3?" Và câu trả lời là/[^ \ D3] /.
#! /usr/local/bin/perl
use strict;
use warnings;
# uncomment the following three lines:
# use locale;
# use POSIX;
# setlocale(LC_CTYPE, 'fr_FR.ISO8859-1');
while (<DATA>) {
chomp;
if (/([^\W_0-9])\1+/) {
print "$_: dup [$1]\n";
}
else {
print "$_: nope\n";
}
}
__DATA__
100
food
créé
a::b
Đối với các chữ cái chỉ hoán đổi \ w cho [a-zA-Z]. – TomC
@TomC: Đó không phải là unicode an toàn! –
Bây giờ tôi có thể thay thế các chữ cái gấp đôi chỉ một: Regex.Replace (str, @ "(\ w) \ 1+", "$ 1"); cảm ơn Adam. –