6

例如,我设置了这些:

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

所以/(#{K}#{V}{2})/匹配"ßäÜ""azAZßäÜ".

有没有更好的方法来对付它们?

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

此外,我可以只让元字符\L,\V\K(或任何尚未在 Ruby 中设置的)在正则表达式中代表它们,所以我不必一直做字符串插值吗?

4

2 回答 2

1

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

例如:

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 中,您会很快掌握它的窍门。

于 2013-11-18T15:10:33.370 回答
0

对您现在所做的一个小改进是对类别或脚本使用正则表达式 unicode 支持

如果您L想成为任何字母,请使用\p{L}. 或者\p{Latin},如果您希望它表示拉丁文字中的任何字母(所有德语字母都是),请使用。

我不认为元音和辅音是内置的。

请参阅\p{L} 匹配您的示例

于 2014-03-29T13:19:30.200 回答