2011-01-20 2 views
1

Мне нужно извлечь "URPlus1_S2_3" из строки:экстракт подстроки в Java с использованием регулярных выражений

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

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

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

+2

Пожалуйста, добавьте еще несколько критериев, если вам нужно только извлечь эту строку, тогда вы можете ее скопировать. Является ли ваш критерий тем, что вам нужно найти часть между «#» и «,»? –

+0

извлечение из «#» и «,» кажется самым логичным для меня. – Nir

ответ

11

Попробуйте

Pattern p = Pattern.compile("#([^,]*)"); 
Matcher m = p.matcher(myString); 
if (m.find()) { 
    doSomethingWith(m.group(1)); // The matched substring 
} 
0

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

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

Перейти здесь синтаксической документации:

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

+0

Вы пропустили конечную запятую. –

+0

Это также соответствует запятой, которую он не хотел сопоставлять, и не будет соответствовать, если между хешем и запятой есть новые строки. В том числе они не были указаны. –

+0

действительно, касается запятая. Исправлена. –

0
String s = Last one: http://abc.imp/Basic2#URPlus1_S2_3," 
String result = s.replaceAll(".*#", ""); 

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

0

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

String yourPart = new String().split("#")[1]; 
0

Вот версиядолго:

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

Это не могло «получить мне ответ, который мне нужен». Я думаю, что String ps неверен. – Nir

+0

Ну, это должно!Я использую Clojure, но на этом языке напрямую используется механизм регулярного выражения Java: '(second (re-find #" # (. +), "" Last one: http: //abc.imp/Basic2#URPlus1_S2_3, ")) 'приводит к« URPlus1_S2_3 ». –

0

Если вы просто хотите, чтобы все после #, используйте раскол:

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()); 
5
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)); 

Вы должны узнать, как указать ваши требования;)

Смежные вопросы