Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenie regularne, szukanie domeny w tekście
Forum PHP.pl > Forum > Przedszkole
wNogachSpisz
Witam, szukam wyrażenia regularnego które wyszuka domeny w tekście.
Ułatwieniem jest kodowanie tekstu, zawsze utf8.
Zarówno subdomeny jak i TLD mogą być narodowe.

Lista akutalnych narodowych TLD jest tutaj:
http://www.icann.org/en/topics/idn/fast-tr...mpletion-en.htm

Lista wszystkich TLD:
http://data.iana.org/TLD/tlds-alpha-by-domain.txt

Z góry dziękuję za pomoc.
wNogachSpisz
Cytat(uupah5 @ 3.02.2012, 12:23:18 ) *

No i co?
To ma być odpowiedź na moje pytanie?
uupah5
na stronie masz walidację domeny. bo chodziło Ci o regex.
chyba że szukasz http://pl.wikipedia.org/wiki/Domena_%28historia%29 - to ja nie pomogę
wNogachSpisz
Cytat(uupah5 @ 3.02.2012, 12:36:43 ) *
na stronie masz walidację domeny. bo chodziło Ci o regex.

Wskaż mi z łaski swojej w którym miejscu na tej stronie jest regex przyrównujący domeny IDN.
Mimo najszczerszych chęci nie widzę tam nic co nawet delikatnie ocierało by się o temat.
uupah5
próbowałeś to? http://stackoverflow.com/questions/3265253...d-for-idn-regex
wNogachSpisz
To jest regex pod javascript, a ja szukam pod PHP, zresztą i tak nie działa.
Jak masz zamiar dalej bezmyślnie wklejać linki z pierwszej strony wyszukiwania w google, to skończ.
uupah5
jakoś się przyzwyczaiłem, że w przedszkolu problemy często są rozwiązywane przez pierwszą stronę google. jak Cię uraziła moja chęć pomocy, to zapewniam, że nie będę się narzucać.
a co do języka, między EMCA a Posix nie ma tak wielkich różnic żeby sobie nie przerobić.
wNogachSpisz
Cytat(uupah5 @ 3.02.2012, 13:09:00 ) *
jakoś się przyzwyczaiłem, że w przedszkolu problemy często są rozwiązywane przez pierwszą stronę google. jak Cię uraziła moja chęć pomocy, to zapewniam, że nie będę się narzucać.

Razi mnie Twoja bezmyślność, nie chęć pomocy. Razi mnie również brak elementarnej wiedzy, nie wiesz co to jest domena narodowa. Twoja wiedza nie jest nigdzie blisko wystarczającej aby nawet w najmniejszym stopniu pomóc mi w rozwiązaniu problemu. Normalny człowiek już dawno by zamilkł.
piotrooo89
koniec off topa bo po warnie i zamknę. jak chcecie sobie coś wyjaśnić to via PW.
by_ikar
IMO są dwa sposoby na zrobienie tego. Albo jedno długie wyrażenie z masą instrukcji warunkowych w wyrażeniu. Albo drugie podejście, z dość uniwersalnym wyrażeniem, poszukującym ciągów o zbliżonym podobieństwie, a następnie w callback zrobić sobie funkcję która będzie porównywać do jakichś danych, powiedzmy z tablicy. Ale musisz jeszcze powiedzieć, czy ty szukasz całego linku, czy to ma być tylko sama domena, bo to też jest w sumie istotne wink.gif
wNogachSpisz
Okazało się że narodowe TLD można sobie podarować, zrobiłem więc tak:

  1. <?php
  2.  
  3. $input = $_REQUEST['input'];
  4.  
  5. // W pierwszym kroku zamieniamy wszystkie znaki ASCII
  6. // które nie moga wchodzić w nazwę domeny, na spacje (spacja to teraz jedyny separator)
  7. $chars = array(
  8. 'special' => '~`!@\#$%^&*()_=+\[{\]}\\|;:\'",<>/?',
  9. 'whitespace' => ' \r\n '
  10. );
  11. // HINT: Możnaby opcjonalnie potraktować przecinek jako kropkę..
  12.  
  13. $patt = '#['.$chars['special'].$chars['whitespace'].']+#';
  14. $list = preg_replace($patt, ' ', $input);
  15. $list = trim($list);
  16.  
  17. // Sprawdzamy czy kazdy z ciagow konczy sie prawidlowym TLD (pomineliśmy narodowe TLD godnie z zamówieniem)
  18. $tlds = array(
  19. 'ac','ad','ae','aero','af','ag','ai','al','am','an','ao','aq','ar',
  20. 'arpa','as','asia','at','au','aw','ax','az','ba','bb','bd','be','bf',
  21. 'bg','bh','bi','biz','bj','bm','bn','bo','br','bs','bt','bv','bw',
  22. 'by','bz','ca','cat','cc','cd','cf','cg','ch','ci','ck','cl','cm',
  23. 'cn','co','com','coop','cr','cu','cv','cw','cx','cy','cz','de','dj',
  24. 'dk','dm','do','dz','ec','edu','ee','eg','er','es','et','eu','fi',
  25. 'fj','fk','fm','fo','fr','ga','gb','gd','ge','gf','gg','gh','gi',
  26. 'gl','gm','gn','gov','gp','gq','gr','gs','gt','gu','gw','gy','hk',
  27. 'hm','hn','hr','ht','hu','id','ie','il','im','in','info','int','io',
  28. 'iq','ir','is','it','je','jm','jo','jobs','jp','ke','kg','kh','ki',
  29. 'km','kn','kp','kr','kw','ky','kz','la','lb','lc','li','lk','lr','ls',
  30. 'lt','lu','lv','ly','ma','mc','md','me','mg','mh','mil','mk','ml',
  31. 'mm','mn','mo','mobi','mp','mq','mr','ms','mt','mu','museum','mv',
  32. 'mw','mx','my','mz','na','name','nc','ne','net','nf','ng','ni','nl',
  33. 'no','np','nr','nu','nz','om','org','pa','pe','pf','pg','ph','pk',
  34. 'pl','pm','pn','pr','pro','ps','pt','pw','py','qa','re','ro','rs',
  35. 'ru','rw','sa','sb','sc','sd','se','sg','sh','si','sj','sk','sl','sm',
  36. 'sn','so','sr','st','su','sv','sx','sy','sz','tc','td','tel','tf',
  37. 'tg','th','tj','tk','tl','tm','tn','to','tp','tr','travel','tt','tv',
  38. 'tw','tz','ua','ug','uk','us','uy','uz','va','vc','ve','vg','vi','vn',
  39. 'vu','wf','ws','xxx','ye','yt','za','zm','zw',
  40. );
  41.  
  42. $output = array();
  43. foreach ( explode(' ', $list) as $item ) {
  44.  
  45. if ( false === $tld_pos = strrpos( $item, '.' )) {
  46. // tekst w danej linii nie zawiera kropki, nie ma TLD
  47. continue;
  48. }
  49.  
  50. $tld = substr( $item, $tld_pos + 1 );
  51.  
  52. if ( ! in_array($tld, $tlds)) {
  53. continue;
  54. }
  55.  
  56. if ( '-' === $item{0} ) { // domena nie moze się zaczynać od myślinka: '-'
  57. $item = ltrim($item, '-');
  58. }
  59. if ( false !== strstr( $item, '--' )) {
  60. continue; // pomijamy jeśli w ciągu są dwa sąsiadujące znaki równości, mimo że możnaby podjąć próbę naprawy..
  61. }
  62.  
  63. $output[] = $item;
  64. }
  65.  
  66. $output = array_unique($output);
  67. $output = array_values($output);


