Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyrażenie regularne, szukanie domeny w tekście
wNogachSpisz
post
Post #1





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.

Ten post edytował wNogachSpisz 3.02.2012, 12:52:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
uupah5
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

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


http://www.catswhocode.com/blog/15-php-reg...-web-developers
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #3





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(uupah5 @ 3.02.2012, 12:23:18 ) *

No i co?
To ma być odpowiedź na moje pytanie?
Go to the top of the page
+Quote Post
uupah5
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

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


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





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

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


próbowałeś to? http://stackoverflow.com/questions/3265253...d-for-idn-regex
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

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


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





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




koniec off topa bo po warnie i zamknę. jak chcecie sobie coś wyjaśnić to via PW.


--------------------
Go to the top of the page
+Quote Post
by_ikar
post
Post #11





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #12





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.

Ten post edytował wNogachSpisz 3.02.2012, 23:45:19
Go to the top of the page
+Quote Post
by_ikar
post
Post #13





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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łę..

Ten post edytował wNogachSpisz 3.02.2012, 23:46:36
Go to the top of the page
+Quote Post
by_ikar
post
Post #15





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.

Ten post edytował wNogachSpisz 5.02.2012, 10:11:06
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 15:44