如何为字母,元音和辅音等德语字符类编写正则表达式?

时间:2013-04-19 09:39:22

标签: ruby regex customization character-class metacharacters

例如,我设置了这些:

L = /[a-z,A-Z,ßäüöÄÖÜ]/
V = /[äöüÄÖÜaeiouAEIOU]/
K = /[ßb-zBZ&&[^#{V}]]/

/(#{K}#{V}{2})/"ßäÜ"中的"azAZßäÜ"匹配。

有没有更好的方法来处理它们?

我可以将这些常量放在我的Ruby安装文件夹中某个文件的模块中,所以我可以在我在计算机上编写的任何新脚本中包含/要求它们吗? (我是一个新手,我知道我弄糊涂了这个术语;请纠正我。)

此外,我是否可以只获取元字符\L\V\K(或者已经在Ruby中设置的任何内容)来代表它们的正则表达式,所以我不必一直做那个字符串插值的东西?

2 个答案:

答案 0 :(得分:1)

你开始很好,但你需要查看Ruby安装的Regexp类代码。有一些技巧可以编写使用String插值构建自己的模式。你编写砖块并让Ruby使用普通的String技巧构建墙和房子,然后将生成的字符串转换为真正的Regexp实例,以便在代码中使用。

例如:

LOWER_CASE_CHARS = 'a-z'
UPPER_CASE_CHARS = 'A-Z'
CHARS = LOWER_CASE_CHARS + UPPER_CASE_CHARS
DIGITS = '0-9'

CHARS_REGEX = /[#{ CHARS }]/
DIGITS_REGEX = /[#{ DIGITS }]/

WORDS = "#{ CHARS }#{ DIGITS }_"
WORDS_REGEX = /[#{ WORDS }]/

你继续从小的原子字符和字符类构建,很快就会有大的正则表达式。尝试将这些逐个粘贴到IRB中,您将很快掌握它。

答案 1 :(得分:0)

您现在所做的一点改进就是使用regex unicode support for categories or scripts

如果您的意思是L为任何字母,请使用\p{L}。或者如果你想要它是指拉丁文字母中的任何字母(所有德文字母都是),请使用\p{Latin}

我不认为有元音和辅音的内置插件。

请参阅\p{L} match your example