2013-06-14 3 views
1

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

Как вы берете одну строку и заменяете ее на другую с помощью регулярных выражений в PHP?

Например, как вы берете все '/' и заменяете их на «%»?

+3

http://php.net/manual/en/function.preg-replace.php –

+0

Существует хорошая документация на ** [PHP-сайт] (http://php.net/manual/en/function.preg -match.php) ** со многими примерами (внизу страницы) – kgdesouz

+2

Не забудьте игнорировать 'strtr' и' str_replace', где это применимо. Регулярные выражения велики, но не всегда необходимы. –

ответ

2

Если вы просто хотите сделать основную замену строки (т.е. заменить все «ABC» с «123»), то вы можете использовать str_replace, который не требует использования регулярных выражений. Для основных замен это будет проще настроить и работать быстрее.

Если вы хотите использовать это как инструмент, чтобы узнать регулярное выражение, хотя (или требуются более сложные замены), то preg_replace функция вам нужно.

0

Мне нравится учиться выполнять базовую замену строк с помощью регулярных выражений.

Это немного широкое для этого форума. Однако, чтобы ответить на более конкретный вопрос, например:

Например, как вы берете все '/' и заменяете их на «%»?

Вы можете сделать это так:

$result = preg_replace('#\/#', '%', 'Here/is/a/test/string.'); 

Вот Rubular that proves the regex.

+0

Рублум, который вы разместили, добавляет разделители для вас. – Robbert

+0

@ Робберт, что это? –

+0

Моя точка зрения заключалась в том, что вам не хватало косые черты, чтобы разграничить ваше регулярное выражение. Рублинская ссылка, которую вы разместили, добавляет вам прямую косую черту, но теперь preg_replace. Я вижу, что теперь вы используете #, но я не уверен, что это сработает на PHP. – Robbert

1

Вы должны изучить preg_replace. Для вашего вопроса

$string = "some/with/lots/of/slashes"; 
$new_string = preg_replace("/\//","%",$string); 
echo $new_string; 
+0

Если вы используете что-то еще, чем '/' в качестве разделителя, вам не нужно скрывать его внутри выражения. –

0

Обратите внимание, что вы не ограничиваетесь использованием общего разделителя /, что означает, что при работе с косой чертой часто легче менять на другой разделитель EG.

$mystring = 'this/is/random'; 
$result = preg_replace('#/#', '%', $mystring); 

Это сделает «#» разделитель, а не стандарт «/», так что это означает, что вам не нужно слеш.

0

Я бы сделал это просто с strtr, который очень подходит для сопоставления символов, например.

strtr('My string has/slashes /', '/', '%'); 

Если вы хотите, чтобы также заменить букву a с тиром:

strtr('My string has/slashes /', '/a', '%-'); 

Как вы можете видеть, второй и третий аргумент определяет карту преобразования.

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