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

问题描述 投票:0回答:2

[a-z]
正则表达式集非常棒,但它不包含区域字符。

Vim 是否可以以更简洁的方式定义一个包含本地字符(在我的例子中是波兰语字符)的字母集,而不直接枚举它们?

[a-zA-ZąęóśćźżńłĄĘÓŚĆŹŻŃŁ]

以下用例:

https://regex101.com/r/9y0XlH/1

为什么?

直接做比较繁琐且容易出错。

regex vim
2个回答
0
投票

字符范围似乎适用于 unicode 代码点值(在 vim 8.0 巨大版本上测试)。假设您只想在波兰语键盘上输入字符,使用

[a-zA-ZÓóĄ-ż]
来匹配您提供的任何字符。 请注意,这会匹配非波兰语字符,例如
Œ
会匹配,因为它位于 Ą 和 ż 之间在代码点值中。

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

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


0
投票

您可以使用这个:

/[^ ]\+

这匹配除“white-space”之外的任何字符,你可以用它来玩。

© www.soinside.com 2019 - 2024. All rights reserved.