Những điều sau đây phải được khớp:
AAA123
ABCDEFGH123
XXXX123
tôi có thể làm gì ".*123"
không?
Những điều sau đây phải được khớp:
AAA123
ABCDEFGH123
XXXX123
tôi có thể làm gì ".*123"
không?
Câu trả lời:
Vâng, bạn có thể. Cần làm việc.
.
= bất kỳ char\.
= ký tự dấu chấm thực tế.?
= .{0,1}
= khớp bất kỳ char nào hoặc một lần.*
= .{0,}
= khớp bất kỳ char nào hoặc nhiều lần hơn.+
= .{1,}
= khớp bất kỳ char nào một hoặc nhiều lầnCó, nó sẽ hoạt động, mặc dù lưu ý rằng .
sẽ không khớp với dòng mới trừ khi bạn vượt qua cờ DOTALL khi biên dịch biểu thức:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
sẽ phù hợp với dòng mới. Tôi rất vui vì tôi đã đọc câu trả lời của bạn, tôi cần sử dụng nó!
{.,\n,\r,\u2028,\u2029,\u0085}
để khớp hoàn toàn bất kỳ ký tự nào (các ký tự Unicode là các ký tự kết thúc dòng bổ sung được thêm vào không khớp với .
trong Java), nhưng chỉ {.,\n,\r}
hoạt động với hầu hết các tệp văn bản.
[\s\S]
là một cách phổ biến để khớp bất kỳ nhân vật nào nếu bạn không thể sử dụng DOTALL.
(?:.|\\v)*
, vì JDK-6337993 .
Có rất nhiều công cụ kiểm tra và phát triển regex tinh vi, nhưng nếu bạn chỉ muốn một khai thác thử nghiệm đơn giản trong Java, thì đây là một công cụ để bạn chơi với:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Bây giờ bạn có thể dễ dàng thêm các mẫu thử mới và thử các mẫu mới. Hãy vui vẻ khám phá regex.
Không, *
sẽ phù hợp với các ký tự không hoặc nhiều hơn. Bạn nên sử dụng +
, phù hợp với một hoặc nhiều thay thế.
Biểu thức này có thể làm việc tốt hơn cho bạn: [A-Z]+123
Cách phổ biến nhất mà tôi đã thấy để mã hóa điều này là với một lớp nhân vật có các thành viên tạo thành một phân vùng của tập hợp tất cả các ký tự có thể.
Thông thường người ta viết rằng như [\s\S]
(khoảng trắng hoặc không khoảng trắng), mặc dù [\w\W]
, [\d\D]
vv sẽ tất cả công việc.
.*
và.+
là cho bất kỳ ký tự ngoại trừ các dòng mới.
Chỉ trong trường hợp, bạn sẽ muốn bao gồm các dòng mới, các biểu thức sau đây cũng có thể hoạt động đối với những ngôn ngữ cần thoát kép như Java hoặc C ++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
không hoặc nhiều lần, hoặc
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
cho một hoặc nhiều lần
Không cần thoát kép cho một số ngôn ngữ như, C #, PHP, Ruby, PERL, Python, JavaScript:
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
Nếu bạn muốn khám phá biểu thức, nó sẽ được giải thích ở bảng trên cùng bên phải của regex101.com . Nếu bạn muốn, bạn cũng có thể xem trong liên kết này , cách nó phù hợp với một số đầu vào mẫu.
jex.im hình dung các biểu thức thông thường:
(\W|\w)*
thay vì trốn thoát gấp đôi
Giải pháp cụ thể cho vấn đề mẫu: -
Hãy thử [A-Z]*123$
sẽ phù hợp 123
, AAA123
, ASDFRRF123
. Trong trường hợp bạn cần ít nhất một nhân vật trước khi 123
sử dụng [A-Z]+123$
.
Giải pháp chung cho câu hỏi (Cách khớp "bất kỳ ký tự" nào trong biểu thức chính quy):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
phải phù hợp với bất kỳ nhân vật, bao gồm cả dòng mới. [^
CHARS]
phù hợp với tất cả các ký tự ngoại trừ các ký tự trong CHARS . Nếu CHARS trống, nó phù hợp với tất cả các ký tự.
Ví dụ về JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Hãy thử regex .{3,}
. Điều này sẽ phù hợp với tất cả các nhân vật ngoại trừ một dòng mới.
Tôi làm việc này Không phải lúc nào dấu chấm cũng có nghĩa là bất kỳ char. Ngoại lệ khi chế độ dòng đơn. \p{all}
nên là
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}