regex — удалить несколько пробелов — 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:

thisREPLACEisREPLACEaREPLACEtestREPLACE1 REPLACE2 REPLACE3 REPLACE4 REPLACE6 REPLACEend.

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

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

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

0

Решение

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

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

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

Но я лучше буду использовать самое простое preg_replace('/ {2,}/',' ',$string); чтобы завершить это

1

Другие решения

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

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

1

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

$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);
0
По вопросам рекламы [email protected]