正则表达式否定替换?

时间:2009-08-11 18:27:54

标签: php regex regex-negation

如果HTTP_HOST是[ANY] .yomomedia.com,我需要获取“yomomedia.com”,除非它是“dev.yomomedia.com”,否则它应该返回dev.yomomedia.com

echo preg_replace("/^([EVERYTHING-OTHER-THAN-DEV])\./Ui","",$_SERVER['SERVER_NAME'])

试过以下但没有成功:

echo preg_replace("/^(?!dev)\./Ui",'','www.yomomedia.com'); // returns www.yomomedia.com
echo preg_replace("/^(?!dev)\./Ui",'','dev.yomomedia.com'); // returns dev.yomomedia.com

2 个答案:

答案 0 :(得分:4)

负被动组(前瞻)应该:

/^(?!dev).*\./Ui

答案 1 :(得分:2)

Look-arounds不要“消费”任何字符。因此,您的表达式与相同,前三个字符不是dev ^(?!dev))AND 第一个字符是句号({{ 1}})。

所以试试这个:

^\.

或者:

/^(?!dev\.)[^.]+\./Ui