preg_replace: как мне убрать все пробелы и? - PullRequest
1 голос
/ 24 сентября 2010

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

У меня есть это как вход в созданную мной оболочку,

[b]       bold       [/b]

поэтому, прежде чем сделать текст жирным, я хочу удалить все пробелы и & nbsp и превратить его в [b]bold[/b],

$this->content = preg_replace("/\[(.*?)\]\s\s+(.*?)\s\s+\[\/(.*?)\]/", 
                "[$1]$2[/$3]", 
                $this->content);

но это не работает! Вы можете помочь, пожалуйста?

Ответы [ 7 ]

6 голосов
/ 24 сентября 2010

Нет необходимости в решении на основе регулярных выражений.Вы можете просто использовать str_replace как:

$input = "[b]       bold       [/b]";
$input = str_replace(array(' ',' '),'',$input);
echo trim($input); // prints [b]bold[/b]
3 голосов
/ 24 сентября 2010

Я нашел другое решение

$this->content = preg_replace("/\[(.*?)\]\s*(.*?)\s*\[\/(.*?)\]/", "[$1]$2[/$3]", html_entity_decode($this->content));
2 голосов
/ 24 сентября 2010
$this->content = preg_replace(
    '~\[(.*?)](?:\s| )*(.*?)(?:\s| )*\[/\\1]/', 
    '[$1]$2[/$1]', 
    $this->content
);
1 голос
/ 29 июня 2016

Немного поздно, чтобы ответить, но, надеюсь, может помочь кому-то еще. Самая важная вещь при извлечении контента из html - это использование utf8_decode () в php. Тогда все другие строковые операции станут легким делом. Даже иностранные символы могут быть заменены путем непосредственного копирования вставляемых символов из браузера в код php.

Следующая функция заменяет   пустым символом. Затем все пробелы заменяются пустыми символами, используя preg_replace().

function clean($str)
{       
    $str = utf8_decode($str);
    $str = str_replace(" ", "", $str);
    $str = preg_replace("/\s+/", "", $str);
    return $str;
}

$html = "[b]       bold       [/b]";
$output = clean($html);
echo $output;

[Ь] полужирный [/ B]

1 голос
/ 24 сентября 2010

Вы можете просто заменить пробелы пустыми строками, например,

preg_replace("/(?:\s| )+/", "", $this->content, -1)

. -1 вызывает замену для каждого совпадения.

0 голосов
/ 24 сентября 2010

Еще один метод, который будет работать:

$this->content = trim(str_replace(' ','',$this->content));

Ссылки на Руководство по PHP:

отделка () http://us.php.net/trim

* примечание: предполагается, что $ this-> content содержит только строку, опубликованную OP

0 голосов
/ 24 сентября 2010

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

$this->content = preg_replace( '/\[([a-z]+)\](?: |\s)*(.*?)(?: |\s)*\[\/([a-z]+)\]/', '[$1]$2[/$3]', $this->content );

Но в этом случае вам лучше объединить удаление пробелов и преобразование bbcode, чтобы убедиться в правильности тегов:

$this->content = preg_replace( '/\[b\](?:&nbsp;|\s)*(.*?)(?:&nbsp;|\s)*\[\/b]/', '<b>$2</b>', $this->content );
...