นิพจน์ทั่วไปไม่สามารถระบุโครงสร้างแบบเรียกซ้ำได้ นี่เป็นข้อ จำกัด พื้นฐาน
ใช้ JSON - มันเป็นรูปแบบที่ค่อนข้างเรียบง่าย แต่เนื่องจากวัตถุอาจมีวัตถุอื่น ๆ ที่เป็นค่าสมาชิก (ความลึกโดยพลการ) ไวยากรณ์นั้นวนซ้ำและไม่สามารถแยกวิเคราะห์โดย regex ในขณะที่ CSV สามารถแยกวิเคราะห์โดย regex'es เนื่องจากไม่มีโครงสร้างแบบเรียกซ้ำ
ในการแสดงออกปกติสั้น ๆ ไม่อนุญาตให้รูปแบบที่จะอ้างถึงตัวเอง คุณไม่สามารถพูดได้: ณ จุดนี้ในไวยากรณ์ตรงกับรูปแบบทั้งหมดอีกครั้ง หากต้องการใช้อีกวิธีหนึ่งนิพจน์ทั่วไปจะจับคู่กับเชิงเส้นเท่านั้นซึ่งไม่มีสแต็กที่จะอนุญาตให้ติดตามว่ามันเป็นรูปแบบซ้อนกันหรือไม่
โปรดทราบว่าไม่มีอะไรเกี่ยวข้องกับรูปแบบที่ซับซ้อนหรือซับซ้อน S-expressions นั้นง่ายจริงๆ แต่ไม่สามารถแยกวิเคราะห์ด้วย regex ในทางตรงกันข้าม CSS2 เป็นภาษาที่ค่อนข้างซับซ้อน แต่ไม่มีโครงสร้างแบบเรียกซ้ำและสามารถแยกวิเคราะห์ด้วย regex (แม้ว่าสิ่งนี้จะไม่เป็นจริงสำหรับ CSS3 เนื่องจากการแสดงออกของ CSS ซึ่งมีไวยากรณ์ซ้ำ)
ดังนั้นจึงไม่ใช่เพราะมันน่าเกลียดหรือซับซ้อนหรือมีข้อผิดพลาดในการแยกวิเคราะห์ HTML โดยใช้ regex เท่านั้น มันก็คือว่ามันเป็นเพียงไปไม่ได้
หากคุณต้องการแยกวิเคราะห์รูปแบบที่มีโครงสร้างแบบเรียกซ้ำคุณต้องเพิ่มการใช้นิพจน์ปกติด้วยสแต็กอย่างน้อยเพื่อติดตามระดับของโครงสร้างแบบเรียกซ้ำ โดยทั่วไปนี่เป็นวิธีการแยกวิเคราะห์ นิพจน์ทั่วไปใช้เพื่อรับรู้ส่วน "เชิงเส้น" ในขณะที่รหัสที่กำหนดเองนอก regex ใช้เพื่อติดตามโครงสร้างที่ซ้อนกัน
โดยทั่วไปการแยกวิเคราะห์เช่นนี้จะถูกแยกเป็นระยะ ๆ โทเค็นไลเซชันเป็นเฟสแรกที่นิพจน์ทั่วไปถูกใช้เพื่อแบ่งอินพุตเป็นลำดับของ "โทเค็น" เช่นคำเครื่องหมายวรรคตอนวงเล็บเป็นต้นการแยกเป็นเฟสถัดไปที่โทเค็นเหล่านี้จะถูกวิเคราะห์เป็นโครงสร้างลำดับชั้นต้นไม้ไวยากรณ์
ดังนั้นเมื่อคุณได้ยินว่า HTML หรือ C # ไม่สามารถแยกวิเคราะห์โดยนิพจน์ทั่วไปให้ระวังว่านิพจน์ทั่วไปยังคงเป็นส่วนสำคัญของตัวแยกวิเคราะห์ คุณไม่สามารถแยกวิเคราะห์ภาษาดังกล่าวโดยใช้นิพจน์ทั่วไปเท่านั้นและไม่มีรหัสตัวช่วย