Замените начальный пробел на то же количество раз, используя регулярное выражение PHP - PullRequest
1 голос
/ 27 июля 2010

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

Бит пояснительный:

Если на входе присутствует один начальный пробел, его следует заменить на один  

Если на входе есть два начальных пробела, его следует заменить на два  

Если на входе существует n начальных пробелов, то его следует заменить точным числом раз на

Ex.1:
 My name is XYZ
output:
 My name is XYZ

Ex.2 :
  My name is XYZ
output:
  My name is XYZ

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

Ваши предложения приветствуются.

Спасибо

Ответы [ 4 ]

6 голосов
/ 27 июля 2010
preg_replace('/\G /', ' ', $str);

\G соответствует позиции, в которой закончилось последнее совпадение, или началу строки, если предыдущего совпадения не было.

edit: На самом деле, в PHP он совпадает с тем местом, где должно начинаться совпадение next . Это не обязательно совпадает с тем, где закончился предыдущий матч.

4 голосов
/ 27 июля 2010
$len_before = strlen($str);
$str = ltrim($str, ' ');
$len_after = strlen($str);
$str = str_repeat(' ', $len_before - $len_after) . $str;

Использование preg_replace также есть

$str = preg_replace('/^( +)/e', 'str_repeat(" ", strlen("$1"))', $str);

но обратите внимание, что он использует флаг /e.

См. http://www.ideone.com/VWNKZ для результата.

0 голосов
/ 27 июля 2010

Используйте preg_match с установленным флагом PREG_OFFSET_CAPTURE, смещение - это длина "пробелов". Затем используйте str_repeat со смещением.

0 голосов
/ 27 июля 2010

Использование:

preg_replace('/^ +/m',' ',$str);

Вы можете проверить это здесь

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