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.
// pisane z palca, powinno działać wg. regex101.com
http://www.php.net/preg_match_all('/(<uri>)(.*<\/image_big>)/', $xlmContent, $matches)
http://www.php.net/array( '0' => '<uri>', '1' => 'http://domain-name.com/41874_01_home_big.jpg</image_big>' );
poradzisz sobie dalej.
http://www.php.net/str_replace(http://www.php.net/array(), http://www.php.net/array())
Dzięki Forti. Sam Notepad++ i wyrażenia regularne tego nie ogarną?
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 ;]
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>
No to podobnie jak w phpStorm brawo!
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)