จับคู่คำที่มีอักขระเกิน a-zA-Z


15

เพื่อให้ตรงกับคำที่สามารถใช้ได้

\v(\w+)

จากความช่วยเหลือเป็นกลุ่ม:h \w:

\ w อักขระคำ: [0-9A-Za-z_]

สิ่งนี้ทำงานได้อย่างตรงตามที่อธิบายไว้ในคู่มือ แต่ผมต้องการที่จะตรงกับคำที่ประกอบด้วยอักขระเกินa-zเช่น prästgården การจับคู่นิพจน์ทั่วไป\v(\w+)กับ prästgårdenให้ผลเป็นสามการแข่งขันแทน:

prästgården
^^ ^^^ ^^^^

จะจับคู่คำที่มีตัวอักษรเกินได้a-zอย่างไร สถานที่ตั้งของฉันถูกตั้งค่าเป็นภาษาอังกฤษและถ้าเป็นไปได้ฉันต้องการที่จะให้มันเป็นอย่างนั้น

แก้ไข:คำอาจไม่อยู่ในสถานที่เดียวเช่น

prästgården
treść

คลาสอักขระ POSIX (เช่น[[:alpha:]]\+ในกรณีนี้) ควรทำสิ่งที่คุณต้องการที่นี่ แต่ตาม Vim docs ( :help regex) มันไม่ได้: "รายการเหล่านี้ใช้ได้กับอักขระ 8 บิตเท่านั้น" มันเกิดขึ้นกับการทำงานที่นี่กับ Vim 7.3 บน OS X 10.8 แต่ Vim 7.3 บน Linux ไม่ทำงานดังนั้นฉันจึงคิดว่ามีบางสิ่งที่เฉพาะเจาะจงเกี่ยวกับ Vim ของ Apple ที่อนุญาต คุณจะพบว่าการทำผ่านการเชื่อม Vim Perl ก็ล้มเหลวเช่นกันแม้ว่า Perl จะรองรับ Unicode ที่ดีมาก คุณอาจต้องเปลี่ยนไปใช้สคริปต์ Perl ภายนอกดังนั้นคุณสามารถเปิดการสนับสนุน Unicode แบบเต็ม
Warren Young

อย่างไรก็ตามถ้าคุณใช้ Perl คุณต้องการใช้\p{Word}แทนคลาสอักขระ POSIX มีหลายกรณียกเว้นในการจัดการคลาสอักขระ POSIX ของ Perl ซึ่งคุณหลีกเลี่ยงเมื่อคุณใช้คุณสมบัติ Unicode แทน
Warren Young

คำตอบ:


9

Vim (ตั้งแต่รุ่น 7.3) มีข้อ จำกัด อย่างมากเกี่ยวกับการสนับสนุนอักขระที่ไม่ใช่ ASCII ในรูปแบบ โดยเฉพาะอย่างยิ่ง\wตรงกับตัวอักษร ASCII ซึ่งมีประโยชน์ จำกัด

มีรูปแบบคลาสอักขระบางตัวที่รองรับ Unicode กับความสนใจของคุณอยู่\Iซึ่งจากการแข่งขันและมีขนาดใหญ่ตัวอักษรและตัวอักษรบวกและ_ @อย่างน้อยใน Debian บีบ (ในสถานที่ UTF-8) มีข้อผิดพลาด; ตัวอย่าง×และ÷จับคู่เป็นตัวอักษร แต่ตัวอักษรเน้นเสียงละตินทั้งหมดจะถูกจดจำได้อย่างถูกต้อง \Iสามารถกำหนดค่าผ่านisidentตัวเลือกอย่างน้อยสำหรับส่วน ASCII

หากคุณต้องการการสนับสนุน Unicode ที่จริงจังคุณจะต้องพึ่งพาเครื่องมือภายนอก ตัวอย่างเช่นperl -C -e '/\p{L}/'เพื่อจับคู่ตัวอักษร UTF-8 (สมมติว่าเป็นโลแคล UTF-8)



2

มันใช้ได้กับ Cyrillic ด้วย

\v\k

ค่อนข้างซับซ้อนและล้มเหลวด้วย Cyrillic

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

คุณหมอ

ทดสอบในกลุ่ม 7.4


ฉันต้องการเพิ่ม[=l=]ในรายการที่จะครอบคลุมł(เช่นzłoty) ฯลฯ ด้วย แต่สิ่งนี้ล้มเหลวสำหรับรัสเซียแล้ว อย่างไรก็ตามขอขอบคุณสำหรับการแบ่งปัน
Marco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.