Zaseknute slovo, regularny vyraz – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zaseknute slovo, regularny vyraz – PHP – Fórum – Programujte.comZaseknute slovo, regularny vyraz – PHP – Fórum – Programujte.com

 

Smokie0
Expert
22. 8. 2008   #1
-
0
-

Zdravim,

pisem parser vysledkov z jednej webovej hry a nemam problem s vyberanim udajov pomocou regularnych vyrazov, az na jeden...

Hlavny problem je ten, ze ten vypis porozdelovany na niekolko riadkov. Skusal som to vsetko natlacit do jedneho riadku roznymi sposobmi (nl2br a potom som nahradzoval prazdnymi znakmi, alebo preg_replace("/\n$/", "", $_POST['code']); a podobne) a nic mi nepomohlo.

Vieme, ze vo vsetkych vysledkoch su vypisani hraci, ich udaje a vysledky. To u mna vyzera napriklad takto:

	3

1 [Kool Tools] Aivar Raudkepp
14 points
Api Racing
+6.603 Reynard
Honda
Firestone +24.500
52.974
5 stops

A problem je prave vo zvyraznenom slove. Neviem ako ho dostat vonku. Ked budem hladat iba cisto text, tak mi najde nieco ine, napr. to Kool Tools, cize tade cesta nevedie. Snazil som sa do vyrazu zakomponovat aj riadok nad nim a pod nim, ale neberie mi to. Neviem ako to urobit spravne.

Tak prosim o radu.

Nahlásit jako SPAM
IP: 88.212.23.–
Smokie0
Expert
22. 8. 2008   #2
-
0
-

No tak, ludia, prosim :) ako do regularneho vyrazu zadat to aby sa bral do uvahy riadok nad hladanym vyrazom a riadok pod nim?

Nahlásit jako SPAM
IP: 88.212.23.–
bukaj0
Věrný člen
22. 8. 2008   #3
-
0
-

Smokie
Nějak nechápu ten formát. Vidím v tom akorát různě rozházená čísla a řetězce :o)

Jinak si myslím, že na parsování nějakých složitějších věci nejsou reguláry zrovna tím nejvhodnějším.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Smokie0
Expert
22. 8. 2008   #4
-
0
-

To bukaj : Ten format su rozhadzane cisla a retazce.
Tam ide o to, ze sa pride na stranku tej hry, skopiruje sa cez ctrl+a a ctrl+c cely jej obsah (to co sa pri kopirovani ulozi do pamate je vo formate ako som ukazal) a ten sa vlozi do parsera, ktory z toho urobi normalne lahko citatelny format pre tretiu stranu (forum). Ta hra nie je moja, cize ja neviem tie udaje priamo nacitat z databazy do pozadovaneho formatu.

Cital som, ze na medzery, tabulatory a tieto veci je [space], ale to neviem nijak raz donutit fungovat.

Nahlásit jako SPAM
IP: 88.212.23.–
bukaj0
Věrný člen
22. 8. 2008   #5
-
0
-

Smokie
Pochop, že parser nemůže parsovat něco, co nemá žádnou specifikaci, žádný tvar. Tohle není formát, ale kopa znaků. Jestli je ta hra někde veřejně přístupná, hodil by se odkaz na ní, lépe na zdroj, odkud data bereš, ještě na specifikaci výstupního formátu, nejlépe na všechno. Jinak těžko něco říct. Když tak pošli, co zatím na „parsování“ máš, z toho se taky bude dát hádat, jaký to má vlastně tvar.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Smokie0
Expert
22. 8. 2008   #6
-
0
-

Neviem ci sa spravne chapeme. Tych 9 riadkov, ktore som tu skopiroval som stale opakuju, len sa tam tie hodnoty menia.
Napriklad to co som tu ukazal hovori o tom, ze ten clovek s menom Aivar Raudkepp skoncil na 3. mieste (1. riadok) a kvalifikoval sa ako 1. (2. riadok). Za svoju poziciu berie 14 bodov (3. r) a jazdi za tim Api Racing (4. r). A tak dalej.
A toto sa opakuje u kazdeho kto je evidovany vo vysledkoch. Presne v tomto formate.

Ospravedlnujem sa, ze som to nazval parserom. Viem, ze to nie je parser v plnom slova zmysle, ale nenapadlo mi nic ine cim by som to mohol v kratkosti pomenovat. :)