Dużo brakuje do doskonałości.

Celne uwagi i twórcza krytyka mile widziane.
by_ikar
Jeżeli szukasz tylko domen, a nie całych linków, to nie musisz negować wszystkich znaków które w skład domeny wchodzić nie mogą, bo w skład domeny wchodzić mogą jedynie znaki a-z. Więc szukasz wyrazu z kropką, zakończonego na conajmniej dwie litery i poprzedzonego conajmniej jednym znakiem jaki znaleźć się może w nazwie domeny (\w\d- i pewnie jakieś jeszcze) Później preg_replace_callback i w funkcji którą podczepisz, rozdzielasz przechwycony string po kropce (explode) i ostatni element tablicy wyszukujesz w swojej tablicy $tlds. Obędzie się wówczas bez pętli i jakichś dodatkowych zbędnych instrukcji. Oczywiście to tylko teoria, ale próbował bym właśnie tak to zrobić.
wNogachSpisz
Cytat(by_ikar @ 3.02.2012, 23:16:34 ) *
w skład domeny wchodzić mogą jedynie znaki a-z

Gówno prawda, kolejny nieczytaty... Przeczytaj pierwszy post...

O Bogowie.. Dajcie mi siłę..
by_ikar
Cytat
Okazało się że narodowe TLD można sobie podarować


Sam to napisałeś, to dostosowałem swoją "myśl" do twoich potrzeb. Oraz dodatkowo to były tylko założenia, nie napisałem że dokładnie tak jest.

Powiem ci tyle, bo na prawdę po ostatnim temacie w którym swoją mądrością i niewyparzonym językiem zaświeciłeś, nie powinienem wcale nawiązywać z tobą żadnej dyskusji, bo człowieku ty się nie nadajesz do żadnej konwersacji. Jesteś mega aspołeczny. Czego tobie współczuje. Chciałem ci pomóc, pomimo że nie powinienem, zwłaszcza po tym ostatnim temacie w którym świeciłeś, ale głupi myślałem że tamte twoje uniesienia były spowodowane jakimś mocniejszym słońcem które ci zaszkodziło. Myliłem się, ty człowieku jesteś poprostu taki - chamski, wulgarny, grubo skórny w dodatku mega zarozumiały. Nie dziw się że nikt ci nie odpowiada, nie dlatego że tutaj są ludzie głupsi od ciebie, tobie poprostu nikt nie chce pomóc, bo po co pomóc komuś takiemu jak ty? Żałuje że próbowałem ci pomóc, więcej tego błędu nie popełnię i mam nadzieje nikt tego błędu nie popełni.
wNogachSpisz
Cytat(by_ikar @ 4.02.2012, 19:07:54 ) *
Sam to napisałeś, to dostosowałem swoją "myśl" do twoich potrzeb. Oraz dodatkowo to były tylko założenia, nie napisałem że dokładnie tak jest.


Nie.
Napisałem o TLD, a ty o całej domenie, czyli subdomena plus tld.
Proponuje dokształcić się co to jest domena internetowa i z czego się składa.

Twoje próby zakamuflowania niewiedzy czy innej ułomności (możliwej dysleksji) przez osobiste ataki są żałosne.

Jeśli razi cię ton moich postów, to wiedz że mam alergie na imbecylów piszących co im ślina na palce przyniesie.
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.