ใน Vim คลาสอักขระจะ\sตรงกับอักขระช่องว่างใด ๆ เมื่อฉันใช้ตัวอักษรพิเศษผู้ที่อยู่ในกลุ่มเช่น[\s\w]มันไม่ตรงกับช่องว่างเดียวหรือตัวอักษรคำก็ไม่ตรงหรือsw
เราใช้คลาสตัวละครในกลุ่มได้อย่างไร
ใน Vim คลาสอักขระจะ\sตรงกับอักขระช่องว่างใด ๆ เมื่อฉันใช้ตัวอักษรพิเศษผู้ที่อยู่ในกลุ่มเช่น[\s\w]มันไม่ตรงกับช่องว่างเดียวหรือตัวอักษรคำก็ไม่ตรงหรือsw
เราใช้คลาสตัวละครในกลุ่มได้อย่างไร
คำตอบ:
นั่นไม่ใช่กลุ่มมันเป็นช่วงและใน Vim คุณไม่สามารถใช้คลาสอักขระได้ (แม้ว่าจะเป็นไปได้ในการใช้งาน regex อื่น ๆ เช่นในไพ ธ อน ) คุณจะต้องใช้ทางเลือกแทน:
/\(\w\|\s\)
หรือ:
/\v(\s|\w)
(หรือวิธีแก้ปัญหาที่เสนอโดยPeter Lewerin )
\sในคลาสของตัวละคร การใช้ regex ของ Vim นั้นเกิดขึ้นเพื่อให้มีทางเลือก แต่การใช้งานอื่น ๆ ทำให้คุณสามารถใช้งาน[\s]ได้
ต่างจากการใช้เอ็นจิ้นนิพจน์ทั่วไปบางอย่างดูเหมือนว่า Vim จะไม่สนับสนุนสัญกรณ์นั้น ( [\s\w]) ในคอลเล็กชัน หนึ่งสามารถใช้การแสดงออกของคลาสตัวละคร POSIXแม้ว่า
[:blank:]\sเป็นเช่นเดียวกับ[:space:]ตรงกับจำนวนมากของตัวอักษรช่องว่างกว่าไม่และดูเหมือนว่าจะเทียบเท่ากับ\s\_s[:alnum:]ประมาณ \wแต่ไม่ตรงกับขีดล่าง ( _)ดังนั้นคอลเลกชันที่คุณต้องการอาจจะเขียนเป็นหรือ[[:blank:][:alnum:]_][[:space:][:alnum:]_]
ผมยังไม่ได้รับการตรวจสอบโดยการทดสอบนี้ แต่มันถูกบันทึกไว้ใน:h regexp, และ:h /character-classes:h /collection
หมายเหตุการพกพา: ในเอ็นจิน regex อื่น ๆ\sโดยทั่วไปจะเหมือนกับ[:space:](หรือ\_s) อยู่ในกลุ่ม
[[:space:][:alnum:]_]สามารถใช้เพื่อประมาณค่าคอลเลกชัน\sและ\wแม้ว่า