Использование str_replace для замены символа переменной - PullRequest
0 голосов
/ 01 января 2011

В основном я пытаюсь сделать str_replace с "? Cat = (введите номер здесь)"

$queryString2 = str_replace("cat=(insert number here)", "cat=4", $queryString);

Есть ли способ, которым это может быть достигнуто? Str_replace + один символ, потому что значение, которое я ищу, может быть любым.

?cat=7
?cat=3
?cat=4

Есть предложения?

Ответы [ 2 ]

5 голосов
/ 01 января 2011

Более надежным способом обработки строк запроса будет их фактический анализ.

// If your original query string was just the data in $_GET, clone $_GET:
$new_query = $_GET;
// Otherwise, parse the original query string using parse_str:
parse_str($original_query_string, $new_query);
// Then, set the new cat value, and build a new query string.
$new_query['cat'] = 4;
$new_query_string = http_build_query($new_query);

Техника, которую вы первоначально описали, - это работа с регулярным выражением:)

$queryString2 = preg_replace('/cat=[0-9]+/', 'cat=4', $queryString);

Регулярное выражение cat=[0-9]+ соответствует строке cat=, за которой следуют одна или несколько (+) цифр ([0-9]). preg_replace заменяет все совпадения регулярного выражения (аргумент 1), найденные в исходной строке (аргумент 3), строкой замены (аргумент 2) и возвращает результат.

Обратите внимание, что это также заменит dog_and_cat=1 на dog_and_cat=4. ответ borkweb является более сложным регулярным выражением, но обрабатывает этот крайний случай, если он может возникнуть (например, это строка запроса, предоставленная пользователем).

Я предпочитаю фактический синтаксический анализ запроса, но решение с регулярными выражениями в идеале должно работать точно так же, без учета крайних случаев.

1 голос
/ 01 января 2011

Да, вы можете использовать preg_replace :

$queryString2 = preg_replace('/([&?])cat=[0-9]+/', '\1cat=4', $queryString);

Это регулярное выражение гарантирует, что вы только захватите строку запроса "cat".Фрагменты следующие:

([&?])  # match either and ampersand or question mark
cat=    # match "cat="
[0-9]+  # match 1 or more digits.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * за все.1012 * пример, который Matchu дал , может быть немного более надежным с незначительными накладными расходами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...