Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne :: Niepoprawny pattern
Forum PHP.pl > Forum > PHP
NoiseMc
Jako, że jestem cienki strasznie w wyrażeniach regularnych (unikam jak tylko mogę) proszę o pomoc prz napisaniu i objaśnieniu patternu smile.gif

Moje wyrażenie ma znaleźć ciąg znaków zaczynający się na "http://" i kończący się spacją lub nową linią z tym, że ciąg nie może kończyć się na "jpg, jpeg lub gif" czyli w uproszczeniu ma wyłapywać linki, ale nie te które wskazują na jakikolwiek image.

Do zamiany używam preg_replace ().

Do tej pory udało mi się wyrzeźbić nast pattern:
  1. <?php
  2. /http:&#092;/\/(.*?)[^jpg]\r\n/
  3. ?>

Wyłapuje linki ... ale wszytkie nawet te do obrazków.

Z góry dziękuję za wszelką pomoc.
FiDO
tak na szybko:
Kod
#http://(.*?)(?<!jpg|gif|jpeg)\s#
NoiseMc
Dzięki FiDO ale wciąż wyłapuje adresy obrazków ...
Konkretnie chcę przerobić smarty_modifier_bbcode2html:

Najpierw zamieniam wszystkie:
  1. <?php
  2. '/\[img(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si' => "<img alt=\"\" src=\"\\1\" />",
  3. ?>


Następnie chcę wyłapać wszystkie adresy url i pozamieniać je na linki:
  1. <?php
  2. '#http://(.*?)(?<!jpg|gif|jpeg)\s#' => "<a href=\"http://\\1\">Link</a>",
  3. ?>


Zamienia pierwsze tak jak powinien, ale potem w miejsce "src" wstawia to co wyłapał z drugiej zamiany czyli robi:
  1. <img alt="" src="<a href=\"http://wylapany.url/image.jpg" />">Link</a>" />


Edit:
Wyciągnąłem żywcem z parsera phpBB:
  1. <?php
  2. $strHtml = preg_replace ( '#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is', "\\1<a href=\"http://\\2\">Link</a>", $strSource );
  3. ?>

i działa jak należy.
FiDO
No widzisz.. zle zdefiniowales problem, dlatego ten blad. Wyrazenie jest poprawne, tylko ze napisales, ze ma lapac ciag do pierwszego entera badz spacji, a jak widzisz w tagu IMG link konczy sie cudyslowem.. i to wlasnie psuje "zabawe" w tym przypadku.
Popracuj nad koncowka tego wyrazenia, zeby lapalo tez inne mozliwe "zakonczenia" linkow.
NoiseMc
Cytat(FiDO @ 2006-03-15 22:38:15)
Wyrazenie jest poprawne, tylko ze napisales, ze ma lapac ciag do pierwszego entera badz spacji, a jak widzisz w tagu IMG link konczy sie cudyslowem.. i to wlasnie psuje "zabawe" w tym przypadku.

Faktycznie tego nie wyłapałem ale jak już wpominałem słabo sobie radzę z wyr. regularnymi. Dzięki wielkie za pomoc smile.gif
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.