2014-09-21 2 views
0

Я знаю, есть много похожих вопросов, и вы скажете, что это дубликат, но я не могу найти решение! Мне нужно удалить несколько пробелов и написать только одно место. В моем коде я написал 'REPLACE' вместо '', просто чтобы уточнить. Это код, который я испытал, и не работает:Удалить несколько пробелов - PHP не находит пробелы

$string=$data['post_content']; 
$filtered1=preg_replace("/[^\S\r\n]+/",'REPLACE',$string); 
$filtered2=preg_replace("#[^\S\r\n]+#",'REPLACE',$string); 
$filtered3=preg_replace("#[^\S\r\n][^\S\r\n]+#",'REPLACE',$string); 
$filtered4=preg_replace('#[^\S\r\n][^\S\r\n]+#','REPLACE',$string); 
$filtered5=preg_replace('#!\s+!#', 'REPLACE', $string); 
$filtered6=preg_replace("/(?<=\s)\x20|\x20(?=\s)/", "REPLACE", $string); 
$filtered7=preg_replace("/([\s])\1+/", "REPLACE", $string); 
$filtered8=preg_replace("#[^\S\r\n][^\S\r\n]#",'REPLACE',$string); 
$filtered9=preg_replace("'/\s+/'",'REPLACE',$string); 
$testing1=str_replace(" ","REPLACE",$string); 
$testing2=str_replace("\s",'REPLACE',$string); 
$testing3=str_replace(array(' '),'REPLACE',$string); 
$testing4=str_replace(' ',"REPLACE",$string); 
$testing5=str_replace(" ","REPLACE",$string); 
$testing6=str_replace(array(" "),'REPLACE',$string); 
$testing7=str_replace(array("\s\s"),'REPLACE',$string); 

Это тест строка:

это тест 1 2 3 4 6 Конец

И результаты были для $filtered1 и $filtered2:

этоREPLACE isREPLACEaREPLACEtestREPLACE1 REPLACE2 REPLACE3 REPLACE4 REPLACE6 REPLACEend.

Для всех остальных, результат был:

это тест 1 2 3 4 6 Конец

Это как PHP не находит пространства, даже explode является не находя двойных пространств "". Я использую PHP 5.5.1

+0

, если вы хотите, чтобы удалить все несколько пробелов вы можете использовать 'preg_replace («/ \ s + /»,»», $ строка);' (замените все 1 или более экземпляра пространство с одним пространством) – bansi

+0

По-прежнему возвращает тот же результат: «это тест 1 2 3 4 6 end» – mgreca

+0

Каков ваш ожидаемый результат? и вы хотите совместить ровно 2 пробела, вы можете использовать 'preg_replace ('/ \ s {2} /', '', $ string);' – bansi

ответ

0

Проблема была не RegEx, проблема была модификатор, я использовал модификатор u благодаря Aurimas ответ. Возможны следующие решения:

$filtered1=preg_replace("/[^\S\r\n]+/u",' ',$string); 
$filtered2=preg_replace("#[^\S\r\n]+#u",' ',$string); 
$filtered3=preg_replace("#[^\S\r\n][^\S\r\n]+#u",' ',$string); 
$filtered10=preg_replace('/[^\S\r\n]{2,}/u',' ',$string);0 
$filtered11=preg_replace('/\h+/u', ' ', $string); 
$filtered16=preg_replace('/(\xA0+)/u', ' ', $string); 
1

Здесь идет использование

preg_replace('/[^\S\r\n]{2,}/',' ',$string); преобразовать двойные пространства выделить один

см демо здесь: http://regex101.com/r/sP7wH7/1

Но я, скорее, с помощью простейший preg_replace('/ {2,}/',' ',$string); для заполнения

+0

Я знаю, что регулярное выражение должно работать, но все равно возвращает тот же результат: это тест 1 2 3 4 6 end – mgreca

1

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

preg_replace('/(\s+)|(\xA0+)/u', ' ', $string);

+0

Мне нужно было сохранить новые символы линий, но ваш ответ был полезен, чтобы знать модификатор "u" – mgreca

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