Elisp regexps ^ และ $ vs `และ '


16

คู่มืออธิบายตัวละคร regexp พิเศษและ^ $เช่นเดียวกับในภาษาถิ่นปกติส่วนใหญ่ฉันรู้ว่าพวกเขาดูเหมือนจะตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของสตริง อย่างไรก็ตามฉันยังค้นพบว่ามี`และ'ตัวละครที่ใช้ได้ จากคำอธิบายที่พบที่นี่พวกเขาดูเหมือนจะตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของสตริง ใครช่วยอธิบายความแตกต่างระหว่างตัวละครพิเศษเหล่านี้พร้อมตัวอย่างและคำแนะนำในการใช้เมื่อไหร่?

เมื่อฉันดูค่าของauto-mode-alistพวกเขาดูเหมือนจะใช้แทนกันเพื่อให้ตรงกับจุดสิ้นสุดของสตริง:

(...
 ("\\.scss\\'" . scss-mode)
 ("\\.ya?ml$" . yaml-mode)
...)

2
เมื่อคนใช้$เช่นนั้นพวกเขาเป็นธนาคารในชื่อไฟล์ที่ไม่ได้ขึ้นบรรทัดใหม่ นี้จะมักจะไปได้ (มาก) สมมติฐานปลอดภัย แต่ก็ไม่ได้รับประกัน การใช้\\'จึงเป็นแนวปฏิบัติที่ดีที่สุด
phils

คำตอบ:


14

สตริงของคุณอาจมีอักขระขึ้นบรรทัดใหม่ที่ฝังตัวซึ่งในกรณีนี้\'ตรงกับจุดสิ้นสุดของสตริง แต่$ตรงกับก่อนอักขระขึ้นบรรทัดใหม่

ในการอ้างอิงคู่มือ Elisp, โหนดRegexp พิเศษ :

เมื่อจับคู่สตริงแทนที่จะเป็นบัฟเฟอร์ `$ 'จะจับคู่ที่ส่วนท้ายของสตริงหรือก่อนอักขระขึ้นบรรทัดใหม่

ในทำนองเดียวกัน\`ตรงกับจุดเริ่มต้นของสตริง แต่^ตรงกับอักขระขึ้นบรรทัดใหม่ อีกครั้งคู่มือ:

เมื่อจับคู่สตริงแทนที่จะเป็นบัฟเฟอร์ `^ 'จะจับคู่ที่จุดเริ่มต้นของสตริงหรือหลังอักขระบรรทัดใหม่

ดังนั้นสำหรับสตริงที่คุณต้องการใช้\`และ\'โดยเฉพาะอย่างยิ่งถ้าโค้ดของคุณไม่สามารถรู้ล่วงหน้าว่าอาจมีตัวอักษรขึ้นบรรทัดใหม่ในสตริง สำหรับข้อความใน buffer คุณมักจะใช้และ^$


6
(string-match "^foo" "foo")         ; => 0
(string-match "\\`foo" "foo")       ; => 0
(string-match "^foo" "bar\nfoo")    ; => 4
(string-match "\\`foo" "bar\nfoo")  ; => nil

(string-match "foo$" "foo")         ; => 0
(string-match "foo\\'" "foo")       ; => 0
(string-match "foo$" "foo\nbar")    ; => 0
(string-match "foo\\'" "foo\nbar")  ; => nil

^และ$ตรงกับจุดเริ่มต้นและจุดสิ้นสุดของเส้น

\`และ\'ตรงกับจุดเริ่มต้นและจุดสิ้นสุดของสตริงทั้งหมด


2
there are ` and ' characters available. [...] they seem to also match the start or end of strings

อักขระพิเศษคือ: . * + ? ^ $ \ [.

ระหว่างวงเล็บ[]ต่อไปนี้เป็นพิเศษเช่นกัน:] - ^

อักขระจำนวนมากรวมถึง backtick `และเครื่องหมายคำพูดเดียว 'กลายเป็นสิ่งพิเศษเมื่อพวกเขาติดตามแบ็กสแลช ดูที่นี่สำหรับรายละเอียดเพิ่มเติม

Could someone please explain the difference between these special characters, with an example and recommendation on when to use them?

มีความแตกต่างระหว่างการเป็นและbeginning of stringbeginning of each line in the string

ความอนุเคราะห์จาก Ergoemacs คุณสามารถอ่านเพิ่มเติมได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.