PHP preg_replace заменяет '/ /' на '/' - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь заменить все вхождения '/ /' в строке на '/'.Однако я не могу найти правильное выражение регулярного выражения, совпадающее со строкой для замены.

В настоящее время у меня есть preg_replace('/\/\s\//', '/', $string);, но это не заменяет вхождения '/ /'.

Чтобы было ясно, я хотел бы сопоставить любые вхождения прямой косой черты с последующим пробелом и последующей косой чертой.Кажется, что последний слэш испортил все.Я также попытался str_replace(), но безрезультатно.

РЕДАКТИРОВАТЬ: выражение регулярного выражения работает правильно, если я запускаю его на строку, например, так: echo(preg_replace('/\/\s?\//m', '/', ".... . -.-- / / .... ---")); и я получаю вывод: .... . -.-- / .... ---.Но когда я запускаю это так: $morse = preg_replace('/\/\s?\//m', '/', $morse); Замена не работает.Для записи, выходное значение echo($morse) перед preg_replace равно .... . -.-- / / .... --- и после него точно такое же.Я понятия не имею, что может быть причиной какого-то странного кодирования в строке переменной $ morse?

Пожалуйста, помогите, это сводит меня с ума.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Использование других разделителей значительно упростит ситуацию:

$regex = '~/\s+/~';
$replacement = '/';

$string = preg_replace($regex, $replacement, $original_string);

Обратите внимание, что ваша исходная строка остается нетронутой.

0 голосов
/ 05 декабря 2018

Написанный вами шаблон регулярного выражения верен, и он будет заменен, если будет найдено вхождение / /.Я обновил ваш pattern до /\/\s?\//m.Вы можете попробовать следующим образом.

$re = '/\/\s?\//m';
$str = 'test string // test string / /';
$subst = '/';

$result = preg_replace($re, $subst, $str);

echo "The result of the substitution is ".$result;
...