2011-01-20 5 views
1

J'ai besoin d'extraire "URPlus1_S2_3" de la chaîne:extrait en Java en utilisant substring regex

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

en utilisant l'expression régulière dans le langage Java.

Quelqu'un peut-il m'aider s'il vous plaît? J'utilise regex pour la première fois.

+2

S'il vous plaît ajouter d'autres critères, si vous avez seulement besoin d'extraire cette chaîne, vous pouvez aussi bien le copier. Est-ce votre critère que vous devez trouver la partie entre '#' et ','? –

+0

l'extraction entre '#' et ',' semble être l'approche la plus logique pour moi. – Nir

Répondre

11

Essayez

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

Vous n'avez pas vraiment défini les critères que vous devez utiliser pour trouver cette chaîne, mais voici une méthode d'approche basée sur le séparateur "#". Vous pouvez ajuster l'expression régulière au besoin.

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

Rendez-vous ici pour la documentation de syntaxe:

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

+0

Vous avez manqué la virgule. –

+0

Cela correspond également à la virgule dont il ne voulait pas correspondre, et ne correspondra pas s'il y a des sauts de ligne entre le hachage et la virgule. L'exclusion de ceux-ci n'a pas été spécifiée. –

+0

En effet, concernant la virgule. Fixé. –

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

Les rendements supérieurs à la chaîne complète dans le cas où il n'y a pas de "#". Il y a de meilleures façons d'utiliser regex, mais la meilleure solution ici est d'utiliser no regex. Il y a des classes URL et URI qui font le travail.

0

Comme il est la première fois que vous utilisez des expressions régulières, je suggère d'aller d'une autre manière, plus compréhensible pour l'instant (jusqu'à ce que vous maîtrisez les expressions régulières;) et il sera facilement modifié si vous aurez jamais besoin de:

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

est ici une version longue:

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); 
} 

le principal point à comprendre est l'utilisation de la parenthèse, ils sont utilisés pour créer g des groupes qui peuvent être extraits d'un motif. Dans l'objet Matcher, la méthode group leur retour pour partir à l'index 1, alors que le match complet est retourné par l'indice 0.

+0

Cela ne pouvait pas «obtenir moi la réponse dont j'avais besoin. Je pense que la chaîne ps n'est pas correcte. – Nir

+0

Eh bien, il devrait!J'utilise Clojure, mais cette langue utilise directement le moteur de regex de Java: '(second (re-find #" # (. +), "" Last one: http: //abc.imp/Basic2#URPlus1_S2_3, ")) 'aboutit à" URPlus1_S2_3 ". –

0

Si vous voulez juste après tout le #, utilisez division:

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

Sinon, si vous voulez analyser l'URI et obtenir le composant fragment, vous pouvez faire:

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

Vous devez apprendre comment spécifier vos besoins;)