ใน Java RegEx วิธีการหาความแตกต่างระหว่าง.(dot) อักขระ meta และจุดปกติที่เราใช้ในประโยคใด ๆ วิธีการจัดการกับสถานการณ์ที่ตัวละครเมตาอื่น ๆ มากเกินไปเช่นนี้ ( *, +, \d, ... )
ใน Java RegEx วิธีการหาความแตกต่างระหว่าง.(dot) อักขระ meta และจุดปกติที่เราใช้ในประโยคใด ๆ วิธีการจัดการกับสถานการณ์ที่ตัวละครเมตาอื่น ๆ มากเกินไปเช่นนี้ ( *, +, \d, ... )
คำตอบ:
หากคุณต้องการให้จุดหรือตัวละครอื่น ๆ ที่มีความหมายพิเศษใน regexes เป็นตัวละครปกติคุณจะต้องหลบมันด้วยแบ็กสแลช เนื่องจาก regexes ใน Java เป็นสตริง Java ปกติคุณจึงต้องหลีกเลี่ยงแบ็กสแลชเองดังนั้นคุณต้องมีแบ็กสแลชสองตัวเช่น\\. 
การแก้ปัญหาที่เสนอโดยสมาชิกคนอื่นไม่ได้ผลสำหรับฉัน
แต่ฉันพบสิ่งนี้:
เพื่อหนีจุดใน java regexp เขียน [.]
\\.ไม่ได้ทำงานสำหรับฉัน: \.บ่นว่า.ไม่จำเป็นที่จะต้องหนีไป\\.ทำให้มันคิดว่ามันเป็น\.แทน., \\\.และสร้างโยนข้อผิดพลาดที่[.]เป็นสิ่งเดียวที่ทำงาน
                    \\.ในสตริงตัวอักษรให้คุณ\.ซึ่งเป็นสิ่งที่ regex ต้องการดูจุดเป็นจุดตามตัวอักษรแทนการจับคู่ตัวละครใด ๆ
                    การแสดงออกปกติสไตล์ Perl (ซึ่งเอ็นจิน Java regex มากหรือน้อยตาม) ถือว่าตัวอักษรต่อไปนี้เป็นตัวอักษรพิเศษ:
.^$|*+?()[{\มีความหมายพิเศษนอกคลาสอักขระ
]^-\มีความหมายพิเศษภายในคลาสอักขระ ( [...])
ดังนั้นคุณต้องหลีกเลี่ยงสัญลักษณ์เหล่านั้น (และเหล่านั้นเท่านั้น) โดยขึ้นอยู่กับบริบท (หรือในกรณีของคลาสอักขระให้วางไว้ในตำแหน่งที่ไม่สามารถตีความผิด)
การหลีกเลี่ยงอักขระอื่นโดยไม่จำเป็นอาจใช้งานได้ แต่เอ็นจิน regex บางตัวจะถือว่านี่เป็นข้อผิดพลาดทางไวยากรณ์ตัวอย่างเช่น\_จะทำให้เกิดข้อผิดพลาดใน. NET
บางคนอื่น ๆ จะนำไปสู่ผลลัพธ์ที่ผิดตัวอย่างเช่น\<ถูกตีความว่าเป็นตัวอักษร<ใน Perl แต่ในegrepนั้นหมายถึง "ขอบเขตของคำ"
ดังนั้นการเขียน-?\d+\.\d+\$เพื่อการแข่งขัน1.50$, -2.00$ฯลฯ และ[(){}[\]]สำหรับตัวละครคลาสที่ตรงกับทุกชนิดของวงเล็บ / วงเล็บ / วงเล็บ
หากคุณต้องการที่จะเปลี่ยนสายป้อนผู้ใช้เป็น regex java.util.regex.Pattern.quoteปลอดภัยรูปแบบการใช้งาน
อ่านเพิ่มเติม: RegexGuru บล็อกของ Jan Goyvaert เกี่ยวกับการหลีกเลี่ยงอักขระ
หนีอักขระพิเศษด้วยแบ็กสแลช \., \*, \+, \\dและอื่น ๆ หากคุณไม่แน่ใจคุณสามารถหลีกเลี่ยงอักขระที่ไม่ใช่ตัวอักษรได้ไม่ว่าจะเป็นอักขระพิเศษหรือไม่ก็ตาม ดูที่ javadoc สำหรับ java.util.regex.Patternสำหรับข้อมูลเพิ่มเติม
นี่คือรหัสที่คุณสามารถคัดลอกวางได้โดยตรง:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
   system.out.println(imageNameArray[i]);
}
และจะเกิดอะไรขึ้นถ้ามีช่องว่างเหลืออยู่ก่อนหรือหลัง "ผิด" ในกรณีดังกล่าว? เป็นแนวปฏิบัติที่ดีที่สุดในการพิจารณาช่องว่างเหล่านั้นด้วย
String imageName = "picture1  . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
    for(int i =0; i< imageNameArray.length ; i++)
    {
       system.out.println(imageNameArray[i]);
    }
ที่นี่ \\ s * อยู่ที่นั่นเพื่อพิจารณาช่องว่างและให้สตริงที่แยกเท่านั้น
ฉันต้องการจับคู่สตริงที่ลงท้ายด้วย ". *" สำหรับสิ่งนี้ฉันต้องใช้สิ่งต่อไปนี้:
"^.*\\.\\*$"
ค่อนข้างโง่ถ้าคุณคิดเกี่ยวกับมัน: D นี่มันหมายความว่าอะไร ที่จุดเริ่มต้นของสตริงสามารถมีอักขระใด ๆ เป็นศูนย์หรือมากกว่าครั้งตามด้วยจุด "." ตามด้วยดาว (*) ที่ท้ายสตริง
ฉันหวังว่านี่จะมีประโยชน์สำหรับใครบางคน ขอบคุณสำหรับแบ็กสแลชของ Fabian
"\\.\\*$"แล้ว ไม่จำเป็นต้องตรงกันสำหรับการเริ่มต้นของสตริงถ้ามันไม่สำคัญกับคุณ
                    ถ้าคุณต้องการตรวจสอบว่าประโยคของคุณลงท้ายด้วย ". " แล้วคุณต้องเพิ่ม [\. \ ] $ ไปยังจุดสิ้นสุดของรูปแบบของคุณ
ฉันกำลังทำอาร์เรย์พื้นฐานบางอย่างใน JGrasp และพบว่าด้วยวิธีการเข้าถึงสำหรับอาร์เรย์ [] [] เพื่อใช้ ('.') เพื่อวางจุดเดียว