Nahlásit jako SPAM
IP: 88.212.23.–
bukaj0
Věrný člen
23. 8. 2008   #7
-
0
-

Smokie
Tych 9 riadkov, ktore som tu skopiroval som stale opakuju ... ze ten clovek s menom Aivar Raudkepp skoncil na 3. mieste (1. riadok) a kvalifikoval sa ...
To jsem přesně potřeboval vědět! :o) Pak tedy, pokud vstup rozdělíš vždy po těch devíti řádcích, můžeš použít k „parsování“ nějaký „jednoduchý“ regulární výraz jako:

preg_match("~^\s*

(?<umisteni>\d+)\s*
(?<kvalifikace>\d+)\s*\[(?<neco>[^\]]+)\]\s*(?<jmeno>[A-Za-z0-9 ]+)\s*
(?<body>\d+)\s*points?\s*
(?<tym>[A-Za-z0-9 ]+)\s*
(?<float>(?:\+|-)?\d+\.\d*)\s*(?<dalsi_jmeno>[A-Za-z0-9 ]+)\s*
(?<auto>[A-Za-z0-9 ]+)\s*
(?<druhy_tym>[A-Za-z0-9 ]+)\s*(?<dalsi_float>(?:\+|-)?\d+\.\d*)\s*
(?<treti_float>(?:\+|-)?\d+\.\d*)\s*
(?<stopy>\d+)\s*stops?\s*$~x",
$record,
$parsed
);
var_dump($parsed);

Vezme to data z proměnné $record a naseká je do $parsed. Doporučuji poupravovat, co se může vyskytnout jinak, názvy výsledných indexů apod. Taky to zkusit pustit na nějaký větší set záznamů, jestli to dělá, co se od toho očekává.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Smokie0
Expert
23. 8. 2008   #8
-
0
-

Vau :) dobre, vdaka :)

Nahlásit jako SPAM
IP: 88.212.23.–
Smokie0
Expert
23. 8. 2008   #9
-
0
-

Vyskusal som to, ale vracia to iba prazdne pole... Skusal som to upravit, alebo napisat aj iny vyraz inspirovany niektorymi vecami tam, ale nikdy to nefungovalo (vracalo chyby s '' identifikatormi a podobne).

Castejsie som to skusal riesit funkciou ereg, lebo preg_match si stale naslo nejaku chybu, bolo to zlozite.
Regularne vyrazy som sa ucil hlavne z www.php.sk a www.regularnivyrazy.info/regularni-vyrazy-zaklady.html, takze odtial mam zaklady.

Uz som presiel plno tutorialov kde riesili newline a multiline, ale nic z toho nefunguje... Ani \s(s roznymi kvantifikatormi), ani dokonca \nl (o com som aj pochyboval).

Pri skopirovani z tej stranky (ten text, retazec nie je skopirovany zo zdrojaku, ale rovno z prehliadaca tak ako to je vidiet. Inak sa to neda, lebo ta hra je pisana v zmesy JavaScriptu a bohviecoho, cize zo zdrojaku to je takmer nemozne vytiahnut) sa to samo poodsadzovalo tak ako to je vidiet v priklad v prvom prispevku. To bolo v tabulkach a podobne samozrejme, cize to je dosledok toho. A vazne zacinam rozmyslat ci nie je to ten problem...

Uz som z toho zufaly.

Vazne rozmyslam nad tym, ze to urobim ako drevorubac. Najprv to co skopirujem zo stranky vlozim do textoveho pola, to necham vypisat na obrazovku bez nl2br a podobnych veci. Vdaka tomu sa mi to vypise ako celistvy retazec bez odsadzania a riadkovania. A tento vysledok potom znova vlozim do textoveho pola a tak spracujem...

Nahlásit jako SPAM
IP: 88.212.23.–
KIIV
~ Anonymní uživatel
8632 příspěvků
24. 8. 2008   #10
-
0
-

jestli si chtel nahrazovat v tom retezci odradkovani za nic tak jen upozornuju ze $ se vztahuje na konec retezce ne radku
tj s/\n/ /g

Nahlásit jako SPAM
IP: 77.237.136.–
KIIV
~ Anonymní uživatel
8632 příspěvků
24. 8. 2008   #11
-
0
-

ale jinak casteji je mozna vhodnejsi to hodit do pole pomoci split("\n",$retezec) a pak si to muzes klidne pomoci join ci implode spojit :D

Nahlásit jako SPAM
IP: 77.237.136.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý