การสร้างบทสรุปของการแสดงออกปกติ
สร้างการแข่งขัน
อักขระ
อักขระ x x
// อักขระ backslash
/0n อักขระ n ที่มีค่าแปดเท่า 0 (0 <= n <= 7)
/0nn อักขระ nn ที่มีค่าแปดเท่า 0 (0 <= n <= 7)
/0mnn อักขระ Mnn ที่มีค่าแปดเท่า 0 (0 <= m <= 3, 0 <= n <= 7)
/XHH ตัวละคร HH กับค่าเลขฐานสิบหก 0x
/uhhhh ตัวละคร hhhhh กับ hexadecimal value 0x
/t แท็บ ('/u0009')
/n บรรทัดใหม่ (ตัวแบ่งบรรทัด) ('/u000a')
/r ตัวอักษร Return Carriage ('/u000d')
/f page break ('/u000c')
สัญลักษณ์/A Alarm (Bell) ('/u0007')
/E escape character ('/u001b')
/cx สอดคล้องกับ x
ชั้นเรียน
[ABC] A, B หรือ C (คลาสง่าย)
[^abc] ตัวละครใด ๆ ยกเว้น A, B หรือ C (ลบ)
[a-za-z] a ถึง z หรือ a ถึง z ตัวอักษรที่ปลายทั้งสองจะรวมอยู่ (ช่วง)
[AD [MP]] A ถึง D หรือ M ถึง P: [A-DM-P] (Union)
[az && [def]] d, e หรือ f (สี่แยก)
[az && [^bc]] a ถึง z ยกเว้น b และ c: [ad-z] (ลบ)
[az && [^mp]] a ถึง z ไม่ใช่ m ถึง p: [a-lq-z] (ลบ)
คลาสอักขระที่กำหนดไว้ล่วงหน้า
- อักขระใด ๆ (อาจหรืออาจไม่ตรงกับอักขระสิ้นสุดบรรทัด)
/d หมายเลข: [0-9]
/d ไม่ใช่หมายเลข: [^0-9]
อักขระ Whitespace: [/t/n/x0b/f/r]
/s อักขระที่ไม่ใช่ Whitespace: [^/s]
อักขระ Word /W: [A-ZA-Z_0-9]
/w อักขระที่ไม่ใช่คำ: [^/w]
คลาสอักขระ Posix (US-ASCII เท่านั้น)
/P {Lower} ตัวอักษรตัวพิมพ์เล็ก: [AZ]
/p {Upper} ตัวอักษรตัวอักษรตัวพิมพ์ใหญ่: [AZ]
/p {ascii} ascii ทั้งหมด: [/x00-/x7f]
/p {alpha} อักขระอัลฟ่า: [/p {ล่าง}/p {Upper}]
/p {digit} เลขทศนิยม: [0-9]
/p {alnum} อักขระตัวอักษรและตัวเลข: [/p {alpha}/p {digit}]
/p {punct} เครื่องหมายวรรคตอน:! "#$%& '()*+,-./:; <=>?@[/]^_` `{|} ~
/p {กราฟ} อักขระที่มองเห็นได้: [/p {alnum}/p {punct}]
/p {print} อักขระที่พิมพ์ได้: [/p {graph}/x20]
/p {blank} space หรือ tab อักขระ: [ /t]
/p {cntrl} อักขระควบคุม: [/x00-/x1f/x7f]
/p {xdigit} เลขฐานสิบหก: [0-9a-fa-f]
/p {space} อักขระ Whitespace: [/t/n/x0b/f/r]
Java.lang.Character Class (ประเภทอักขระ Java ง่าย)
/p {javalowercase} เทียบเท่ากับ java.lang.character.islowercase ()
/p {Javauppercase} เทียบเท่ากับ java.lang.character.isuppercase ()
/p {Javawhitespace} เทียบเท่ากับ java.lang.character.iswhitespace ()
/p {Javamirrored} เทียบเท่ากับ java.lang.character.ismirrored ()
บล็อกและชั้นเรียน Unicode
/p {ingreek} อักขระในบล็อกกรีก (บล็อกง่าย ๆ )
/p {lu} ตัวอักษรตัวพิมพ์ใหญ่ (หมวดหมู่ง่าย ๆ )
/p {sc} สัญลักษณ์สกุลเงิน
/p {ingreek} อักขระทั้งหมดยกเว้นในบล็อกกรีก (ลบ)
[/p {l} && [^/p {lu}]] ตัวอักษรทั้งหมดยกเว้นตัวพิมพ์ใหญ่ (ลบ)
ตัวจับคู่เขตแดน
^ จุดเริ่มต้นของบรรทัด
จุดสิ้นสุดของ $ line
/b ขอบเขตคำ
/B ขอบเขตที่ไม่ใช่คำ
/จุดเริ่มต้นของอินพุต
/g สิ้นสุดการแข่งขันก่อนหน้านี้
จุดสิ้นสุดของอินพุต /z เฉพาะสำหรับอักขระสุดท้ายสุดท้าย (ถ้ามี)
จุดสิ้นสุดของอินพุต /z
คำเชิงปริมาณโลภ
x? X, ครั้งเดียวหรือครั้งเดียวไม่
x* x, ศูนย์หรือหลายครั้ง
x+ x, ครั้งหรือมากกว่า
x {n} x แน่นอนว่า n ครั้ง
x {n,} x อย่างน้อย n ครั้ง
x {n, m} x, อย่างน้อย n ครั้ง แต่ไม่เกิน m ครั้ง
คำเชิงปริมาณที่ไม่เต็มใจ
x ?? X, ครั้งเดียวหรือครั้งเดียวไม่
x*? x, ศูนย์หรือหลายครั้ง
x+? x, ครั้งหรือมากกว่า
x {n}? x, n ครั้งแน่นอน
x {n,}? x อย่างน้อย n ครั้ง
x {n, m}? x อย่างน้อย n ครั้ง แต่ไม่เกิน m ครั้ง
คำพูดเชิงปริมาณที่เป็นเจ้าของ
x?+ x, ครั้งเดียวหรือครั้งเดียวไม่
x*+ x, ศูนย์หรือหลายครั้ง
x ++ x, ครั้งหรือมากกว่า
x {n}+ x, n ครั้งแน่นอน
x {n,}+ x อย่างน้อย n ครั้ง
x {n, m}+ x, อย่างน้อย n ครั้ง แต่ไม่เกิน m ครั้ง
ตัวดำเนินการเชิงตรรกะ
xy x ส้นเท้า y
x | yx หรือ y
(x) x เป็นกลุ่มจับภาพ
ใบเสนอราคากลับ
/n กลุ่มจับคู่ที่ตรงกันใด ๆ
อ้าง
/ไม่มีอะไร แต่อ้างถึงอักขระต่อไปนี้
/q ไม่มีอะไร แต่เสนอราคาอักขระทั้งหมดจนกระทั่ง /e
/ไม่มีอะไร แต่จบการอ้างอิงเริ่มต้นด้วย /Q
การก่อสร้างพิเศษ (ไม่ได้จับ)
(?: x) x เป็นกลุ่มที่ไม่จับกุม
(? idmsux -idmsux) ไม่มีอะไร แต่จะตรงกับ Flag Idmsux ON - OFF
(? idmsux -idmsux: x) x, เป็น on -on -on - ปิด - ปิดด้วยธงที่กำหนด
กลุ่มที่ไม่ได้รับการจับ
(?! x) x, ผ่านศูนย์ความกว้างเชิงลบ lookahead
(? <= x) x ผ่าน lookbehind บวกความกว้างเป็นศูนย์
(? <! x) x, lookbehind ลบถึงความกว้างเป็นศูนย์
(?> x) x เป็นกลุ่มที่ไม่ได้รับการจับ
-
backslashes หลบหนีและการอ้างอิง
ตัวละครแบ็คสแลช ('/') ใช้เพื่ออ้างอิงโครงสร้างการหลบหนีตามที่กำหนดไว้ในตารางด้านบนและเพื่ออ้างอิงอักขระอื่น ๆ ที่จะตีความว่าเป็นโครงสร้างที่ไม่ได้ถูกล้น ดังนั้นนิพจน์ // ตรงกับ backslash เดียวและ /{จับคู่วงเล็บซ้าย
มันผิดที่จะใช้แบ็คสแลชก่อนที่ตัวอักษรใด ๆ ที่ไม่ได้เป็นตัวแทนของโครงสร้างการหลบหนี พวกเขาถูกสงวนไว้สำหรับการขยายในอนาคตของภาษานิพจน์ทั่วไป แบ็คสแลชสามารถใช้ก่อนที่ตัวละครที่ไม่ใช่ตัวอักษรไม่ว่าตัวละครจะไม่ได้เป็นส่วนหนึ่งของโครงสร้างที่หลบหนีหรือไม่
ตามข้อกำหนดของข้อกำหนดภาษา Java แบ็คสแลชในสตริงของซอร์สโค้ด Java ถูกตีความว่าเป็นการหลบหนี Unicode หรือตัวละครอื่น ๆ ดังนั้นจึงต้องใช้แบ็คสแลชสองตัวในสตริงตัวอักษรเพื่อระบุว่าการแสดงออกปกติได้รับการปกป้องและไม่ตีความโดยคอมไพเลอร์จาวาไบต์ ตัวอย่างเช่นเมื่อตีความว่าเป็นนิพจน์ทั่วไปสตริงตัวอักษร "/b" ตรงกับตัวละคร backspace เดียวและ "// b" ตรงกับขอบเขตคำ สตริงตัวอักษร "/(hello/)" ผิดกฎหมายและจะทำให้เกิดข้อผิดพลาดในการรวบรวมเวลา; ในการจับคู่สตริง (สวัสดี) ต้องใช้สตริงตัวอักษร "// (hello //)"
ชั้นเรียน
คลาสอักขระสามารถปรากฏในคลาสอักขระอื่น ๆ และสามารถมีตัวดำเนินการยูเนี่ยน (โดยปริยาย) และตัวดำเนินการแยก (&&) ตัวดำเนินการยูเนี่ยนแสดงคลาสที่มีอักขระอย่างน้อยทั้งหมดในหนึ่งในคลาสของตัวถูกดำเนินการ ตัวดำเนินการสี่แยกแสดงคลาสที่มีอักขระทั้งหมดในคลาสตัวถูกดำเนินการสองคลาสในเวลาเดียวกัน
ลำดับความสำคัญของตัวดำเนินการคลาสอักขระมีดังนี้จัดเรียงตามลำดับจากสูงสุดไปต่ำสุด:
1 หลบหนีตามตัวอักษร/x
2 กลุ่ม [... ]
3 ช่วง AZ
4 Union [AE] [IU]
5 สี่แยก [AZ && [aeiou]]
โปรดทราบว่าชุด metacharacters ที่แตกต่างกันนั้นตั้งอยู่ภายในคลาสอักขระไม่ใช่นอกคลาสอักขระ ตัวอย่างเช่นการแสดงออกปกติ ความหมายพิเศษหายไปในคลาสตัวละครและการแสดงออก - กลายเป็นช่วงที่สร้าง metacharacters
อักขระสิ้นสุดบรรทัด
อักขระที่สิ้นสุดของบรรทัดคือลำดับของอักขระหนึ่งหรือสองตัวที่ทำเครื่องหมายจุดสิ้นสุดของบรรทัดของลำดับอักขระอินพุต รหัสต่อไปนี้ได้รับการยอมรับว่าเป็นอักขระสิ้นสุดบรรทัด:
ตัวอักษรบรรทัดใหม่ (บรรทัดใหม่) ('/n')
ตัวละคร Return Carriage ("/r/n") ตามด้วยอักขระบรรทัดใหม่
อักขระการคืนรถแยกต่างหาก ('/r')
อักขระบรรทัดถัดไป ('/u0085')
ตัวคั่นบรรทัด ('/u2028') หรือ
ตัวคั่นย่อหน้า ('/U2029)
หากเปิดใช้งานโหมด UNIX_LINES อักขระบรรทัดใหม่เป็นอักขระปลายบรรทัดที่ไม่เหมือนใคร
หากไม่ได้ระบุธง dotall นิพจน์ปกติ สามารถจับคู่อักขระใด ๆ (ยกเว้นจุดสิ้นสุดของบรรทัด)
โดยค่าเริ่มต้นการแสดงออกปกติ ^ และ $ ละเว้นการสิ้นสุดของบรรทัดและตรงกับจุดเริ่มต้นและจุดสิ้นสุดของลำดับอินพุตทั้งหมดตามลำดับ หากเปิดใช้งานโหมด multiline การจับคู่จะเกิดขึ้นหลังจากจุดเริ่มต้นของอินพุตและจุดสิ้นสุดของบรรทัด (ส่วนท้ายของอินพุต) เมื่ออยู่ในโหมด multiline $ จะตรงกับก่อนที่บรรทัดจะสิ้นสุดหรือในตอนท้ายของลำดับอินพุต
กลุ่มและจับภาพ
กลุ่มจับภาพสามารถกำหนดหมายเลขได้โดยการคำนวณวงเล็บเปิดจากซ้ายไปขวา ตัวอย่างเช่นในนิพจน์ ((a) (b (c)))) มีสี่กลุ่มดังกล่าว:
1 ((a) (b (c)))
2 /A
3 (b (c))
4 (c)
ศูนย์กลุ่มมักจะเป็นตัวแทนของนิพจน์ทั้งหมด
กลุ่มการจับภาพมีชื่อด้วยวิธีนี้เพราะในการแข่งขันแต่ละลำดับของลำดับอินพุตที่ตรงกับกลุ่มเหล่านั้นจะถูกบันทึกไว้ ต่อมาที่จับได้สามารถใช้ในภายหลังในนิพจน์ผ่านการอ้างอิงกลับหรือสามารถรับได้จากตัวจับคู่หลังจากการดำเนินการจับคู่เสร็จสิ้น
อินพุตการจับภาพที่เกี่ยวข้องกับกลุ่มมักจะเป็นลำดับที่ตรงกับกลุ่มล่าสุด หากกลุ่มถูกคำนวณอีกครั้งเนื่องจากการวัดปริมาณค่าที่จับก่อนหน้านี้จะถูกเก็บไว้ในความล้มเหลวในการคำนวณครั้งที่สอง (ถ้ามี) ตัวอย่างเช่นการจับคู่สตริง "ABA" กับนิพจน์ (a (b)?)+ จะตั้งกลุ่มที่สองเป็น "B" ในตอนต้นของการแข่งขันแต่ละครั้งอินพุตที่จับได้ทั้งหมดจะถูกยกเลิก
กลุ่มที่เริ่มต้นด้วย (?) เป็นกลุ่มที่ไม่ได้รับการจับที่บริสุทธิ์ซึ่งไม่ได้จับข้อความและไม่นับรวมกับการนับคอมโบ
ข้างต้นเป็นเนื้อหาทั้งหมดของนิพจน์ทั่วไป (แนะนำโดยบทความไวยากรณ์) ที่นำมาให้คุณโดยบรรณาธิการ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น ~