ควรจับคู่ต่อไปนี้:
AAA123
ABCDEFGH123
XXXX123
ฉันสามารถทำได้: ".*123"
?
ควรจับคู่ต่อไปนี้:
AAA123
ABCDEFGH123
XXXX123
ฉันสามารถทำได้: ".*123"
?
คำตอบ:
ใช่คุณสามารถ. ว่าควรจะทำงาน
.
ตัวอักษรใด ๆ\.
= อักขระจุดจริง.?
= .{0,1}
= จับคู่อักขระศูนย์หรือหนึ่งครั้ง.*
= .{0,}
= จับคู่อักขระถ่านศูนย์หรือมากกว่านั้น.+
= .{1,}
= จับคู่ถ่านหนึ่งหรือหลายครั้งใช่ว่าใช้งานได้ แต่โปรดทราบว่า.
จะไม่ตรงกับบรรทัดใหม่ยกเว้นว่าคุณผ่านการตั้งค่าสถานะDOTALLเมื่อรวบรวมนิพจน์:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
จะจับคู่บรรทัดใหม่ ฉันดีใจที่ฉันอ่านคำตอบของคุณฉันต้องใช้มัน!
{.,\n,\r,\u2028,\u2029,\u0085}
เพื่อจับคู่อักขระใด ๆ (อักขระ Unicode เป็นอักขระที่ลงท้ายด้วยบรรทัดเพิ่มเติมที่ไม่ได้จับคู่กับ.
ใน Java) แต่{.,\n,\r}
จะใช้ได้กับไฟล์ข้อความส่วนใหญ่
[\s\S]
เป็นวิธียอดนิยมในการจับคู่อักขระใด ๆ หากคุณไม่สามารถใช้ DOTALL ได้
ใช้รูปแบบ.
เพื่อจับคู่อักขระใด ๆ หนึ่งครั้ง.*
เพื่อจับคู่อักขระใด ๆ ที่เป็นศูนย์หรือมากกว่านั้น .+
เพื่อจับคู่อักขระใด ๆ หนึ่งครั้งขึ้นไป
มีเครื่องมือทดสอบและพัฒนา regex ที่ซับซ้อนมากมาย แต่ถ้าคุณต้องการใช้ชุดทดสอบอย่างง่ายใน Java ต่อไปนี้เป็นสิ่งที่คุณสามารถเล่นกับ:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
ตอนนี้คุณสามารถเพิ่มชุดทดสอบใหม่และลองรูปแบบใหม่ได้อย่างง่ายดาย ขอให้สนุกกับการสำรวจ regex
ไม่*
จะจับคู่กับอักขระศูนย์หรือมากกว่า คุณควรใช้+
ซึ่งตรงกับหนึ่งหรือมากกว่าแทน
การแสดงออกนี้อาจทำงานได้ดีขึ้นสำหรับคุณ: [A-Z]+123
วิธีที่พบมากที่สุดที่ฉันเคยเห็นในการเข้ารหัสนี้คือคลาสอักขระที่สมาชิกสร้างพาร์ติชันของชุดอักขระที่เป็นไปได้ทั้งหมด
คนมักจะเขียนว่าเป็น[\s\S]
(ช่องว่างหรือไม่ว่าง) แม้[\w\W]
, [\d\D]
ฯลฯ จะทำงานทั้งหมด
.*
และ.+
สำหรับตัวอักษรใด ๆ ยกเว้นบรรทัดใหม่
ในกรณีที่คุณต้องการรวมบรรทัดใหม่นิพจน์ต่อไปนี้อาจใช้ได้กับภาษาเหล่านั้นที่จำเป็นต้องใช้การหลบหลีกสองครั้งเช่น Java หรือ C ++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
สำหรับศูนย์หรือมากกว่านั้นหรือ
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
หนึ่งครั้งขึ้นไป
ไม่จำเป็นต้องใช้การ Escape ซ้ำสองครั้งสำหรับบางภาษาเช่น, 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
หากคุณต้องการที่จะสำรวจการแสดงออกจะได้รับการอธิบายบนแผงด้านบนขวาของregex101.com หากคุณต้องการคุณยังสามารถดูในลิงค์นี้ว่ามันจะตรงกับอินพุตตัวอย่างบางส่วนได้อย่างไร
jex.imเห็นภาพการแสดงออกปกติ:
(\W|\w)*
แทนที่จะหลบหนีสองเท่า
วิธีแก้ไขปัญหาเฉพาะสำหรับตัวอย่าง: -
ลอง[A-Z]*123$
จะตรง123
, ,AAA123
ASDFRRF123
ในกรณีที่คุณต้องไม่น้อยกว่าตัวละครก่อนที่จะใช้งาน123
[A-Z]+123$
โซลูชันทั่วไปสำหรับคำถาม (วิธีจับคู่ "อักขระใด ๆ " ในนิพจน์ทั่วไป):
[\w|\W]{min_char_to_match,}
หากคุณกำลังมองหาอะไรรวมถึงช่องว่างที่คุณสามารถลอง[\S]{min_char_to_match,}
ถ้าคุณกำลังพยายามที่จะตรงกับอะไรยกเว้นช่องว่างที่คุณสามารถลอง[^]
ควรตรงกับตัวละครใด ๆ รวมถึงการขึ้นบรรทัดใหม่ [^
CHARS]
ตรงกับตัวละครทุกตัวยกเว้นสำหรับผู้ที่อยู่ในCHARS ถ้าCHARSว่างเปล่ามันตรงกับตัวละครทุกตัว
ตัวอย่าง JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
ลอง .{3,}
regex สิ่งนี้จะตรงกับตัวละครทั้งหมดยกเว้นบรรทัดใหม่
ฉันทำงานนี้จุดไม่เสมอหมายถึงอักขระใด ๆ ข้อยกเว้นเมื่อโหมดบรรทัดเดียว \p{all}
ควรจะเป็น
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");
}