Articole • regexp convertește url la o legătură

RegExp: Conversia unei adrese URL într-un link

Într-adevăr, nu există nici o limită la profunzimea și lărgimea unui proiect simplu, la prima vedere, al "Răspunsurilor" (acum mort). După ce a început jocul la nivelul, plasarea obișnuit HTML-fișier, făcute de mână pe genunchi - la o bază de date, și apoi la un sistem complet automatizat de import prin RSS. Aplicați pe Google de tip Google.







Discuțiile ulterioare sunt destinate persoanelor care sunt familiarizate, cel puțin în termeni generali, cu expresii regulate și programare, cu problemele cu care se confruntă dezvoltatorii web.

Se pare că am convins cititorii că uneori lucrurile evidente, simple, utile și evident nu funcționează. Ei nu funcționează nici acolo unde ar trebui și chiar sunt obligați să lucreze.

Să ne îndreptăm acum spre prezentarea soluției noastre la această problemă. Este ca și cum toate geniul :) Sperăm că cineva va fi util dacă nu treceți cu noi toți pașii spre soluție, apoi cel puțin profitați de rezultatul final.

Deci, colectăm textul, care va conține toate dificultățile de mai sus. Singurele restricții sunt că linia nu trebuie să aibă caractere returnate \ n sau \ r \ n și
sau
în schimb (veți avea nevoie de o complicație foarte scăzută - face singur) semne inch „“ „și apostroful“ „(caractere speciale care afectează securitatea unei pagini Web și ar trebui să fie transformate într-un HTML-entități pentru stocarea într-o bază de date sau înainte de a scoate de pe pagina) 1.

Să încercăm să facem o expresie regulată, să facem față acestor dificultăți. Dar mai întâi menționăm aceste dificultăți - vom scrie o declarație oficială a problemei.

Doar ceva! Să începem, probabil.

În PHP, funcția preg_replace ($ pattern, $ replacement, $ text) este folosită pentru a lucra cu expresii regulate, ceea ce este exact ceea ce trebuie să rezolvăm problema. Să începem cu primul argument - de fapt, expresia în sine.







1. În conformitate cu punctul 1 al condiției problemei, expresia trebuie să funcționeze cu caractere Unicode. U modificator servește acestui scop (deși, altele decât UTF-8 pagini, este, dimpotrivă, se va opri de lucru - atunci acest modificator ar fi mai bine pentru a elimina); Eu, de asemenea, nu doare pentru a face expresia caz-insensibil. (Notă: dacă folosiți modificatorul x (PCRE_EXTENDED), trebuie să precedeți spațiile cu spătarul "\").

Asta este: / expression / iu. unde "expresie" este o expresie nenăscută, dar regulată, o martor.

În plus, poate exista orice succesiune de litere, numere și simboluri, cu excepția spațiului sau a începutului etichetei "<», обеспечиваемая с помощью выражения в квадратных скобках [^<\s]+ — знак плюс означает, что повторений таких символов должно быть больше нуля. Итого получаем, суммируя: http:\/\/[^<\s]+

Desigur, asta nu este totul. Dacă ne limităm la acest lucru, http: \ / \ / [^<\s]+[^<. ;?!”»’“+\-\)] — выражение в первых квадратных скобках захватит и знак препинания в конце, а во вторых скобках — пробел. Надо нам это? Нет, не для этого деды воевали.

Avem nevoie de un limiter. Acest limitator va fi [. ; - "" "+ \ - \)] (p:
) * \ s Este dificil? O vom distra. În paranteze - set de semne de punctuație (poate fi extins la gust), dintre care unul trebuie să poticni și căutare de funcționare a motorului în paragraful precedent. (?:
) * arată că se poate întâlni de mai multe ori
4 sau
, și poate să nu se întâlnească. În plus, conținutul parantezelor nu ar trebui să fie plasat într-un „buzunar“ - un design utilizat pentru: - mai mult pe acest lucru mai jos (subexpression?). Important: -; „?“ - După ce a întâlnit (sau nu sa întâlnit o notă pe semnul întrebării după croșetă de închidere de drum, în loc să puteți pune un asterisc «*», în cazul în care mai multe caractere presupune un rând ca - în textele este destul de comună „“ ) a semnului de punctuație și a posibilelor etichete de transfer de linie există un spațiu obligatoriu.

Rămâne să înțelegem ceea ce schimbăm. Sapunul arata astfel:

$ replacement = '$ 1$ 2 ';

În cele din urmă, punem întreaga fermă într-o funcție PHP care funcționează cu expresii regulate:

preg_replace ($ pattern, $ replacement, $ text);

Ei bine, sau, care este la fel, dar pare mai greoaie:

Vă dorim succes în proiectarea site-urilor!







Trimiteți-le prietenilor: