![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 197 Pomógł: 24 Dołączył: 22.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wyrażenia regularne niestety chyba nigdy nie będą moją specjalnością i wykładam sie przy prostych czynnościach. niby to rozumiem, ale nie wychodzi i już. Jest proste wyrażenie:
wykorzystane w preg_replace. Chcę dodać warunek, że jeżeli PRZED dopasowywanym wyrażeniem jest cudzysłów, to dopasowanie ma być wykluczone. Znaczek wykluczenia to ^, ale nijak nie wiem, jak go tu zastosować. Proszę też o ewentualne słówko na temat ((?: a dokładnie znaku zapytania i dwukropka - co w tym momencie dają? Ten post edytował maviozo 6.11.2011, 23:17:51 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej używać wzorców do URL wziętych z internetu. Ten jest całkiem niezły (nie przeraź się):
Kod ^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$ Czyli dla Twojego przypadku wyglądałoby to tak: Kod (?:^|[^"])(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)? Powinien działać idealnie. Na początek wzorca dałem fragment, który przepuści takie linki, które są na samym początku łańcucha znaków lub mają przed sobą dowolny znak inny niż cudzysłów. A co do (?: ... ) - wszystkie funkcje preg_XXX traktują w specjalny sposób fragmenty wzorców zapisane w nawiasie. preg_match do wyników swojego działania (zmiennej podanej jako 3-ci parametr) dodaje wszystko co znajdzie, a oprócz tego wszystkie fragmenty w nawiasach. Jak dasz (?: ... ) zamiast normalnego nawiasu, to zawartość tego nawiasu nie jest przechwytywana. Pobaw się i porównaj wyniki tych instrukcji: oraz: |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 19:22 |