如何在vim正则表达式中简短地定义一个包含区域变音符号的字母,而不是直接枚举它们?

4
"[a-z]"正则表达式集非常好,但它不包括地区字符。在Vim中是否可以更简洁地定义一个包含本地字符(在我的情况下,是波兰字符)的字母集,而无需直接枚举它们?
[a-zA-ZąęóśćźżńłĄĘÓŚĆŹŻŃŁ]

以下是用例: https://regex101.com/r/9y0XlH/1 为什么?
直接这样做很繁琐,容易出错。

\k 匹配所有这里的字符,但它取决于你的 iskeyword 设置。 - melpomene
使用Unicode怎么样! - Youcef LAIDANI
请参见 https://unix.stackexchange.com/a/60600 - Wiktor Stribiżew
1个回答

0

字符范围似乎可覆盖Unicode代码点值(在vim 8.0大版本上测试过)。假设您只想在波兰键盘上输入字符,请使用[a-zA-ZÓóĄ-ż]匹配您给定的任何字符。请注意,这将匹配非波兰字符,例如Œ会匹配,因为它在代码点值中介于Ą和ż之间。

我用来构造该正则表达式的方法是查看所需字符的Unicode块,然后选择具有最小代码点和最大代码点的可输入字符。如果您不想匹配这些字符之间的某些字符,请将其分成更小的范围。例如,当尝试匹配Latin-1中的所有冰岛语字符时,为了避免匹配×和÷,您需要使用三个范围。一个用于匹配×之前的字母,一个用于匹配×和÷之间的内容,一个用于匹配÷之后的字母。当然,这仍然会匹配许多非冰岛语字符,但匹配的其他字符至少将是字母。

由于Unicode在某种程度上是按语言排列的,因此我能够寻找添加对波兰语(拉丁文扩展-A)支持的块作为起点。然后,我需要从Latin-1中添加Ó和ó,以获取所有不在a-zA-Z中的波兰字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接