2013-04-10 8 views
1

Если существует, мне нужно удалить \r\n\r\n в самом начале и/или в самом конце строки.php regex - удалять r n r n в самом начале И в самом конце строки

Моя проблема: я не мог достичь своей цели с помощью кодов ниже.

//if exists, remove \r\n\r\n at the very beginning 
$str = preg_replace('/^(\r\n\r\n)/', '', $str); 

//if exists, remove \r\n\r\n at the very end 
$str = preg_replace('/$(\r\n\r\n)/', '', $str); 

Возможно, мой исходный вид выходного файла html может дать вам некоторые подсказки. Я не знаю причину, но теги <br /> не бок о бок. Они позиционируют друг друга как друг друга.

<br /> 
<br /> 
some text 
... 
... 
some text<br /> 
<br /> 

Также ниже, я разделяю весь код обработки строк. Мои проблемные 2 строки кода являются частью приведенного ниже кода. (Остальные части, кроме двух строк кода выше, хорошо работают)

function convert_str ($str) 
{ 
    // remove excess whitespace 
    // looks for a one or more spaces and replaces them all with a single space. 
    $str = preg_replace('/ +/', ' ', $str); 
    // check for instances of more than two line breaks in a row 
    // and then change them to a total of two line breaks 
    $str = preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\r\n\r\n", $str); 
    //if exists, remove \r\n\r\n at the very beginning 
    $str = preg_replace('/^(\r\n\r\n)/', '', $str); 

    //if exists, remove \r\n\r\n at the very end 
    $str = preg_replace('/$(\r\n\r\n)/', '', $str); 

    //if exists, remove 1 space character just before any \r\n 
    $str = str_replace(" \r\n", "\r\n", $str); 
    //if exists, remove 1 space character just after any \r\n 
    $str = str_replace("\r\n ", "\r\n", $str); 
    // if exists; remove 1 space character just before punctuations below: 
    // $punc = array('.',',',';',':','...','?','!','-','—','/','\\','“','”','‘','’','"','\'','(',')','[',']','’','{','}','*','&','#','^','<','>','|'); 
    $punc = array(' .',' ,',' ;',' :',' ...',' ?',' !',' -',' —',' /',' \\',' “',' ”',' ‘',' ’',' "',' \'',' (',')',' [',' ]',' ’',' {',' }',' *',' &',' #',' ^',' <',' >',' |'); 
    $replace = array('.',',',';',':','...','?','!','-','—','/','\\','“','”','‘','’','"','\'','(',')','[',']','’','{','}','*','&','#','^','<','>','|'); 
    $str = str_replace($punc,$replace,$str); 
    return $str; 
} 

Не могли бы вы исправить меня?

Благодаря

BR

+2

Вы знаете о [** подрезать **] (http://php.net/manual/en/function.trim.php) правильно? – elclanrs

+0

@elclanrs, что я ошибочно настаивал на использовании preg_replace, сделал меня слепым, я думаю, до тех пор, пока обрезание не будет упоминать ответы. Я постыдился. большое спасибо. ваш комментарий - хороший урок для меня. –

+0

также с использованием регулярного выражения для строки, которая проста, это действительно плохо! – ITroubs

ответ

2

Чтобы справиться с этим, вы должны использовать функцию строки trim().

отделка - Удаляет пробелы (или другие символы) от начала и конца строки

Пример:

$str = trim($str); 
+3

Как насчет только '' trim() '] (http://php.net/manual/en/function.trim.php)? – Phil

0

Попробуйте заменить

//if exists, remove \r\n\r\n at the very end 
$str = preg_replace('/$(\r\n\r\n)/', '', $str); 

по

//if exists, remove \r\n\r\n at the very end 
$str = preg_replace('/(\r\n\r\n)$/', '', $str); 

Вы также можете попробовать использовать Trim function (например строки обрезки (строка $ ул [ , строка $ charlist = "\ t \ n \ r \ 0 \ x0B"]))