извлечь подстроку в Java с помощью регулярных выражений - PullRequest
1 голос
/ 20 января 2011

Мне нужно извлечь "URPlus1_S2_3" из строки:

"Last one: http://abc.imp/Basic2#URPlus1_S2_3," 

с использованием регулярных выражений на языке Java.

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

Ответы [ 7 ]

11 голосов
/ 20 января 2011

Попробуйте

Pattern p = Pattern.compile("#([^,]*)");
Matcher m = p.matcher(myString);
if (m.find()) {
  doSomethingWith(m.group(1));  // The matched substring
}
5 голосов
/ 20 января 2011
String s = "Last one: http://abc.imp/Basic2#URPlus1_S2_3,";
Matcher m = Pattern.compile("(URPlus1_S2_3)").matcher(s);
if (m.find()) System.out.println(m.group(1));

Ты должен научиться определять свои требования;)

0 голосов
/ 20 января 2011

Если вам просто нужно все после #, используйте split:

String s = "Last one: http://abc.imp/Basic2#URPlus1_S2_3," ;
System.out.println(s.split("#")[1]);

В качестве альтернативы , если вы хотите проанализировать URI и получить фрагментный компонент, который вы можете сделать:

URI u = new URI("http://abc.imp/Basic2#URPlus1_S2_3,");
System.out.println(u.getFragment());
0 голосов
/ 20 января 2011

Вот a long версия:

String url = "http://abc.imp/Basic2#URPlus1_S2_3,";
String anchor = null;
String ps = "#(.+),";
Pattern p = Pattern.compile(ps);
Matcher m = p.matcher(url);
if (m.matches()) {
    anchor = m.group(1);
}

Главное, что нужно понять, это использование скобок, они используются для создания групп, которые можно извлечь из шаблона. В объекте Matcher метод group будет возвращать их в порядке, начинающемся с индекса 1, а полное совпадение возвращается с индексом 0.

0 голосов
/ 20 января 2011

Поскольку вы впервые используете регулярные выражения, я бы предложил пойти другим путем, который сейчас более понятен (пока вы не освоите регулярные выражения;), и он будет легко изменен, если вам когда-нибудь понадобится:

String yourPart = new String().split("#")[1];
0 голосов
/ 20 января 2011
String s = Last one: http://abc.imp/Basic2#URPlus1_S2_3,"
String result = s.replaceAll(".*#", "");

Приведенное выше возвращает полную строку в случае, если нет "#".Существуют лучшие способы использования регулярных выражений, но лучшим решением здесь является отсутствие регулярных выражений.Есть классы URL и URI, выполняющие эту работу.

0 голосов
/ 20 января 2011

Вы не определили, какие критерии вам нужно использовать, чтобы найти эту строку, но вот один из подходов, основанный на разделителе #.Вы можете настроить регулярное выражение по мере необходимости.

expr: .*#([^,]*)
extract: \1

Здесь вы найдете документацию по синтаксису:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

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