Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [preg_replace] Wyciągnięcie ciągu znaków za pomocą wyrażeń regularnych
Forum PHP.pl > Forum > PHP
UserCF
Witam wszystkich programistów. Mam pewien problem, jako że w szkole na Matyce za często nie bywałem facepalmxd.gif mam pewien problem który dotyczy wyrażeń regularnych otóż:

Posiadam kod:

  1. $zmienna = "/[^<h2>](quick)[^<\/h2>]/";
  2. $patterns = "<h2>sadasd quick dsad</h2> fojumps over the lazy dog. <strong>quick</strong> paul <strong>quick</strong> dupa <h2>quick</h2> <strong>quick</strong>"
  3. $replacements = "zmienione";
  4.  
  5. echo preg_replace($patterns, $replacements, $string);
  6.  


Powyższe działanie chce wykorzystać w preg_replace

Próbowałem naprawdę wielu przykładów ale żaden nie chce działać, chodzi o to że quick w znacznikach <h2></h2> podmienia się tylko wtedy jeśli istnieje jakaś wartość po bokach ( Przykład: <h2>Jakaś wartość quick jakoś wartość</h2>) ale ( Przykład: <h2>quick</h2>) już nie podmienia.

Jeśli znajdzie się jakiś specjalista od wyrażeń regularnych będę mega wdzięczny za każdą chęć pomocy.
viking
Ale na co się ma podmieniać? W temacie wyciągnięcie, w wątku podmiana. Określ to bardziej.
UserCF
Cytat(viking @ 11.07.2017, 17:14:14 ) *
Ale na co się ma podmieniać? W temacie wyciągnięcie, w wątku podmiana. Określ to bardziej.


Kod poprawiony
Pyton_000
eee cos takiego?

https://regex101.com/r/b0TjIZ/1
UserCF
Cytat(Pyton_000 @ 11.07.2017, 18:20:30 ) *


Witam i dziękuje za dołączenie do tematu. Podejmowałem podobną próbe z takim przykładem jak podałeś lecz niestety to nam nie chce działać.

Ten przykład działa m.in w przypadku preg_match_all patrz link: http://www.phpliveregex.com/ , a potrzebujemy wykorzystać to w preg_replace ale na + poprawne wynajdywanie zakochany.gif

Aktualny stan to: Odpowiednie zaznaczenie, tyle że nie podmienia się sam wyraz a cały klucz.


Powinniśmy teoretycznie zrobić coś takiego:

  1. [^<h2>.*?](quick)[^.*?<\/h2>]


Czyli zastosować nawiasy kwadratowe i zablokować żeby to co w nich jest nie było brane pod uwagę podczas podmiany. Ale powyższy kod nie działa co_jest.gif
Pyton_000
Wiesz do czego są nawiasy [] ? Aby dopasować zakres znaków, a w Twoim przypadku wszystkie znaki poza tym co podałeś.

http://www.phpliveregex.com/p/kId
UserCF
Cytat(Pyton_000 @ 12.07.2017, 07:46:28 ) *
Wiesz do czego są nawiasy [] ? Aby dopasować zakres znaków, a w Twoim przypadku wszystkie znaki poza tym co podałeś.

http://www.phpliveregex.com/p/kId


No i genialnie wszystko działa wink.gif Dziękuje ci bardzo zoszczędziłeś mi zapewne długiej męczarni. goatee.gif Podstawy się kłaniają.

Powiesz mi jeszcze co te tzw. $1 i $3 w replacments znaczą i jak ich używać?
viking
http://php.net/preg_replace
Poczytaj, jest opisane
UserCF
Cytat(viking @ 12.07.2017, 08:46:54 ) *
http://php.net/preg_replace
Poczytaj, jest opisane


Podziekowal

Cytat(UserCF @ 12.07.2017, 08:44:25 ) *
No i genialnie wszystko działa wink.gif Dziękuje ci bardzo zoszczędziłeś mi zapewne długiej męczarni. goatee.gif Podstawy się kłaniają.

Powiesz mi jeszcze co te tzw. $1 i $3 w replacments znaczą i jak ich używać?


Chyba mnie udusisz ale muszę Ci zadać jeszcze jedno juz ostatnie pytanie. Jak zrobić to tak aby zadziałało to w preg_replace_callback ?


  1. return $matches[0] = $tablica[$i];


Myślałem że zadziała to analogicznie jak w preg_replace, ale się pomyliłem niestety.
viking
A co to jest $tablica[$i]?
Pyton_000
Przeglądanie dokumentacji na prawdę nie jest trudne... https://secure.php.net/manual/en/function.p...back.php#109938
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.