2017-03-03 6 views
1

PHP preg_replace를 사용하여 CSV 파일에서 일부 줄 바꿈을 삭제하려고합니다. 나는 그것을 얻지 않는다. 나는 많이 노력했다. 어쩌면 누군가 내 코드를 도와 줄 수 있습니다.CSV 내에서 preg_replace로 LF 제거

$content = "Halvah sweet ice.|Donut pastry candy canes bear claw toffee ice cream 
    cotton candy jelly-o. Pastry chocolate lemon drops biscuit muffin muffin apple pie croissant. Candy canes topping pudding biscuit. Cotton candy sweet mi bears chocolate. Croissant sesame snaps chocolate cake. Topping toffee oat cake cake. Biscuit| cheesecake powder"; 

$content = preg_replace('/^\|(.*)\n(.*)\|$/', "", $content); 

// expected result 
$content = "Halvah sweet ice.|Donut pastry candy canes bear claw toffee ice cream cotton candy jelly-o. Pastry chocolate lemon drops biscuit muffin muffin apple pie croissant. Candy canes topping pudding biscuit. Cotton candy sweet mi bears chocolate. Croissant sesame snaps chocolate cake. Topping toffee oat cake cake. Biscuit| cheesecake powder"; 

| | 예를 들어, "크림"이라는 단어 뒤에 줄 바꿈.

감사합니다.

+0

경고에주의를 기울 였다면, * preg_replace() : 6 행의 /home/kVVTYTY/prog.php에서 알 수없는 수정 자 '\'가 표시 될 수 있습니다. * –

+1

['$ content = preg_replace_callback ("/ \ | [} $ str_replace (array ("\ n", "\ r"), "", $ m [0] ;] (https://ideone.com/J0tdns). –

+0

@ WiktorStribiżew 네 말이 맞아, 나는 오래된 코드 버전을 사용했다. 스택에서 예제/\\\\ n /을 찾았습니다. \ n 이스케이프 처리가 올바른지 확인하려고했습니다. – vine

답변

0

^\|(.*)\n(.*)\|$ 패턴은 문자열의 시작에서 | 일치 다시 줄 바꿈, \n, 줄 바꿈 이외의 0+ 문자와 문자열의 끝에서 | 이외의 0+ 문자. 그래서, 기본적으로, 당신은 개행 기호만을 제거하지 않고 코드로 그러한 문자열을 비 웁니다.

당신은 모든 |...| 문자열과 일치하고 preg_replace_callback 기능에 간단한 \|[^|]+\| 정규식을 사용하여 한 번에 그들 내부에 여러 줄 바꿈을 제거 할 수 있습니다 :

$content = preg_replace_callback("/\|[^|]*\|/", function($m) { 
    return str_replace(array("\n", "\r"), "", $m[0]); 
} , $content); 
echo str_replace("\n", "NEWLINE", $content); // => Note there is no NEWLINE in the output 

PHP demo를 참조하십시오.

+1

그게 효과가! 정말 고마워. – vine