Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ XML _ [XML] Zamiana za pomocą wyrażeń regularnych

Napisany przez: turner 13.02.2015, 10:05:42

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.

Napisany przez: Forti 13.02.2015, 10:11:02

  1. http://www.php.net/preg_match_all('/(<uri>)(.*<\/image_big>)/', $xlmContent, $matches)
// pisane z palca, powinno działać wg. regex101.com

teraz masz tablice:

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



i robisz
  1. http://www.php.net/str_replace(http://www.php.net/array(), http://www.php.net/array())
wink.gif poradzisz sobie dalej.

Napisany przez: turner 13.02.2015, 10:37:24

Dzięki Forti. Sam Notepad++ i wyrażenia regularne tego nie ogarną?

Napisany przez: Forti 13.02.2015, 10:51:28

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 ;]

Napisany przez: turner 13.02.2015, 13:35:09

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>

Napisany przez: Forti 13.02.2015, 13:36:02

No to podobnie jak w phpStorm wink.gif brawo!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)