[php] Wyciąganie fragmentów ciągu do tablicy

0

Witajcie :)
Mam problem,
w dużym ciągu mam kilka elementów typu:

chce wyciągnąć wszystkie takie divy, a konkretnie zawartość ID. Ułożyłem wyrażenie regularne: '^d[0-9]*$'

Z jakiej funkcji skorzystać aby wyszukać wszystkie takie fragmenty ciągu i przekazać je do tablicy?

Z góry dzięki

1

preg_match_all, ale wygląda na to, że to wyrażenie Ci nie zadziała. Masz je "zakotwiczone", tj. zaznaczyłeś, że dopasowanie ma następować od początku ciągu wejściowego (znak ^) do końca (znak $). Czyli dopasuje to jedynie takie ciągi, które składają się z: początku, litery d, ciągu cyfr (opcjonalnie: pustego), końca. Czyli: dopasujesz tylko takie ciągu, które składają się wyłącznie z litery d i ciągu cyfr (cyfr może być zero).

Zauważ, że u Ciebie ciągiem wejściowym jest CAŁY przetwarzany HTML -- wszystkie te divy i tak dalej. Ponieważ użyłeś kotwic (^ oraz $), próbujesz dopasować CAŁY ciąg wejściowy do wyrażenia regularnego z cyframi. Gdybyś zlikwidował kotwice, to dopasowany zostałby dowolny ciąg cyfr z ciągu wejściowego, a o to Ci przecież chodzi.

Nawet gdy to poprawisz, to wyrażenie regularne wciąż nie będzie OK. Zakładam, że te apostrofy nie należą do wyrażenia regularnego, tylko definiują string PHP, który to wyrażenie reprezentuje. W takim wypadku, zostaną dopasowane również wszystkie... litery d. Bo masz tam operator * przy zakresie znaków z cyframi. Czyli może tam być litera d, za którą ma wystąpić zero lub więcej cyfr. Fragment ciągu składający się z samej litery d spełnia ten warunek: jest litera d i zero cyfr. Zależnie od tego, co będziesz miał w HTML-u, zadziałać może zwykła zamiana operatora * na +. Wyrażenie 'd[0-9]+' dopasuje każdy fragment ciągu wejściowego, który zawiera literę d, po której następuje jedna lub więcej cyfr. Jeśli takie fragmenty występują jedynie w atrybucie ID, to to zadziała, jednak będzie dość kruche. Może lepiej dopasować ciąg <div, jakieś spacje, a potem ciąg id=, otwierający cudzysłów, nasze ID oraz zamykający cudzysłów? A tak w ogóle to bezpiecznie i uniwersalnie by było oczywiście użyć parsera XML/HTML, choć w praktyce często wystarczą regexpy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1