2010-04-05 34 views
20

Tôi có một nguồn văn bản có null trong đó và tôi cần kéo chúng ra cùng với mẫu regex của tôi. Có thể regex thậm chí phù hợp với một nhân vật null?PCRE regex có khớp với một ký tự null không?

Tôi chỉ nhận ra tôi đã có chúng khi mẫu của tôi từ chối không khớp và khi tôi dán nó vào Notepad ++ nó cho thấy tất cả các ký tự null.

Trả lời

35
\x00 

Đó là một char rỗng.

+0

cảm ơn. hoạt động tốt nhưng không thể có bất kỳ công cụ 'trực quan' nào của tôi để làm việc với null nhưng Grep của Regex Buddy sẽ làm điều đó đằng sau hậu trường. – Keng

+0

Dường như ['\ x0' cũng hoạt động] (http://superuser.com/a/287998/2259). – l0b0

+0

Không nên làm '\ x0' trừ khi đó là điều duy nhất bạn đang kết hợp. nếu bạn đang cố gắng khớp '\ x0apple' sẽ thử và khớp với' \ npple' – Augwa

1

Một vấn đề với khớp với ký tự null là trước tiên bạn cần phải sắp xếp để nó đến. Rất nhiều ngôn ngữ sử dụng các chuỗi được kết thúc bằng null để khớp của bạn có thể không chống lại toàn bộ đầu vào.

Đối với cách thể hiện trong PCRE, \ 000 sẽ không bị vấp phải bởi bất kỳ thứ gì sau nó, như \ x {} (nhưng phiên bản bát phân theo ý kiến ​​của tôi dễ nhận biết hơn khi lướt qua regex).

Xem the PCRE manpages và tìm kiếm Ký tự không in để biết chi tiết đầy đủ về cách chỉ định số không theo nhiều cách khác nhau.

+0

địa chỉ hiện tại http://www.pcre.org/original /doc/html/pcrepattern.html#SEC5 – test30

1

Để làm rõ/thêm một chi tiết khác vào câu trả lời trước: Thư viện PCRE chấp nhận mẫu dưới dạng chuỗi ký tự "C". (Trích dẫn các tài liệu PCRE: "Mẫu là một chuỗi C bị chấm dứt bởi số không nhị phân".) Điều đó có nghĩa là mẫu không thể chứa ký tự NUL bằng chữ - thay vào đó, nó phải luôn luôn được thoát bằng các phương tiện được mô tả trong các câu trả lời khác. ("Không giống như chuỗi mẫu, đối tượng có thể chứa số nhị phân." "4. Mặc dù các ký tự số không nhị phân được hỗ trợ trong chuỗi chủ đề, chúng không được cho phép trong chuỗi mẫu vì nó được chuyển thành một hoặc không mal C chuỗi, kết thúc bằng 0. Trình tự thoát \ 0 có thể được sử dụng trong mẫu để biểu diễn số không nhị phân. ")

Ký tự NUL là ký tự duy nhất trong mẫu PCRE phải được thoát, tất cả các ký tự khác có thể là chữ: "Không có giới hạn đối với sự xuất hiện của các ký tự không in, ngoài số nhị phân mà chấm dứt mẫu".

Như một lưu ý so sánh cuối cùng, một số động cơ regex tương thích Perl khác cho phép NUL theo nghĩa đen trong một mẫu, ví dụ, SRE của Python. Ví dụ. urlib.parse từ Python3 có dòng sau: _asciire = re.compile('([\x00-\x7f]+)'). Lưu ý việc thiếu "r" để biểu thị nguyên văn bản - điều đó có nghĩa là việc bỏ định dạng ở đây xảy ra ở cấp Python và mô-đun lại nhận các ký tự có giá trị 0x00 và 0x7f trong mẫu.

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