求包含字符串 “AAA”,而且不包含字符串 “BBB”"的正则表达式

a = /(^((?!gif).)*$)/i
a1= /php/i

b = "a string XXXXX"

puts "ok" if (b =~ a) and (b =~ a1)

请问把a和a1两个表达式合并怎么写?
表示:"同时匹配,包含字符串 “php”,而且不包含字符串 “gif”"的表达式.

谢谢!~~~~

[code="ruby"]
/^((?<!gif).)*(?<!gif)php(?!gif)(.(?!gif))*$/
[/code]

注意用到了 look behind assertion,如果是用于 Ruby,1.8 系列内置的正则表达式引擎是不支持的,需要用 gem 安装用于 1.9 的正则表达式引擎 Oniguruma。

[code]gem install oniguruma[/code]