2010-04-01 3 views
0

Je suis complètement nouveau pour les expressions régulières, donc je suis à la recherche d'un peu d'aide ici.Java séparant la chaîne par regex personnalisé match

Je compile sous JDK 1.5

Prenez cette ligne comme un exemple que je lis depuis l'entrée standard:

ab:Some string po:bubblegum 

Ce que je voudrais faire est divisé par les deux personnages et deux points. Autrement dit, une fois que la ligne est divisée et mis dans un tableau de chaînes, celles-ci devraient être les termes:

ab:Some string 
po:bubblegum 

J'ai ce regex en ce moment:

String[] split = input.split("[..:]"); 

Scinde à le point-virgule; Ce que je voudrais, c'est que cela corresponde à deux caractères et un point-virgule, mais que l'espace soit divisé avant que ça commence. Est-ce seulement possible?

Voici la sortie du tableau de chaînes:

ab 
Some String po 
bubblegum 

J'ai lu Pattern.compile() aussi bien. Est-ce quelque chose que je devrais envisager?

Répondre

3
input.split(" (?=[A-Za-z]{2}:)") 

Le? = Crée un positive lookahead. Cela signifie que le moteur regarde vers l'avant pour voir si la partie suivante correspond, sans consommer cette partie. Si cela correspond, il se divise sur le caractère espace. [A-Za-z] signifie une lettre majuscule ou minuscule, tandis que {2} spécifie que nous voulons deux caractères correspondant à cette classe.

+0

L'homme qui était rapide, ça marche très bien. Merci beaucoup. Serait-il possible pour vous d'expliquer comment cela fonctionne? Je peux comprendre qu'il cherche deux caractères majuscules ou minuscules, puis un deux-points, mais c'est tout. Excellent, merci encore. – tsliwkan

1

Vous avez demandé environ Pattern#compile(String pattern). Vous devriez envisager de l'utiliser si vous utilisez beaucoup la regex puisque la méthode précitée compile la regex en quelque chose qui est rapide à exécuter alors que String#split(String regex) recompile directement la regex.

+0

Oui, merci. Je l'ai juste implémenté avec l'expression rationnelle de Matthew et ça marche toujours. – tsliwkan