![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
hej,
mam lekki problem z regexp'ami, do rzeczy. mam takie stringi (możliwości): Kod jeden+"+test"+dwa jeden+"test+"+dwa jeden+"te+st"+dwa i teraz chce "porozbijać" te ciągi względem znaku +, wynik: Kod jeden; "+test"; dwa jeden; "test+"; dwa jeden; "te+st"; dwa oczywiście te rozbicia maja być tablicą otrzymana przez preg_split. stworzyłem takie wyrażenie: Kod #((?<!")\+)|(\+(?!(.*)"))#si niestety dopasowuje mi tylko do pierwszego ciągu: Kod jeden; "+test"; dwa pozostałe dwa nie parsują się poprawnie, jakiejś sugestie? -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
A spróbuj to :
Cytat ^([\w\+]+)([\w\+\"]+)([\w\+]+)$
|
|
|
![]()
Post
#3
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
@Niktoś Twoj wyrażenie nie dopasowuje się do żadnego ciągu, i też nic nie chce dzielić za pomocą split'a
![]() -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
A może to?
^([\w]+\+)?|([\w\"]+\+)?|([\w]+\+)?$ Patrze w regexp.pl i rozbija wszystkie wyrazy z + na grupy. |
|
|
![]()
Post
#5
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
i w wyniku otrzymuje: Kod Array
( [0] => [1] => [2] => [3] => [4] => d [5] => w [6] => a [7] => ) -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 711 Pomógł: 127 Dołączył: 5.07.2008 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Może użyj po prostu fgetcsv i jako separator podaj + a jako otokę podaj "
|
|
|
![]()
Post
#7
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
@cycofiasz Twój pomysł byłby super, ale mam pewnie problem ponieważ potrzebuje stringi w stylu:
Kod jeden "test+" dwa są mi potrzebne te "", a on je wycina... -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Ciężka sprawa bo praktycznie nie ma separatora, nie można użyć + brak odstępów,(") też za bardzo nie można użyć ,myśle o indexOf po + jechać ale też nie za bardzo bo słowo te+st rozdzieli.
Nic innego tylko zaawansowana funkcja.Wydaje mi się ,że samym regexpem czy fgetcsv tego nie zrobisz. Ale fajna zagadka,pomyśle nad nią jutro. Ten post edytował Niktoś 1.03.2012, 21:47:25 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 262 Pomógł: 39 Dołączył: 12.04.2004 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli nie upierasz się na preg_split, to pobaw się tym:
Ten post edytował Bags_Bunny 2.03.2012, 01:28:00 -------------------- rm -rf /*
|
|
|
![]()
Post
#10
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
dzięki za podpowiedz jednak napisze to w ten sposób i sobie obrobię te dane. jeśli ktoś natknął by się jak to ma działać za pomocą preg_splita, to chętnie poznam odpowiedz.
-------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Szybciej będzie chyba napisać banalny wręcz parser, który po prostu przeleci znak po znaku i rozdzieli względem znaku "+". Do tego proste sprawdzanie Czy znajdujemy się pomiędzy cudzysłowem?, ignorujące znak "+".
O dziwo w PHP najprawdopodobniej będzie to najwolniejsze rozwiązanie. ![]() |
|
|
![]()
Post
#12
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
Szybciej będzie chyba napisać banalny wręcz parser, który po prostu przeleci znak po znaku i rozdzieli względem znaku "+". Do tego proste sprawdzanie Czy znajdujemy się pomiędzy cudzysłowem?, ignorujące znak "+". O dziwo w PHP najprawdopodobniej będzie to najwolniejsze rozwiązanie. ![]() właśnie tak miałem teraz, o ile przy string'u, który ma kilkanaście znaków to jest spoko, ale jak już wzrasta złożoność obliczeniowa wraz z wzrostem złożoności string'u robi się nie wydajnie, dlatego chciałem to zrzucić na PCRE ![]() -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 10:45 |