2009-07-16 26 views
22

Tôi có dấu phẩy danh sách các biểu thức thông thường tách ra:Làm thế nào để thoát khỏi một khung vuông cho mẫu biên soạn

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z] 

Tôi đã làm một sự chia rẽ trên dấu phẩy. Bây giờ tôi đang cố gắng để phù hợp với regex này chống lại một mật khẩu được tạo ra. Vấn đề là Pattern.compile không thích dấu ngoặc vuông không được thoát. Có thể một số xin vui lòng cho tôi một chức năng đơn giản mà có một chuỗi như vậy: [0-9] và trả về chuỗi thoát \[0-9\].

Trả lời

11

Bạn có thể sử dụng các ký tự đặc biệt \ Q và \ E ... bất kỳ thứ gì giữa \ Q và \ E được tự động thoát.

\Q[0-9]\E 
+0

Nghe có vẻ hơi khó hiểu nếu bạn hỏi tôi, bạn đã thử nó bằng java chưa (tôi không, đó là lý do tôi hỏi). – Fredrik

+1

Nó cũng hợp lệ trong Java: http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html (ctrl-F cho "\ Q") – MatrixFrog

+5

Trong định dạng văn bản dạng chuỗi Java nó sẽ là "\\ Q [0-9] \\ E" hoặc "\\ Q" + regex + "\\ E". Nhưng phương thức quote() thực hiện điều đó cho bạn, cộng với nó xử lý đúng với các chuỗi đã có \ E trong chúng. –

1

Pattern.compile() thích dấu ngoặc vuông vừa tốt. Nếu bạn đi theo chuỗi

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]" 

và chia nó trên dấu phẩy, bạn kết thúc với lăm regexes hoàn toàn hợp lệ: người đầu tiên phù hợp với tám ký tự phi line-tách, thứ hai phù hợp với một chữ số ASCII, và vân vân. Trừ khi bạn thực sự muốn khớp các chuỗi như ".{8}""[0-9]", tôi không hiểu tại sao bạn cần phải thoát khỏi bất kỳ thứ gì.

23

Vì lý do nào đó, câu trả lời ở trên không hiệu quả đối với tôi. Đối với những người như tôi đến sau, đây là những gì tôi tìm thấy.

Tôi đã mong đợi một dấu gạch chéo ngược duy nhất để thoát khỏi khung, tuy nhiên, bạn phải sử dụng hai nếu bạn có mẫu được lưu trữ trong chuỗi. Dấu gạch chéo ngược đầu tiên thoát khỏi dấu gạch chéo thứ hai vào chuỗi, vì vậy mà regex thấy là \]. Vì regex chỉ thấy một dấu gạch chéo ngược, nó sử dụng nó để thoát khỏi dấu ngoặc vuông.

\\] 

Trong regex, sẽ khớp với một dấu ngoặc vuông đóng.

Nếu bạn đang cố gắng kết hợp một dòng mới, ví dụ: bạn chỉ sử dụng một dấu gạch chéo ngược đơn. Bạn đang sử dụng mẫu thoát chuỗi để chèn ký tự dòng mới vào chuỗi. Regex không thấy \n - nó thấy ký tự dòng mới và khớp với ký tự đó. Bạn cần hai dấu gạch chéo ngược bởi vì nó không phải là một chuỗi thoát chuỗi, đó là một chuỗi thoát regex.

+2

Khi suy nghĩ về nó tôi đã đưa ra lý do tại sao điều này là như thế: Regex là một String và bất cứ quá trình regex này sẽ tìm kiếm một backslah duy nhất như một nhân vật thoát. Tuy nhiên như regex được thông qua như một String bạn phải thoát khỏi backslah cũng để có được nó vào một String đúng và đó là readon tại sao bạn cần hai dấu gạch chéo ngược – Raven

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