Wpis z mikrobloga

#pytanie #pytaniedoeksperta #regexp #programowanie

Chciałbym za pomocą wyrażenia regularnego podzielić taki oto tekst:

"TEKST 1" "TEKST 2" """TEKST 3"" ASDFA"
na

"TEKST 1"
"TEKST 2"
"""TEKST 3"" ASDFA"
Takie

"[^"]*"
i takie

".*?"
pasuje, ale tylko jeżeli wewnątrz tekstu nie pojawiają się podwójne cudzysłowy.

Jakieś podpowiedzi?
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@vegat: niezupełnie o to chodzi, może zły przykład podałem. Plik zawiera pola zawierające tekst ograniczone pojedynczym cudzysłowem ". Jeżeli w polu ma być użyty cudzysłów to jest on podwójny "". Tak jak w stringach w vb.

Ale dzięki za stronę, zapomniałem o niej, teraz potestuję sobie wygodnie.
  • Odpowiedz
@kovalski: Wcześniej zrozumiałem, że cudzysłowy mają być podwójne dla całego pola jeśli w środku jest inny cudzysłów - w takim przypadku poprzedni regexp działał :) Teraz już rozumiem co potrzebujesz to mogę to dobrze napisać. W tym przypadku byłeś bliski zagięcia mnie, ale wymodziłem:

("([^"]+|(""){1})+")
:) i standardowo: http://bit.ly/14QQQGn
  • Odpowiedz
Nawiasy na zewnątrz pozwolą Ci złapać całość wyrażenia w razie co. Nie są konieczne jeśli preg_matcha używasz - wtedy domyślnie cały regexp jest zwracany do wyniku. Grunt, że działa :) Nie ma to jak fajna łamigłówka dla wprawy na początek dnia :)
  • Odpowiedz
@vegat: OK, przetestowałem na ok 3000 "rekordów" i działa. Jeżeli chcesz jeszcze pogłówkować to w jednym wierszu-rekordzie może znajdować się też pole numeryczne bez cudzysłowów np.

"POLE1" 2 "POLE3"
:) ale akurat mi jest do szczęścia niepotrzebne więc olałem. Jak będę we Wrocku, to mogę Ci postawić piwko. A póki co masz suba :)
  • Odpowiedz