Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z preg_match
Forum PHP.pl > Forum > Przedszkole
TheSnake
Witam, na wstępie chciał bym się przywitać smile.gif
Otóż, mam prblem z jakimi kolwiek wyrażeniami regularnymi (w sensie, że proste ciągi znaków). Czytałem w podręczniku, na stronach, ale nie mogę tego pojąć. sciana.gif
I tu pojawia się moje pytanie, jak np. z ciągu classType = "nice" mogęwyciągnąć to co znajduję się w cudzysłowach (w tym wypadku nice)? I jeżeli taka treść znajduję się w pliku tekstowym to czy funkcja odnajdzie to i poradzi sobie? (jest plik tekstowy z różnymi "zmiennymi" a "zmienna" classType jest gdzieś pośrodku)?

Pozdrawiam.
wookieb
  1. <?php
  2. preg_match('/classType = "(.*?)"/s', $zmienna, $wyniki);
  3. print_r($wyniki);
  4. ?>
TheSnake
Ok, to działa ale na zmiennej, która zaczyna się na classType. Ja potrzebuję/chce się nauczyć tak, żeby szukało w pliku tego classType i wyciągało zawartość. Jeżeli użyję preg_match_all to pokazuje, że są 2 elementy w tablicy, ale są one puste.
wookieb
No a jak uzyles preg_match_all ?
TheSnake
  1. <?php
  2. preg_match_all('/classType = "(.*?)"/s', $zmienna, $wyniki);
  3. print_r($wyniki);
  4. ?>


Jeżeli do zmiennej $zmienna przypisze classType = "nice" to wszystko działa, ale jezeli do $zmienna przypisze plik (otwarty i wczytany) to już nie działa.
Wicepsik
Pokaż ten plik który wczytujesz
wNogachSpisz
Przykład dość elastycznego wyrażonka:

<?php

preg_match_all( "#([\r\n\t ]{1,})|([<]{1,1})classType[\r\n\t ]*=[\"']{1,1}([^\"'])+)+[\"']#", $html, $out );


?>

wyrazenie dziala z dowolna iloscia spacji, enterow i tabulatorow miedzy = a ", akceptuje też dwa typy apostrofów, " i '
wyrazenie czekuje ze przed classType znajdzie sie daszek < lub conajmniej jedna spacja, enter lub tabulator, 

Wyrazenie jest praktycznie pełne, gotowe na każdy input smile.gif


Napisałeś, że chcesz się nauczyć wyrażeń regularnych, pozostają ćwiczenia, 
moge też umiarkowanie polecić książke wyrażenia regularne, taka niebieska z sową Pana Jeffreya E.F Friedla



pozdro600
TheSnake
Cytat(Wicepsik @ 6.06.2009, 10:21:19 ) *
Pokaż ten plik który wczytujesz


Kod
-------------------- Server Config -------------------

    accountName = "rox"
    namelockManager = "yes"
    generateName = "no"
    classType = "nice"
    -- Banishments
    notationsToBan = 3
    classBroadcast = "yes"
    killsToBan = 60
    autoBanishUnknownBytes = "no"

    -- Battle
    openBattle = "no"

-------------------- End -----------------------------

@up
Kod
Warning: preg_match_all() [function.preg-match-all]: Compilation failed: unmatched parentheses at offset 57 in D:\WebServ\WebServ\httpd\config.php on line 9
Ilosc wynikow: 0


Plik config.php:
  1. <?php
  2. $config = "config.txt";
  3. $opencfg = fopen($config, 'r');
  4. $rozmiarcfg = filesize($config);
  5. $cfg = fread($opencfg, $rozmiarcfg);
  6. $cfg = nl2br($cfg);
  7. fclose($opencfg);
  8.  
  9. preg_match_all( "#([r\n\t ]{1,})|([<]{1,1})classType[r\n\t ]*=[\"']{1,1}([^\"'])+)+[\"']#", $cfg, $out );
  10. $ile = count($out);
  11. echo "Ilosc wynikow: $ile<br>";
  12. print_r($out);
  13. echo "<hr>";
  14.  
  15. ?>


Refresh.. ktoś może mi pomóc?
Maxik
Zamień w pliku -- na ;, i usuń ", możesz wtedy użyć parse_ini_file" title="Zobacz w manualu PHP" target="_manual
TheSnake
Gdybym chciał, aby to bym tak zrobił już bez zbędnego pisania tutaj, ale chodiz mi o wyrażenia regularne.
Fifi209
Miałem kiedyś prosty parser lua właśnie do configa.

explode, list, preg_match

Wyciągnij wszystko a potem przeszukaj tablicę smile.gif
wookieb
Po pierwsze to kosmiczne wyrażenei które masz jest tak głupie, że szkoda gadać.

Najszybciej bedzie jak wyciagniesz sobie te ustawienia za pomoca parse_ini_file i nie bedziesz mial problemu z takimi wyrazeniami. Jak potrzebujesz parsera ini ktory mozesz sobie modyfikowac to daj znac to wrzuce ci prosta klase do tego.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.