Regex cho chuỗi chứa?


114

Regex là gì để kiểm tra đơn giản nếu một chuỗi có chứa một từ nhất định (ví dụ: 'Kiểm tra')? Tôi đã thực hiện một số googling nhưng không thể lấy một ví dụ rõ ràng về một regex như vậy. Đây là một kịch bản xây dựng nhưng không liên quan đến bất kỳ ngôn ngữ lập trình cụ thể nào.

Câu trả lời:


78

Giả sử hương vị regex kiểu PCRE thông thường:

Nếu bạn muốn kiểm tra nó như một từ đầy đủ, đơn lẻ, thì nó sẽ \bTest\bcó các cờ thích hợp để phân biệt chữ hoa chữ thường nếu muốn và các dấu phân cách cho ngôn ngữ lập trình của bạn. \bđại diện cho một "ranh giới từ", nghĩa là, một điểm giữa các ký tự mà một từ có thể được coi là bắt đầu hoặc kết thúc. Ví dụ: vì dấu cách được sử dụng để phân tách các từ, nên sẽ có một ranh giới từ ở hai bên của khoảng trắng.

Nếu bạn muốn kiểm tra nó như một phần của từ , nó chỉ là Test, một lần nữa với các cờ thích hợp để phân biệt chữ hoa chữ thường. Lưu ý rằng thông thường, các phương thức "chuỗi con" chuyên dụng có xu hướng nhanh hơn trong trường hợp này, bởi vì nó loại bỏ chi phí phân tích cú pháp regex.


1
" \bđại diện cho một" ranh giới từ ", nghĩa là, một cái gì đó ngăn cách hai từ (ví dụ: dấu cách)." \bkhông khớp với một khoảng trắng; nó là một khẳng định khớp giữa các ký tự (hoặc ở đầu hoặc cuối dòng, trong hầu hết các trường hợp).
strager

1
@strager: Vâng, bạn nói đúng - lời giải thích của tôi hơi thiếu chính xác. Tôi sẽ chỉnh sửa.
Michael Madsen

117

Chỉ cần không cố định mẫu của bạn:

/Test/

Regex ở trên sẽ kiểm tra chuỗi chữ "Test" được tìm thấy ở đâu đó trong nó.


2
Cảm ơn, tôi không biết nó đơn giản như vậy! Tôi chắc chắn không thấy điều này trong Google của mình. Ý bạn là gì khi không cố định hình mẫu của tôi?
GurdeepS

7
Bạn có thể cố định một mẫu để khớp với phần đầu hoặc phần cuối của chuỗi, ví dụ / ^ Kiểm tra / hoặc / Kiểm tra $ / tương ứng hoặc thậm chí / ^ Kiểm tra $ / để khớp chính xác. Ví dụ này là thừa thãi vì nó không mang lại lợi ích gì so với việc so sánh bình đẳng nhưng ví dụ khi thực hiện xác thực trường biểu mẫu, một regex như / ^ \ d + $ / sẽ chỉ khớp nếu trường chứa ít nhất một chữ số và không có gì khác ngoài các chữ số.
David Clarke

-13

Tôi trễ một vài năm, nhưng tại sao không phải là điều này?

[Tt][Ee][Ss][Tt]

4
Câu trả lời này xuất hiện trong hàng đợi đánh giá chất lượng thấp, có thể là do bạn không giải thích mã. Nếu bạn giải thích điều đó (trong câu trả lời của mình), bạn có nhiều khả năng nhận được nhiều phiếu tán thành hơn — và người hỏi thực sự học được điều gì đó!
The Guy with The Hat

6
Điều này không được khái quát lắm - hãy tưởng tượng nếu từ bạn phải tìm kiếm đến từ một người dùng. Bạn sẽ phải tạo [Aa]mẫu cho mọi chữ cái và nó sẽ trở nên xấu đi khá nhanh.
Platinum Azure
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.