регулярное выражение: удалить белые символы - PullRequest
2 голосов
/ 23 августа 2010

Я пытаюсь удалить из строки более одного белого символа:

$content = preg_replace('/\s+/', " ", $content); //in some cases it doesn't work

но когда я написал

$content = preg_replace('/\s\s+/', " ", $content); //works fine

Может кто-нибудь объяснить, почему?

потому что, когда я пишу /\s+/, он должен совпадать со всеми одним или несколькими белыми символами, почему он не работает?

Спасибо

Ответы [ 4 ]

5 голосов
/ 23 августа 2010

Какое минимальное количество пробельных символов вы хотите сопоставить?

\s+ эквивалентно \s\s* - один обязательный пробельный символ, за которым следует любое их число.

\s\s+ эквивалентно \s\s\s* - двум обязательным пробельным символам, за которыми следует любое другое число (если это то, что вы хотите, это может быть яснее как \s{2,}).

Также обратите внимание, что $content = preg_replace('/\s+/', " ", $content); заменит все пробелы в $content одним пробелом.Другими словами, если ваша строка only содержит один пробел, результат не изменится.

0 голосов
/ 23 августа 2010

попробуй preg_replace("/([\s]{2,})/", " ", $text)

0 голосов
/ 23 августа 2010

Используете ли вы опцию Ungreedy (/ U)?В вашем коде этого не говорится, но если это так, это объясняет, почему первый preg_replace () заменяет каждый пробел одним пробелом (без изменений).В этом случае второй preg_replace () будет заменять каждый двойной пробел одним пробелом.Если вы попробуете второй на строке из четырех пробелов, и в результате получится двойной пробел, я бы заподозрил несправедливость.

0 голосов
/ 23 августа 2010

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

Извините, я пока не могу добавлять комментарии, или я бы просто добавил этот комментарий к ответу Даниэля, и это хорошо.

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