-1

Hi I have some string like this:

location/city/home-a-berlin?/someNewAdress

I want to extract word berlin which placed between "-a-" and "?". How can i do that with regex in java?

I can do it by using string API but kinda stuck with regex.

String cityName = url.substring(url.lastIndexOf("-a-")+3, url.indexOf('?')) //berlin
erondem
  • 482
  • 1
  • 11
  • 24

3 Answers3

2

You can use a capture group with a negated character class.

-a-([^\?]+)\?

Regex demo | Java demo

In Java:

String regex = "-a-([^\\?]+)\\?";
String string = "location/city/home-a-berlin?/someNewAdress\n";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

Output

berlin
The fourth bird
  • 154,723
  • 16
  • 55
  • 70
1

Or

s = s.replaceAll(".*-(.*?)\\?.*", "$1");
g00se
  • 3,207
  • 2
  • 5
  • 9
1

Alternative regex:

 "-a-(.+?)\\?"

Regex in testbench and context:

public static void main(String[] args) {
    String input1 = "location/city/home-a-berlin?/someNewAdress";
    List<String> inputs = Arrays.asList(input1);

    Pattern pattern = Pattern.compile("-a-(.+?)\\?");
    List<String> results = inputs.stream().map(s -> pattern.matcher(s))
            .filter(Matcher::find).map(m -> m.group(1)).collect(Collectors.toList());

    //Output:
    results.forEach(System.out::println);
}

Output:

berlin

Summary of regular-expression constructs:

https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html

DigitShifter
  • 801
  • 5
  • 12