2009-06-11 33 views

Trả lời

35

Nó nói cái gì đó như: tất cả các ký tự không (^) nằm trong khoảng \x20-\x7E (hex 0x20-0x7E).

Theo http://www.asciitable.com/, đó là các ký tự từ không gian đến ~.

+8

tức là các ký tự có thể in – annakata

+0

Bạn nên lưu ý rằng bạn cũng có thể sử dụng API để thực hiện kiểm tra. Ví dụ, trong Java, bạn có thể sử dụng java.lang.Character.isISOControl (ký tự) và các phương thức tương tự làm cho mã của bạn dễ đọc hơn. – Stan

2

Điều này có nghĩa là "mọi thứ không phải là mã ký tự trong phạm vi thập lục phân 0x20 đến 0x7E, nghĩa là từ 32 đến 126".

2

Dấu mũ (^) bên trong dấu ngoặc vuông [] có nghĩa là "không" và \ x20- \ x7E biểu thị một dải ký tự ascii, trong đó \ x20 (dấu cách) là đầu dãy và \ x7E (~) là kết thúc. Nó về cơ bản là bất cứ thứ gì không phải là một chữ cái, số, hoặc dấu câu thông thường.

5

Điều đó có nghĩa là khớp với bất kỳ ký tự nào không in ký tự.

In các ký tự bao gồm a đến z, A đến Z, 0-9 và các ký hiệu như",; $ #% vv

^ not 
\x20 hex code for space character 
- to 
\x7e hex code for ~ (tilde) character 

Tất cả các nhân vật in ascii rơi giữa hai

.

tuyên bố này phù hợp với các ký tự aSCII không cũng như kiểm soát ascii (không in) nhân vật như chuông, tab, null và những người khác.

Nhìn vào

man ascii 

trên hệ thống Unix để xem những ký tự nào khớp với.

Trong perl, bạn cũng có thể viết những dòng này như

[^ -~] 

hoặc

[[:^cntrl:]] 

này cuối cùng là hơi khác nhau, ở chỗ nó phù hợp với bất kỳ ký tự kiểm soát thuốc, bao gồm ascii mở rộng (ví dụ có dấu ký tự) và unicode.

Bạn không được tự giới hạn mình chỉ với ascii, vì các vị trí không phải của Hoa Kỳ thường sử dụng các ký tự in hợp lệ ngoài phạm vi nhỏ này, ví dụ: øüéåç ...

+0

Tôi nghĩ bạn có nghĩa là [^ [: print:]] cho cái cuối cùng. Ký hiệu lớp ký tự POSIX bao gồm các dấu ngoặc vuông cũng như các dấu hai chấm và toàn bộ nội dung phải được đặt bên trong một bộ ngoặc vuông khác. (Và dĩ nhiên, [: cntrl:] là lớp sai.) Tuy nhiên, các lớp POSIX cũng được cho là nhạy cảm miền địa phương, có nghĩa là chúng có thể khớp, ví dụ như các chữ cái có dấu cũng như tập ASCII cơ bản. –

+0

À vâng, điều đó thật cẩu thả (đã muộn). cntrl thực sự khác với những cái trước đó, theo nghĩa là nó sẽ bao gồm các ký tự in trong ascii mở rộng và thậm chí dãy unicode, nhưng tôi tin rằng đó là khả năng đó là những gì đã được dự định. –

+0

Tôi khuyên bạn nên để riêng các lớp nhân vật POSIX, đặc biệt là trong trường hợp như thế này, nơi chúng tôi không biết sử dụng hương vị regex nào, hệ điều hành nào đang chạy hoặc trong miền địa phương nào. Tất cả những yếu tố đó có thể thay đổi hành vi của chúng. –

Các vấn đề liên quan