widziałem gdzieś zamiast używać chomp w perlu możemy użyć wyrażenia regularnego, aby osiągnąć to samo zadanie. Może ktoś powiedzieć co to jest wyrażenie regularne spotka chomp w PerluWyrażenie regularne równoważne chomp
góry dziękuję
widziałem gdzieś zamiast używać chomp w perlu możemy użyć wyrażenia regularnego, aby osiągnąć to samo zadanie. Może ktoś powiedzieć co to jest wyrażenie regularne spotka chomp w PerluWyrażenie regularne równoważne chomp
góry dziękuję
Co chomp
robi to usunąć wartość $/
od końca jej argumencie (lub $_
jeśli żaden argument). Więc odpowiednikiem regex byłoby:
s#\Q$/\E\z##;
Uwaga stosowanie innego separatora dla s///
aby uniknąć problemów ze zmienną $/
.
Jednak nie ma korzyści z używania takiego wyrażenia regularnego, a wręcz przeciwnie. To jest czysto akademickie pytanie, moim zdaniem.
dokładniejsza odpowiedź! – Alec
nie, 's # \ Q $/\ z ## '(pedantycznie, z' zdefiniowanym $/&&! Ref $/', plus specjalny przypadek dla' $/eq' '') – ysth
cześć, Właściwie chomp usuwa \ n na końcu linii ... jest dobrze, jeśli masz plik utworzony w środowisku Linux. rozważ, że utworzyłeś plik w środowisku Windows, więc koniec linii będzie \ r \ n dla nowej linii .. jeśli użyjesz chomp to usunie tylko \ n nie \ r .. więc "= ~ s/\ n $//; "; wyrażenie regularne będzie lepsze, jak sądzę, – user2163744
przynajmniej 995 razy na 1000 (z chlubnym wyjątkiem danych rozdzielone tabulatorami) chcesz
s/\s+\z//;
zamiast
chomp;
Obsługuje końcowe białe znaki (które nie powinny nigdy być znaczące), zakończenia linii Windows i zakończenia linii unix.
Sprowadzanie białych znaków jest zasadnie ważne, jeśli, powiedzmy, dane są rozdzielane tabulatorami i kończą się pustymi polami. Ta metoda usunie te pola, jak również dowolne znaki separatora rekordów. Zasadniczo 's/[\ r \ n] + \ z //' jest bezpieczniejsze. – Borodin
@Borodin, To tak, jakby sugerować, aby zdjąć koła z samochodu, aby było bezpieczniej. Może być kilka całkowicie akceptowalnych zastosowań dla samochodów bez kół, ale przez resztę czasu, możesz je zostawić. 's/[\ r \ n] + \ z //' jest głupie, nie bezpieczniejsze. Użyj go, gdy masz do czynienia z TSV, ale nie przez resztę czasu. – ikegami
@ SinanÜnür: Wcale nie. Puste pole powinno być przedstawione jako pusty ciąg; nieistniejące pole powinno dawać 'undef'. Czego można oczekiwać od danych takich jak '3 \ t \ t5'? Czy naprawdę powinno być coś specjalnego o ciągnięciu pustych pól? – Borodin
czy możesz podać przykład swojej sprawy? – Raptor
Naprawdę nie powinieneś używać wyrażeń regularnych, jeśli istnieje prosta alternatywa – Lorkenpeist
@Lorkenpeist TIMTOWTDI, Jeśli chcesz je wyszukać :) – gaussblurinc