Ruby 写一个 “判断没有包含某个字符串的正则 “遇到的问题

nameofhsw · 2015年04月28日 · 最后由 nameofhsw 回复于 2015年04月28日 · 2780 次阅读
ine1 = "se.inc on line 329.</li>"
expect_value = "^(?!.*(mysql)).*$"                         
reg = Regexp.new(expect_value,true)

if line1 && line1 =~ reg
  puts "match true"
end

如上,这个程序目前为止是成功的。 当 line1 中不包含 mysql 的时候,正确输出了”match true“ 那么问题来了,如果 line1 所包含的字符串存在多行,即包含了回车换行符之后,每次只匹配第一行就结束了。 我知道是回车换行导致的问题,但是怎么想都没写对有效的正则表达式,有哪位能帮忙下吗? 感谢!

  1. 请用 markdown 编辑帖子
  2. line1 !~ /mysql/i 就好了,另外 ^$ 其实匹配的是行首和行末,\A\z 才是匹配字符串首末。普通模式 . 不匹配换行符,多行模式 . 才可以匹配换行符。
  3. 建议加个头像

如果你是要匹配不包含 mysql 的所有行,可以试下这个 regex: ^((?:(?!mysql).)*)$,最后再取出所有 groups 就好了。 效果在这:http://rubular.com/r/yTFptozbZv

#1 楼 @luikore 感谢,确实是要用\A和\z

#2 楼 @tzwm 感谢,是要做个整字符串判断,所以不能分行搞

需要 登录 后方可回复, 如果你还没有账号请 注册新账号