используя preg_match и preg_replace - PullRequest
       9

используя preg_match и preg_replace

0 голосов
/ 10 октября 2010

У меня есть две строки, такие как:

http://localhost/web/

и

http://localhost/web/category/

, которые иногда становятся:

http://localhost/web/2/, http://localhost/web/3/ и т. Д. *

и

http://localhost/web/category/2/, http://localhost/web/category/3/ и т. Д.

Я хочу сделать проверку и:

Если ссылка http://localhost/web/, она остается прежней.

Если ссылка http://localhost/web/2/, она становится http://localhost/web/

Если ссылка http://localhost/web/category/, то онаостается прежним.

Если ссылка http://localhost/web/category/2/, она становится http://localhost/web/category/

Я думаю, это должно быть сделано с использованием preg_replace() и preg_match().

Какя могу это сделать?

Спасибо.

1 Ответ

2 голосов
/ 10 октября 2010

Следующее регулярное выражение вам понадобится:

(http:\/\/localhost\/)(web|web\/category)\/([\d]+)\/

Для функции preg_replace вам понадобится оператор замены, который перезапишет строку на основе ваших критериев:

'$1$2'

Вышеприведенный оператор замены по существу объединяет первую группу перехвата (первый набор паренов, который оценивается как http://localhost/) со второй группой перехвата «web» или «web / category». Так как нам все равно Что касается последней группы захвата ($ 3), мы не добавляем ее в оператор замены, однако мы можем это сделать, поскольку мы ее захватываем. Если вы не хотите захватывать ее, замените это "([\ d] +) "с" [\ d] + ".

Ниже приведен пример кода, который включает шаблон с заменой для формирования полного оператора preg_replace:

<?php

$pattern = '@(http:\/\/localhost\/)(web|web\/category)\/([\d]+)\/@i';

$subjects = array(
    'http://localhost/web/2/',
    'http://localhost/web/category/2/'
);

foreach ($subjects as $subject) {
    echo sprintf('Original: %s, Modified: %s', $subject, preg_replace($pattern, '$1$2', $subject)), PHP_EOL;
}

Вставьте приведенный выше код в файл (например: replace.php) и запустите его через командную строку:

php replace.php
...