Skocz do zawartości

[PHP] Wyrażenia regularne.


Rafal

Rekomendowane odpowiedzi

Mamy taki ciąg tekstowy:

<a href="https://adres" title="tytul">anchor</a>

W jaki sposób zamienić go na:

Strona: adres, tytuł: tytul, anchor: anchor

Generalnie chodzi mi o wydobycie tych fragmentów, przypisanie ich do zmiennych i użycie w nowym ciągu, zastąpującym ten poprzedni. Regułki RegEx umiem napisać.

Chodzi mi o analogię do fukncji str_replace - jest jakiś duży ciąg tekstowy i każde wystąpienie jakiegoś fragmentu zamienia na inny. W moim przypadku, żeby każde wystąpienie <a href... </a> zamieniało na inny ciąg, wykorzystując wydobyte ze środka zmienne.

Coś jakby połączenie funkcji ereg (wydobycie fragmentów) i ereg_replace (zamiana odpowienich fragmentów).

Autor postu nie ponosi żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania zawartych w nim informacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Mamy taki ciąg tekstowy:

<a href="https://adres" title="tytul">anchor</a>

W jaki sposób zamienić go na:

Strona: adres, tytuł: tytul, anchor: anchor

<?
$string = '<a href="https://adres" title="tytul">anchor</a>';
preg_match("/<a href=\"https:\/\/(.*?)\" title=\"(.*?)\">(.*?)<\/a>/", $string, $args);
echo "Strona: $args[1], tytul: $args[2], anchor: $args[3]";
?>

Mariusz Dalewski

MD Software

Programowanie systemów CMS

Odnośnik do komentarza
Udostępnij na innych stronach

Męczę się z tym już tyle czasu i nadal nie mogę sobie poradzić.

Nie wiem w jaki sposób zamienić wszystkie linki na stronie.

Jak zrobię to w pętli

while (preg_match("/<a href=\"https:\/\/(.*?)\" title=\"(.*?)\">(.*?)<\/a>/", $string, $args))
{
$out = "Strona: $args[1], tytul: $args[2], anchor: $args[3]";
$string = preg_replace("/<a href=\"https:\/\/(.*?)\" title=\"(.*?)\">(.*?)<\/a>/", $out, $string);
}
echo $string;

to każdy link zamienia na $out, ale dla $args z pierwszego linka. Po każdym wykonaniu pętli, te wartości nie zmieniają się.

Spróbowałem jeszcze tak

while (ereg('<a href="https://[[:print:]]+" title="[[:print:]]+">[[:print:]]+</a>', $string))
{
ereg('<a href="https://[[:print:]]+" title="[[:print:]]+">[[:print:]]+</a>', $string, $tab);
$out = "Strona: $tab[1], tytul: $tab[2], anchor: $tab[3]";
$string = str_replace($tab[0], $out, $string);
}
echo $string;

ale $tab[1] do $tab[3] są puste.

Pewnie trzeba użyć preg_match_all ale nie wiem jak to zastosować do mojego przypadku. Przykłady z manuala nie pomogły mi. Ta zamiana linka to tylko przykład, taka fukncja jest mi potrzebna dosyć często i jak dotąd nie udało mi się tego zrobić.

Autor postu nie ponosi żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania zawartych w nim informacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności