Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenie regularne - ścieżka do pliku
Forum PHP.pl > Forum > Przedszkole
manhunto
Witam. Chciałbym, aby z wklejonej listy, skrypt wybrał ścieżkę do plików z rozszerzeniem *.job.
Próbowałem już przeróżnych wyrażeń, ale żaden nie dał oczekiwanego efektu. Wszystko testowałem na stronie : http://gskinner.com/RegExr/ (na niej wszystko jest okej, zreszta na innych tego typu tez).
  1. $wzorzec = '#(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*.*))+\.job#';
  2. preg_match_all($wzorzec, $text, $job);
  3. print_r($job);
przy powyższym kodzie dostaje błąd:
Warning: preg_match_all() [function.preg-match-all]: Compilation failed: unmatched parentheses at offset 40 (...)
Przykładowy tekst który z którego ma mi wyłapać w/w ściezki:
CODE
[2011-11-12 23:17:12 | 000,000,664 | ---- | M] () -- C:\WINDOWS\System32\d3d9caps.dat
[2011-11-12 23:09:12 | 000,000,462 | -H-- | M] () -- C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
[2011-11-12 22:48:00 | 000,001,036 | ---- | M] () -- C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
[2011-11-12 21:48:00 | 000,001,032 | ---- | M] () -- C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
[2011-11-11 15:32:54 | 000,002,048 | --S- | M] () -- C:\WINDOWS\bootstat.dat
[2011-11-10 21:29:07 | 000,106,496 | ---- | M] () -- C:\Documents and Settings\pavel\Ustawienia lokalne\Dane aplikacji\DCBC2A71-70D8-4DAN-EHR8-E0D61DEA3FDF.ini
[2011-11-09 23:10:20 | 000,002,206 | ---- | M] () -- C:\WINDOWS\System32\wpa.dbl
[2011-11-03 19:36:24 | 000,513,146 | ---- | M] () -- C:\WINDOWS\System32\perfh015.dat
[2011-11-03 19:36:24 | 000,432,690 | ---- | M] () -- C:\WINDOWS\System32\perfh009.dat
[2011-11-03 19:36:24 | 000,093,020 | ---- | M] () -- C:\WINDOWS\System32\perfc015.dat
[2011-11-03 19:36:24 | 000,067,646 | ---- | M] () -- C:\WINDOWS\System32\perfc009.dat
[2011-11-02 23:03:15 | 001,165,713 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\gangsta.mp3
[2011-11-01 17:58:59 | 004,475,532 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Wszystko ma swój koniec_mixdown .mp3
[2011-10-31 20:49:03 | 000,000,000 | ---- | M] () -- C:\Documents and Settings\pavel\Moje dokumenty\afsghaua8aadsfuidsfguiogu.mp3
[2011-10-28 18:08:37 | 000,002,267 | ---- | M] () -- C:\Documents and Settings\All Users\Pulpit\Skype.lnk
[2011-10-25 13:28:47 | 004,625,017 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Mój Cel_mixdown.mp3
[2011-10-25 12:37:07 | 000,000,284 | ---- | M] () -- C:\WINDOWS\tasks\AppleSoftwareUpdate.job
[2011-10-25 10:59:17 | 004,113,529 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\West obrona_mixdown.mp3
[2011-10-24 21:20:49 | 003,100,057 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Domówka_mixdown.mp3
[2011-10-24 21:11:24 | 004,485,913 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Zapomnij o Niej_mixdown.mp3
[2011-09-23 17:25:05 | 010,045,674 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Milion Skojarzeń_mixdown.mp3
[2011-09-18 10:25:40 | 000,000,724 | ---- | M] () -- C:\Documents and Settings\All Users\Pulpit\Mozilla Firefox.lnk
[2011-09-17 12:48:39 | 000,000,000 | -H-- | M] () -- C:\WINDOWS\System32\drivers\UMDF\Msft_User_WpdMtpDr_01_00_00.Wdf
C:\tasks\*.job
C:\tasks\test test test.job

Jedynie przy poniższym wyłapuje mi same nazwy:
  1. $wzorzec = '#[a-zA-Z0-9-_\{\}\* ]*\.job#';
Próbowałem już przeróżnych wyrażeń, proszę o pomoc.
darko
Jeśli te dane czytasz z pliku, to zamiast męczyć się z odpowiednim wyrażeniem regularnym sprawdź tylko czy w bieżącej przeszukiwanej linii znajduje się ciąg z odpowiednim rozszerzeniem.
manhunto
Czytam to ze strony np wklej.org, a chce to miec wypisane w takiej formie:

C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
C:\tasks\*.job
C:\tasks\test test test.job

więc i tak bym musiał potem usuwać te zbędne znaki przed ścieżką.
by_ikar
Kod
<?php


$str = '[2011-11-12 23:17:12 | 000,000,664 | ---- | M] () -- C:\WINDOWS\System32\d3d9caps.dat
[2011-11-12 23:09:12 | 000,000,462 | -H-- | M] () -- C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
[2011-11-12 22:48:00 | 000,001,036 | ---- | M] () -- C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
[2011-11-12 21:48:00 | 000,001,032 | ---- | M] () -- C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
[2011-11-11 15:32:54 | 000,002,048 | --S- | M] () -- C:\WINDOWS\bootstat.dat
[2011-11-10 21:29:07 | 000,106,496 | ---- | M] () -- C:\Documents and Settings\pavel\Ustawienia lokalne\Dane aplikacji\DCBC2A71-70D8-4DAN-EHR8-E0D61DEA3FDF.ini
[2011-11-09 23:10:20 | 000,002,206 | ---- | M] () -- C:\WINDOWS\System32\wpa.dbl
[2011-11-03 19:36:24 | 000,513,146 | ---- | M] () -- C:\WINDOWS\System32\perfh015.dat
[2011-11-03 19:36:24 | 000,432,690 | ---- | M] () -- C:\WINDOWS\System32\perfh009.dat
[2011-11-03 19:36:24 | 000,093,020 | ---- | M] () -- C:\WINDOWS\System32\perfc015.dat
[2011-11-03 19:36:24 | 000,067,646 | ---- | M] () -- C:\WINDOWS\System32\perfc009.dat
[2011-11-02 23:03:15 | 001,165,713 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\gangsta.mp3
[2011-11-01 17:58:59 | 004,475,532 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Wszystko ma swój koniec_mixdown .mp3
[2011-10-31 20:49:03 | 000,000,000 | ---- | M] () -- C:\Documents and Settings\pavel\Moje dokumenty\afsghaua8aadsfuidsfguiogu.mp3
[2011-10-28 18:08:37 | 000,002,267 | ---- | M] () -- C:\Documents and Settings\All Users\Pulpit\Skype.lnk
[2011-10-25 13:28:47 | 004,625,017 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Mój Cel_mixdown.mp3
[2011-10-25 12:37:07 | 000,000,284 | ---- | M] () -- C:\WINDOWS\tasks\AppleSoftwareUpdate.job
[2011-10-25 10:59:17 | 004,113,529 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\West obrona_mixdown.mp3
[2011-10-24 21:20:49 | 003,100,057 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Domówka_mixdown.mp3
[2011-10-24 21:11:24 | 004,485,913 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Zapomnij o Niej_mixdown.mp3
[2011-09-23 17:25:05 | 010,045,674 | ---- | M] () -- C:\Documents and Settings\pavel\Pulpit\Milion Skojarzeń_mixdown.mp3
[2011-09-18 10:25:40 | 000,000,724 | ---- | M] () -- C:\Documents and Settings\All Users\Pulpit\Mozilla Firefox.lnk
[2011-09-17 12:48:39 | 000,000,000 | -H-- | M] () -- C:\WINDOWS\System32\drivers\UMDF\Msft_User_WpdMtpDr_01_00_00.Wdf
C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
C:\tasks\*.job
C:\tasks\test test test.job';


preg_match_all('#([a-z]:\\\.*\.job)#is', $str, $matches);


echo '<pre>'.print_r($matches, true).'</pre>';
Sephirus
Moja propozycja:

  1. preg_match_all('/([a-z]{1}:[^\|\s\n]+\.job)/Usi', $str, $matches);
  2.  
  3. echo '<pre>'.print_r($matches, true).'</pre>';


Daje zawsze tylko pliki z rozszerzeniem *.job

Dla kodu z poprzedniego postu:

Kod
Array
(
    [0] => Array
        (
            [0] => C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
            [1] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
            [2] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
            [3] => C:\WINDOWS\tasks\AppleSoftwareUpdate.job
            [4] => C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
            [5] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
            [6] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
            [7] => C:\tasks\*.job
        )

    [1] => Array
        (
            [0] => C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
            [1] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
            [2] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
            [3] => C:\WINDOWS\tasks\AppleSoftwareUpdate.job
            [4] => C:\WINDOWS\tasks\User_Feed_Synchronization-{9A82595E-375A-4CD9-9E7C-BF6C8863F30A}.job
            [5] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineUA.job
            [6] => C:\WINDOWS\tasks\GoogleUpdateTaskMachineCore.job
            [7] => C:\tasks\*.job
        )

)


EDIT: mała poprawka tongue.gif
manhunto
@Sephirus: Twóje wyrażenie działa tak jak chciałem! Dzięki.
Ps. Co oznacza "Usi" na końcu Twojego wyrażenia? Za co jest opdowiedzialne?

@DOWN: Dzięki, właśnie nie wiedziałem jak to się fachowo nazywa, żeby to wyszukać. Temat można zamknąć.
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.