Сопоставить все после и перед чем-то регулярное выражение Java - PullRequest
0 голосов
/ 30 января 2019

Вот мой код:

    String stringToSearch = "https://example.com/excludethis123456/moretext";

    Pattern p = Pattern.compile("(?<=.com\\/excludethis).*\\/"); //search for this pattern 
    Matcher m = p.matcher(stringToSearch); //match pattern in StringToSearch

    String store= "";


    // print match and store match in String Store
    if (m.find())
    {
        String theGroup = m.group(0);
        System.out.format("'%s'\n", theGroup); 
        store = theGroup;
    }

    //repeat the process
    Pattern p1 = Pattern.compile("(.*)[^\\/]");
    Matcher m1 = p1.matcher(store);

    if (m1.find())
    {
        String theGroup = m1.group(0);
        System.out.format("'%s'\n", theGroup);
    }

Я хочу сопоставить все, что идет после excludethis и до /, которое идет после.

С "(?<=.com\\/excludethis).*\\/" регулярным выражением я сопоставлю 123456/ и сохраню это в String store.После этого с "(.*)[^\\/]" я исключу / и получу 123456.

Могу ли я сделать это в одной строке, то есть объединить эти два регулярных выражения?Я не могу понять, как их объединить.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Так же, как вы использовали положительный взгляд позади, вы можете использовать положительный взгляд вперед и изменить свое регулярное выражение на это,

(?<=.com/excludethis).*(?=/)

Кроме того, в Java вам не нужно экранировать /

Ваш измененный код,

String stringToSearch = "https://example.com/excludethis123456/moretext";

Pattern p = Pattern.compile("(?<=.com/excludethis).*(?=/)"); // search for this pattern
Matcher m = p.matcher(stringToSearch); // match pattern in StringToSearch

String store = "";

// print match and store match in String Store
if (m.find()) {
    String theGroup = m.group(0);
    System.out.format("'%s'\n", theGroup);
    store = theGroup;
}
System.out.println("Store: " + store);

Печать,

'123456'
Store: 123456

Как вы хотели получить значение.

0 голосов
/ 30 января 2019

Если вы не хотите использовать regex, вы можете просто попробовать с String::substring*

String stringToSearch = "https://example.com/excludethis123456/moretext";
String exclusion = "excludethis";
System.out.println(stringToSearch.substring(stringToSearch.indexOf(exclusion)).substring(exclusion.length(), stringToSearch.substring(stringToSearch.indexOf(exclusion)).indexOf("/")));

Выход:

123456

* Определенно не используйте это

0 голосов
/ 30 января 2019

Это может быть полезно для вас:)

String stringToSearch = "https://example.com/excludethis123456/moretext";
Pattern pattern = Pattern.compile("excludethis([\\d\\D]+?)/");
Matcher matcher = pattern.matcher(stringToSearch);

if (matcher.find()) {
    String result = matcher.group(1);
    System.out.println(result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...