如何创建一个匹配模式的正则表达式,除了Ruby中的一些字符串?

nic*_*ine 2 ruby regex

我在Ruby中工作,并且必须为以下任务创建一个正则表达式,因为我正在使用其他人的gem,它使用此正则表达式来匹配要在文本文件中处理的字段.我需要匹配字符串的开头,任何字符集和下划线,然后匹配不是1,2,9或10的任何多位整数,以及字符串的结尾.
即,我希望以下内容匹配:

foo_4
bar_8
baz_120
Run Code Online (Sandbox Code Playgroud)

但不是:

foo_1
bar_9
baz_10
Run Code Online (Sandbox Code Playgroud)

我试过了

/^.+_(^(1|2|9|10))$/
Run Code Online (Sandbox Code Playgroud)

但它没有工作,因为显然^只是在括号中"否定"字符,而不是子字符.

Mar*_*ers 5

在字符类之外,^符号表示行的开头.我想你想要一个负面的先行:

/^.+_(?!(?:1|2|9|10)$)\d+$/
Run Code Online (Sandbox Code Playgroud)

rubular中查看它的实际操作.

  • `^`表示行的开头,而不是字符串的开头.`\ A`表示字符串的开头. (3认同)
  • 没有.`^`**总是**表示行的开始,无论你是否使用`m`标志来执行多行匹配.当您确定要匹配的字符串中没有换行符时,您只能忽略差异. (3认同)