Avatar billede andreas Nybegynder
22. januar 2007 - 23:01 Der er 8 kommentarer og
1 løsning

Få fat i uri's i en string.

Hejsa,

Jeg har et arraylist der indeholder en masse tekst som strings. Jeg vil gerne rende dette array igennem, og tjekke hver string om der er en uri i. Altså en http, https, ftp and so on, adresse. Og hvis der er dette, så vil jeg gerne have domænet isoleret og tilføjet til en ny arraylist.

Hvordan gør man dette smartest i Java, for i perl er det jo relativt simpelt med deres reg. exp.
Avatar billede arne_v Ekspert
22. januar 2007 - 23:08 #1
det er nok ogsaa nemmest med regex i Java !
Avatar billede andreas Nybegynder
22. januar 2007 - 23:21 #2
Ja, men jeg forstår ikke regex i Java, det virker ret anderledes end fra perl?

I perl ville jeg lave noget ala, men har ingen ide om hvordan det sku se ud i Java.

$URIChars='(?:[=%][0-9a-f]{2}|\#\&\d{1,3};?|[0-9a-z\-\_\.\@]|\=(?:\015?\012|\015))';

while ($b=~/(?:https?|ftp)[\041-\176]{0,3}\:\/{1,3}($URIChars+)|((?:www|ftp)\.$URIChars+)/gi) {

  $uri=$1 || $2;
  # RFC 2821, section 4.5.2, 'Transparency': delete leading period char
  $uri=~s/\=(?:\015?\012|\015)\.?//g;
  $uri=~s/[=%]([0-9a-f]{2})/chr(hex($1))/gie;
  $uri=~s/&#(\d{1,3});?/chr($1)/ge;
  $uri=~tr/;//d;
}
Avatar billede arne_v Ekspert
23. januar 2007 - 01:58 #3
jeg kan slet ikke gennemskue den regex

men her er noget Java kode som kører på en meget simpel regex:

import java.util.regex.*;

public class UrlParse {
  private static Pattern p = Pattern.compile("(http|ftp|https)://[a-z0-9\\-]+(\\.[a-z0-9\\-]+)+(/[A-Za-z0-9_\\-\\.]*)*");
  public static void main(String[] args) throws Exception {
      String s = "abc http://www.xxx.dk def https://www.xxx.dk ghi ftp://ftp.xxx.dk jkl http://www.xxx.dk/ 123  http://www.xxx.dk/dir/ 456  http://www.xxx.dk/dir/fil.html 789  http://www.xxx.dk/dir/subdir/fil.html slut";
      Matcher m = p.matcher(s);
      while (m.find()) {
        System.out.println(m.group(0));
      }
  }
}

(?:...) for ikke at capture grupper og {m,m} for at angive antal interval virker
også i Java
Avatar billede andreas Nybegynder
23. januar 2007 - 09:24 #4
Hehe, det var måske også lige en voldsom nok regexp. Jeg prøver lige at lege med dit eksempel, og så vender jeg tilbage.
Avatar billede dl Nybegynder
26. januar 2007 - 20:16 #5
arne_v kunne du ikke lige prøve at beskrive det regex :)  jeg skal på 4 sem. og prøver stadig at forstår dem.

Jeg er med landt ... at  ftp | http(s)  skal være der .. derefter må alle bogstaver fra  a-z være der og 0-9  ( alle tal)  men så begynder den også at falde.  alt det med \\-  og +  .... + en masse mere :)  det kan jeg ikke lige gemmenskue :)

// dennis
Avatar billede arne_v Ekspert
26. januar 2007 - 20:31 #6
(http|ftp|https) en af de 3 protokoller
:// as is
[a-z0-9\\-]+ et eller flere tegn mellem [] og \\ foran - er kun for at escape
(\\.[a-z0-9\\-]+)+ er et eller flere forekomster af et punktum efterfulgt af et eller flere tegn mellem []
(/[A-Za-z0-9_\\-\\.]*)* er ingen til mange forekomster af en / efter fulgt af ingen til mange tegn mellem []
Avatar billede arne_v Ekspert
17. marts 2007 - 21:02 #7
OK ?
Avatar billede dl Nybegynder
18. marts 2007 - 07:51 #8
Tro lidt tråden er død.
Men tak for en beslrivelse af de pattern's man kan bruge i forfindelse med check :)

// Dennis
Avatar billede andreas Nybegynder
19. marts 2007 - 09:14 #9
Hov, havde helt glemt at bede om et svar. Det virker selvfølgelig perfekt. Tak for det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester