2015-08-06 3 views
0

Я пытаюсь разбить URL-адрес на куски. Я хочу всего до 5-го /.расщепление URL-регек после 4-го слэша

Я пробовал оглядываться, но я новичок в регулярном выражении, и я немного перегружен.

URL пример:

http://daniel.mirimar.net.nz/Sites/reginald/DDD/CD

Так что я хотел бы отсюда: http://daniel.mirimar.net.nz/Sites/reginald/

Как я могу это сделать?

ответ

0

Используйте регулярное выражение как это:

^.*?\/\/[^\/]*\/[^\/]*\/[^\/]* 

или

^.*?\/(\/[^\/]*){3} 

И для проверки без CRLF и URL с меньшим количеством частей:

^.*?\/(\/[^\/\n\r]*){1,3} 

Вы можете быть более конкретным этим :

^https?:\/(\/[^\/\n\r]*){1,3} 
2

Короткий и лаконичный всегда приятно

(?:.+?/){4} 
  • (?: - работает без захвата группы
  • .+?/ - лениво матч ничего до /
  • ) - близко, не захватывая группы
  • {4} - повторить четыре раза
0

Иногда regex может быть немного подавляющим, особенно если вы не знакомы с ним. Это даже может сделать код более трудным для чтения (Disadvantages of using Regular Expressions). Теперь, не поймите меня неправильно, мне нравится использовать regex, когда задача достаточно проста для него. ИМО, вам лучше решить это без regex. Вы можете создать метод поиска местоположения индекса 5-го «/», а затем просто вернуть подстроку.

Что-то вроде:

public static void main(String[] args) { 
    String url = "http://daniel.mirimar.net.nz/Sites/reginald/DDD/CD"; 
    System.out.println(substringNthOccurrence(url, '/', 5)); 
} 

public static String substringNthOccurrence(String string, char c, int n) { 
    if (n <= 0) { 
     return ""; 
    } 

    int index = 0; 
    while (n-- > 0 && index != -1) { 
     index = string.indexOf(c, index + 1); 
    } 
    return index > -1 ? string.substring(0, index + 1) : ""; 
} 

Результаты:

http://daniel.mirimar.net.nz/Sites/reginald/ 
Смежные вопросы