String.contains
String.contains
hoạt động với Chuỗi, dấu chấm. Nó không hoạt động với regex. Nó sẽ kiểm tra xem Chuỗi chính xác được chỉ định có xuất hiện trong Chuỗi hiện tại hay không.
Lưu ý rằng String.contains
không kiểm tra ranh giới từ; nó chỉ đơn giản là kiểm tra chuỗi con.
Giải pháp Regex
Regex mạnh hơn String.contains
, vì bạn có thể thực thi ranh giới từ trên các từ khóa (trong số những thứ khác). Điều này có nghĩa là bạn có thể tìm kiếm các từ khóa dưới dạng các từ , thay vì chỉ các chuỗi con .
Sử dụng String.matches
với regex sau:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW regex (loại bỏ thoát được thực hiện trong chuỗi ký tự - đây là những gì bạn nhận được khi in ra chuỗi ở trên):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Các \b
kiểm tra cho ranh giới từ, vì vậy mà bạn không có được một trận đấu cho restores store products
. Lưu ý rằng stores 3store_product
cũng bị từ chối, vì chữ số và _
được coi là một phần của một từ, nhưng tôi nghi ngờ trường hợp này xuất hiện trong văn bản tự nhiên.
Vì ranh giới từ được kiểm tra cho cả hai bên, regex ở trên sẽ tìm kiếm các từ chính xác. Nói cách khác, stores stores product
sẽ không khớp với regex ở trên, vì bạn đang tìm kiếm từ store
mà không có s
.
.
thường khớp với bất kỳ ký tự nào ngoại trừ một số ký tự dòng mới . (?s)
ở phần đầu, làm cho .
khớp với bất kỳ nhân vật nào mà không có ngoại lệ (cảm ơn Tim Pietzcker đã chỉ ra điều này).
(?s)
vào đầu regex của mình trong trường hợp chuỗi chứa các dòng mới.