$string = "
put returns between paragraphs
for linebreak add 2 spaces at end
";
Chcesz usunąć wszystkie nowe linie z ciągu.
Mam to wyrażenie regularne, można je wszystkie złapać, problem polega na tym, że nie wiem z jaką funkcją powinienem go użyć.
/\r\n|\r|\n/
$string
powinno stać się:
$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
preg_replace
. Jest prawie dwa razy wolniejszy niżstr_replace
.s($str)->normalizeLineEndings('')
Pomocne mogą być informacje zawarte w tej niezależnej bibliotece . Usunie nie tylko LF, CR i CRLF, ale także wszelkie znaki nowej linii Unicode.Odpowiedzi:
Musisz być ostrożny w przypadku podwójnych podziałów linii, które spowodowałyby podwójne spacje. Użyj tego naprawdę wydajnego wyrażenia regularnego:
Wiele spacji i znaków nowej linii zastępuje się pojedynczą spacją.
Edycja: jak zauważyli inni, w tym rozwiązaniu występują problemy z dopasowywaniem pojedynczych znaków między wyrazami. Nie ma tego w przykładzie, ale łatwo można zobaczyć, jak taka sytuacja może wystąpić. Alternatywą jest wykonanie następujących czynności:
źródło
/(?![ ])\s+/
Kilka komentarzy do zaakceptowanej odpowiedzi:
Te
+
środki „1 lub więcej.” Nie sądzę, że musisz powtarzać\s
. Myślę, że możesz po prostu pisać'/\s+/'
.Ponadto, jeśli chcesz usunąć białe znaki na końcu i na końcu łańcucha, dodaj
trim
.Po tych modyfikacjach kod wyglądałby następująco:
źródło
/\s\s+/
nie pasowałoby do wejścia liniowegofoo\nbar
.Po prostu użyj
preg_replace()
Możesz sobie z
str_replace()
tym poradzić, chociaż kod nie wygląda na tak czysty:Zobacz na żywo na ideone
źródło
$string = preg_replace("~[\r\n]~", "",$string);
źródło
\r
znakówPowinieneś użyć str_replace ze względu na jego szybkość i podwójne cudzysłowy z tablicą
źródło
\n
\r\n
Nie jestem pewien, czy ma to jakąkolwiek wartość w stosunku do już przesłanych odpowiedzi, ale równie dobrze mogę to opublikować.
źródło
Zastąpienia wyrażeń regularnych PCRE można wykonać za pomocą preg_replace: http://php.net/manual/en/function.preg-replace.php
Zastąpiłby nowy wiersz lub zwrócił znaki spacją. Jeśli nie chcesz, aby cokolwiek je zastępowało, zmień drugi argument na
''
.źródło
preg
funkcje użyć PCRE, nie POSIX wyrażenia regularne. Istniejąereg
funkcje korzystające z POSIX, ale są one obecnie przestarzałe.Użyj tego:
zamień serię nowych wierszy na pusty ciąg:
lub prawdopodobnie chcesz zastąpić znaki nowej linii pojedynczą spacją:
źródło
\\n
wygląda okropnie.\\\\
dopasowanie pojedynczego ukośnika jest po prostu okropne.Sekwencja Escape
\R
odpowiada ogólnej nowej liniiRegex101 Demo
źródło
Podziały wiersza w tekście są zazwyczaj przedstawiane jako:
\ r \ n - na komputerze z systemem Windows
\ r - na komputerze Apple
\ n - w systemie Linux
źródło
O co chodzi:
To powinno być dość solidne rozwiązanie, ponieważ \ n nie działa poprawnie we wszystkich systemach, jeśli się nie mylę ...
źródło
Byłem zaskoczony, widząc, jak mało wszyscy wiedzą o wyrażeniach regularnych.
Strip newlines w php jest
W perl
To znaczy zastąp dowolny znak nowej linii na końcu linii (dla wydajności) - opcjonalnie poprzedzony znakiem powrotu karetki - spacją.
\ n lub \ 015 jest znakiem nowej linii. \ r lub \ 012 to powrót karetki. ? w wyrażeniu regularnym oznacza dopasowanie 1 lub zero poprzedniego znaku. $ w wyrażeniu regularnym oznacza dopasowanie końca linii.
Oryginalnym i najlepszym odniesieniem do wyrażenia regularnego jest perldoc perlre, każdy programista powinien dobrze znać ten dokument: http://perldoc.perl.org/perlre.html Uwaga: nie wszystkie funkcje są obsługiwane przez wszystkie języki.
źródło
to jest wzór, którego użyłbym
źródło
może to działa:
źródło
Ten usuwa również zakładki
źródło
Możesz wypróbować poniższy kod, aby zachować wszelkie białe znaki i nowe wiersze w tekście.
źródło
Wiele z tych rozwiązań nie działało dla mnie. To załatwiło sprawę:
Oto odniesienie: - PCRE i nowe linie
źródło
poniższy kod działa na cały tekst, użyj go:
źródło
Możesz usunąć nową linię i wiele białych znaków.
źródło