Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML] Zamiana za pomocą wyrażeń regularnych
Forum PHP.pl > Forum > XML, AJAX > XML
turner
W pliku XML potrzebuję wyszukać i zamienić niektóre ciągi znaków, używając do tego wyrażeń regularnych.

Przykład:
<uri>http://domain-name.com/41874_01_home_big.jpg</image_big>

potrzebuję zamienić na:
<image_big>http://domain-name.com/41874_01_home_big.jpg</image_big>

W dokumencie są jeszcze znaczniki </image_med> oraz </image_res> również poprzedzone znacznikiem <uri>, więc nie mogę poprostu zamienić samego <uri>.

Chciałbym do tego wykonać następującą zamianę (przykład dla jednego ze znaczników):
<uri>.*?</image_big>

I tu się pojawia problem, co wpisać w miejsce .*? w "polu zamień na", aby wartość pomiędzy znacznikami pozostała niezmieniona, a zmienił się tylko znacznik otwierający?

Wpisanie <image_big>.*?</image_big> wyświetla poprostu <image_big>.*?</image_big>, czyli fizycznie zostawia ".*?".

Mam nadzieję, że to co napisałem jest względnie zrozumiałe :-)

Do pracy z dokumentem korzystam z Notepad++, proszę o uwzględnienie tego w ewentualnym rozwiązaniu.
Forti
  1. preg_match_all('/(<uri>)(.*<\/image_big>)/', $xlmContent, $matches)
// pisane z palca, powinno działać wg. regex101.com

teraz masz tablice:

  1. '0' => '<uri>',
  2. '1' => 'http://domain-name.com/41874_01_home_big.jpg</image_big>'
  3. );



i robisz
wink.gif poradzisz sobie dalej.
turner
Dzięki Forti. Sam Notepad++ i wyrażenia regularne tego nie ogarną?
Forti
A co ma do tego notepad niby? Nie znam go na tyle. Ale raczej nie ma wyszukiwania za pomocą wyrażeć regularnych.
Przecież to jest proste w skrypcie php do zrobienia ;]
turner
Rozwiązanie w Notepad++ dla opisanego przeze mnie przypadku:

find: <uri>(.*?)</image_big>
replace: <image_big>\1</image_big> lub <image_big>$1</image_big>
Forti
No to podobnie jak w phpStorm wink.gif brawo!
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-2024 Invision Power Services, Inc.