Получение регулярного выражения Regex - PullRequest
1 голос
/ 22 марта 2012

Мне нужно получить строки регулярных выражений, соответствующие шаблону из заданного ввода.

Допустим, шаблон, который мне нужно получить, похож на

"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg"

Теперь я создал для этого следующий шаблон регулярных выражений

http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg

Кто-нибудь может проиллюстрироватьполучить все сопоставленные шаблоны с этим выражением regx, используя Java?

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Вы не маскируете косые черты, а буквальные точки:

    String regex = "http://(.*)\\.mysite\\.com/(.*)/images/(.*)\\.jpg";
    String   url = "http://www.mysite.com/work/images/cat.jpg";
    Pattern pattern = Pattern.compile (regex);
    Matcher matcher = pattern.matcher (url);

    if (matcher.matches ())
    {
        int n = matcher.groupCount ();
        for (int i = 0; i <= n; ++i)
            System.out.println (matcher.group (i));
    }

Результат:

www
work
cat
2 голосов
/ 22 марта 2012

Простой пример Java:

String my_regex = "http://.*.mysite.com/.*/images/.*.jpg";
Pattern pattern = Pattern.compile(my_regex);
Matcher matcher = pattern.matcher(string_to_be_matched);
// Check all occurance
while (matcher.find()) {
    System.out.print("Start index: " + matcher.start());
    System.out.print(" End index: " + matcher.end() + " ");
    System.out.println(matcher.group());
}
1 голос
/ 22 марта 2012

На самом деле, неясно, хотите ли вы всю совпадающую строку или только группы.

Ответ Богдана Эмиля Мариесана может быть уменьшен до

if ( matcher.matches () ) System.out.println(string_to_be_matched);

потому что вы знаете, что оно совмещено и нет групп.

ИМХО, ответ неизвестного пользователя правильный, если вы хотите получить подходящие группы.

Я просто хочу добавить дополнительную информацию (для других), что если вам нужна подходящая группа, вы также можете использовать метод replaceFirst():

String firstGroup = string.replaceFirst( "http://mysite.com/(.*)/images/", "$1" );

Но производительность подхода Pattern.compile лучше, если есть две или более групп или если вам нужно делать это несколько раз (с другой стороны, например, в соревнованиях по программированию это быстрее написать replaceFirst()).

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