Заменить пробел, но только между пределами php - PullRequest
2 голосов
/ 16 марта 2020

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

Я делаю это следующим образом :

$string = 'whatever text including some $text between delimiters$ and...';
$string_replaced = preg_replace('/\s\s+/', '\:', $string);

Но он заменяет все пробелы в строка, которая очень логична c.

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

В официальных preg_replace() документах, Я не нахожу ничего, что могло бы помочь.

Так что я предполагаю, что мне не хватает какой-то функции PHP, которая позволит это.

Ответы [ 3 ]

4 голосов
/ 16 марта 2020

Вы можете использовать preg_replace_callback, чтобы сопоставить все тексты между $ символами с '/\$[^$]*\$/', а затем заменить 1+ пробелы только внутри этих сопоставленных текстов:

$string = 'whatever text including some $text between delimiters$ and...';
$string_replaced = preg_replace_callback('~\$[^$]*\$~', function($m) {
   return preg_replace('~\s+~u', ':', $m[0]);
}, $string);

См. PHP демо

1 голос
/ 16 марта 2020

Вероятно, есть регулярное регулярное выражение только для одного preg_replace, но вы можете сопоставить разделители, заменить пробелы и затем заменить в строке:

$string = 'whatever text including some $text between delimiters$ and...';
preg_match('/\$[^$]+\$/', $string, $matches);

foreach($matches as $match) {
    $replace = preg_replace('/\s+/', ':', $match);
    $string_replaced = preg_replace(preg_quote("/$match/"), $replace, $string);
}

Это также позволяет использовать более одной строки с разделителями в строка.

0 голосов
/ 16 марта 2020

Попробуйте,

$string = 'whatever text including some $text between delimiters$ and...';
//get substring without space
$sub = str_replace(' ','',substr($string,strpos($string,'$'),-strpos(strrev($string),'$')));
//replace sub string with new one 
echo substr_replace($string,$sub,strpos($string,'$'),-strpos(strrev($string),'$'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...