2015-12-14 4 views
2

У меня URLs так:Неожиданные результаты с preg_replace()

/catalog/kitchen-knives-and-accessories/?clear_cache=Y

Используя preg_replace() Я хочу, чтобы сделать его выглядеть следующим образом:

section_code=kitchen-knives-and-accessories

маркированы все полужирный, которые я хочу от ввод в ожидаемый результат

Сейчас я пользуюсь:

#^/catalog/([^/]+)# 

Как регулярное выражение, но это не дает ожидаемого результата, когда я использую его с preg_replace(). См.: http://www.phpliveregex.com/p/dW1

Что мне нужно изменить в моем регулярном выражении, чтобы получить ожидаемый результат?

+0

Посмотрите, что вы получаете в первом элементе массива. 0 всегда будет содержать полное совпадение. – Rizier123

+0

Если вы перейдете по ссылке, которую я предоставил, вы увидите, что 'preg_match' отлично работает с этим регулярным выражением. В первом элементе массива я получаю '/ catalog/kitchen-knives-and-accessories' и на вторых« кухонных ножах и аксессуарах ». Это то что мне нужно. Но это не работает с 'preg_replace' –

+1

Я не знаю, почему вы не используете' preg_match() 'then, но вы можете просто захватить всю строку и заменить ее первой группой захвата, например. 'preg_replace (" # ^/catalog /([^/]+).*# "," $ 1 ", $ str)' – Rizier123

ответ

1

Если вы хотите использовать preg_replace(), вы должны соответствовать всей строке и просто заменить ее на группу захвата, например.

$newStr = preg_replace("#^.*/catalog/([^/]+).*#", "section_code=$1", $str);
+0

Это правильно. Еще раз спасибо! –

Смежные вопросы