Làm cách nào để tạo một biểu thức chính quy phát hiện các số thập lục phân trong văn bản?
Ví dụ: '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' và '8BADF00D'.
Làm cách nào để tạo một biểu thức chính quy phát hiện các số thập lục phân trong văn bản?
Ví dụ: '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' và '8BADF00D'.
Câu trả lời:
Làm thế nào về sau đây?
0[xX][0-9a-fA-F]+
Đối sánh biểu thức bắt đầu bằng 0, sau đó là x viết thường hoặc viết hoa, theo sau là một hoặc nhiều ký tự trong phạm vi 0-9 hoặc af, hoặc AF
/0x[\da-f]/i
, nhưng nếu không, +1.
Cú pháp chính xác phụ thuộc vào yêu cầu chính xác và ngôn ngữ lập trình của bạn, nhưng về cơ bản:
/[0-9a-fA-F]+/
hoặc đơn giản hơn, i
phân biệt chữ hoa chữ thường.
/[0-9a-f]+/i
Nếu bạn đủ may mắn để sử dụng Ruby, bạn có thể làm:
/\h+/
CHỈNH SỬA - Câu trả lời của Steven Schroeder khiến tôi nhận ra sự hiểu biết của mình về bit 0x là sai, vì vậy tôi đã cập nhật các đề xuất của mình cho phù hợp. Nếu bạn cũng muốn đối sánh 0x, thì giá trị tương đương là
/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i
THÊM THÊM - Nếu 0x cần phải là tùy chọn (như câu hỏi ngụ ý):
/(0x)?[0-9a-f]+/i
Không phải là vấn đề lớn, nhưng hầu hết các công cụ regex đều hỗ trợ các lớp ký tự POSIX và có [:xdigit:]
để khớp các ký tự hex, đơn giản hơn so với thông thường0-9a-fA-F
thứ .
Vì vậy, regex theo yêu cầu (tức là. Với tùy chọn 0x
) là:/(0x)?[[:xdigit:]]+/
Điều này sẽ khớp với hoặc không có 0x
tiền tố
(?:0[xX])?[0-9a-fA-F]+
Điều đáng nói là việc phát hiện MD5 (là một trong những ví dụ) có thể được thực hiện với:
[0-9a-fA-F]{32}
Nếu bạn đang sử dụng Perl hoặc PHP, bạn có thể thay thế
[0-9a-fA-F]
với:
[[:xdigit:]]
Nếu bạn đang tìm kiếm một ký tự hex cụ thể ở giữa chuỗi, bạn có thể sử dụng "\ xhh" trong đó hh là ký tự trong hệ thập lục phân. Tôi đã thử và nó hoạt động. Tôi sử dụng framework cho C ++ Qt nhưng nó có thể giải quyết vấn đề trong các trường hợp khác, tùy thuộc vào hương vị bạn cần sử dụng (php, javascript, python, golang, v.v.).
Câu trả lời này được lấy từ: http://ult-tex.net/info/perl/
Điều này đảm bảo bạn có không quá ba cặp hợp lệ:
(([a-fA-F]|[0-9]){2}){3}
Bất kỳ nhiều hơn hoặc ít hơn ba cặp ký tự hợp lệ đều không khớp.
Trong trường hợp bạn cần điều này trong đầu vào mà người dùng có thể nhập 0
và 0x
cũng có thể nhập nhưng không phải là số hex không có 0x
tiền tố:
^0?[xX]?[0-9a-fA-F]*$
Một ví dụ khác: Các giá trị thập lục phân cho các màu css bắt đầu bằng dấu thăng hoặc dấu thăng (#), sau đó là sáu ký tự có thể là một chữ số hoặc một chữ cái giữa A và F, bao gồm cả.
^#[0-9a-fA-F]{6}