Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyrażenie regularne
arzach
post
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Mam taki ciąg

Kod
<DISTANCE:6>476.96 <BAND:3>80M <CALL:6>SP3JNV <COMMENT:8>SP8PRL/8 <CONT:2>EU <EOR>


i jak napisać wyrażenie regularne by wyciągnąć wartość call
Obecnie mam taki kod
  1. preg_match_all("/<CALL:[0-9]+>(.*)</", $dane[$i], $new_array[$i]['band'], PREG_PATTERN_ORDER);


Działa ale nie do końca ponieważ wyciąga wszystko od <CALL:6> do końca wystąpienia < czyli

Kod
SP3JNV <COMMENT:8>SP8PRL/8 <CONT:2>EU <


A potrzebuje do pierwszego wystąpienia znaku < po (.*)

Mam nadzieje ze rozumiecie i ktoś będzie w stanie mi pomóc .

Ten post edytował arzach 18.08.2011, 21:09:54
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Może tak:
  1. preg_match_all("/<CALL:[0-9]+>(.*?)\040</", $dane[$i], $new_array[$i]['band'], PREG_PATTERN_ORDER);

Powinno wyciągnąć to co chcesz, nawet bez spacji.

EDIT:
Chyba, że to nie spacja, to wtedy:
  1. preg_match_all("/<CALL:[0-9]+>(.*?)\s</", $dane[$i], $new_array[$i]['band'], PREG_PATTERN_ORDER);


Ten post edytował mortus 18.08.2011, 21:28:51
Go to the top of the page
+Quote Post
arzach
post
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Żadne z powyżej podanych sposobów nie działa. Ktoś ma jeszcze jakiś pomysł ?



Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Na pewno któryś ze wzorców podanych przeze mnie działa, z tym, że oczekiwany rezultat powinieneś mieć w zmiennej $new_array[$i]['band'][1][0] (gdzie $i to oczywiście konkretna wartość), bo tak działa funkcja preg_match_all().

Ten post edytował mortus 19.08.2011, 09:29:10
Go to the top of the page
+Quote Post
arzach
post
Post #5





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Przecież mówię ze nie działa plik ma parę tysięcy wierszy
Kod
<DISTANCE:6>288.28 <BAND:3>80M <CALL:8>SP9HTY/9 <CONT:2>EU <CQZ:2>15  

<DISTANCE:6>237.05 <BAND:3>80M <CALL:8>SP6JQF/7 <CONT:2>EU <CQZ:2>15

<DISTANCE:6>288.28 <BAND:3>80M <CALL:8>SP9HTY/9 <CONT:2>EU <CQZ:2>15  

<DISTANCE:6>237.05 <BAND:3>80M <CALL:8>SP6JQF/7 <CONT:2>EU <CQZ:2>15

<DISTANCE:6>288.28 <BAND:3>80M <CALL:8>SP9HTY/9 <CONT:2>EU <CQZ:2>15  

<DISTANCE:6>237.05 <BAND:3>80M <CALL:8>SP6JQF/7 <CONT:2>EU <CQZ:2>15


I wyrażenie
  1. preg_match_all("/<CALL:[0-9]+>(.*?)\040</", $dane[$i], $new_array[$i]['call'], PREG_PATTERN_ORDER);


Działa prawie dobrze ale czasami zdarza się ze doda
Kod
SP9HTY/9 <CONT:2>EU <CQZ:2>15 <DXCC:3>269 <FREQ:8>3.703000 <
Go to the top of the page
+Quote Post
Piogola
post
Post #6





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Kod
#<CALL:[^>]+>([^ ]+) <#


Ten post edytował Piogola 19.08.2011, 11:54:39
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:41