Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne :: Niepoprawny pattern
NoiseMc
post
Post #1





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Jako, że jestem cienki strasznie w wyrażeniach regularnych (unikam jak tylko mogę) proszę o pomoc prz napisaniu i objaśnieniu patternu (IMG:http://forum.php.pl/style_emoticons/default/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.

Ten post edytował NoiseMc 15.03.2006, 21:39:49
Go to the top of the page
+Quote Post
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


tak na szybko:
Kod
#http://(.*?)(?<!jpg|gif|jpeg)\s#
Go to the top of the page
+Quote Post
NoiseMc
post
Post #3





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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.

Ten post edytował NoiseMc 15.03.2006, 23:34:15
Go to the top of the page
+Quote Post
FiDO
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
NoiseMc
post
Post #5





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 01:43