使用正则表达式拒绝数组中的项目的语法

syntax for rejecting items in array with regex

我的阵列有这个功能:

my_arr.delete_if{|x| x=~/achievement\..*?/}

它删除数组中与模式 achievement. 匹配的所有字符串。是否有类似的一行来做相反的事情(只接受包含 achievement.?

的字符串

好吧,更好的解决办法肯定是用keep_if.

OP询问是否有办法

only accept strings that contain "achievement."

所以是的,同样不是最好的方法,但你可以使用负前瞻:(?!exp):

my_arr.delete_if{|x| x=~/(?!achievement\..*?)/}

另一种选择,仍然使用 delete_if 是使用 "not equals matching" 运算符(感谢@Cary):

my_arr.delete_if{|x| x!~/achievement\..*?/}

再次感谢@Cary,指出在任何人的代码中都找不到这种令人愉快的逻辑,因此请使用 keep_if

使用Array#keep_if代替#delete_if

my_arr.keep_if{|x| x=~/achievement\..*?/}

不需要修改regex,可以使用Array#keep_if.

my_arr.keep_if{|x| x=~/achievement\..*?/}