Регулярное выражение отрицательный заменить? - PullRequest
1 голос
/ 11 августа 2009

Мне нужно получить «yomomedia.com», если HTTP_HOST [ANY] .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 ]

4 голосов
/ 11 августа 2009

Отрицательная пассивная группа (прогноз) должна сделать:

/^(?!dev).*\./Ui
2 голосов
/ 11 августа 2009

Осмотры не «потребляют» никаких символов. Таким образом, ваше выражение означает то же самое, что и , первые три символа не dev (^(?!dev)) И первый символ является точкой (^\.).

Так что попробуйте либо:

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

Или:

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