Java Regex захватывает первую группу слешей - PullRequest
1 голос
/ 18 апреля 2019

У меня есть следующие URL-адреса

/es-es/Replica-2300/saliffanag/winsrow
/es-de/Bat-00/saliffanag/winsrow
/es-it/Re-2300/saliffanag/winsrow
/es-../
etc..

И мне нужен шаблон, который захватывает только / es-es / или / es-de / или / es-it / (первый /...-... /) в Java.

Я пробовал с этим

"[^/]*/([^/]*)/"

Но не работает

Как мне этого добиться?

Ответы [ 3 ]

3 голосов
/ 18 апреля 2019

Просто используйте разделение:

"/es-es/Replica-2300/saliffanag/winsrow".split("/", 3)[1] 

возвращает "es-es", после этого просто добавьте / back на

Для переменных URL:

String[] split = "padding/test/for/loop/es-es/Replica-2300/saliffanag/winsrow".split("/");
String result = "";  

for(String s : split){
  if(s.length() != 5){ continue;} 
  if(s.charAt(2) == '-'){
    result = s; //if you need the '/' just use result = "/" + s "/";
    break;
  }
}
1 голос
/ 18 апреля 2019

Вот, пожалуйста:

\/(es-[a-z]+)\/

Попробуйте выражение в Regex101 .

  • \/ соответствует буквально / - должно бытьEscape
  • () - группа захвата
  • es- соответствует самому буквально
  • [a-z]+ соответствует одной или нескольким буквам вместе

Если вход может быть ex.it-it, вы хотите использовать \/(\[a-z\]+-\[a-z\]+)\/.

С другой стороны, если у вас есть определенный список возможных суффиксов, используйте \/(es-(?:es|de|it))\/где (?:) - группа без захвата.

0 голосов
/ 18 апреля 2019
\/([a-z]{2}-[a-z]{2})\/

Смотрите здесь: https://regexr.com/4chaj

Regexr подробно объяснит, как работает этот конкретный regex. Просто нажмите «Объяснить»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...