8
votes

Java Regex: Comment capturer plusieurs correspondances dans la même ligne

J'essaie de faire correspondre un modèle de regex en Java et j'ai deux questions:

  1. à l'intérieur du motif que je cherche qu'il y a un début connu puis une chaîne inconnue que je veux me lever jusqu'à la première occurrence d'un &.
  2. Il y a plusieurs occurrences de ces modèles dans la ligne et j'aimerais obtenir chaque occurrence séparément.

    Par exemple, j'ai cette ligne d'entrée: xxx

    et je m'intéresse à ces chaînes: xxx


0 commentaires

6 Réponses :


0
votes

La regex que vous recherchez est xxx

vous pouvez utiliser correspondeur.find () pour trouver tous les matchs.


1 commentaires

Merci, mais c'était un exemple spécifique pour un cas général qui tiendra d'autres cordes. la chose certaine est que je veux obtenir la chaîne du filtre = jusqu'au premier et



1
votes

Dans votre exemple, il y a parfois un "**" à la fin avant le "&". Mais fondamentalement, (en supposant que "filtrer =" est le modèle de démarrage que vous recherchez) Vous voulez quelque chose comme:

"filtre = ([^ &] +) &"


1 commentaires

Je vois que le regard positif sur l'avenir était exactement ce dont j'avais besoin. Merci!



1
votes

Utilisation de l'expression régulière (? en Java:

Pattern p = Pattern.compile("(?<=filter=\\*{0,2})[^&]*[^&*]+");
String s = "1234567 100,110,116,129,139,140,144,146 http://www.gold.com/shc/s/c_10153_12605_Computers+%26+Electronics_Televisions?filter=**Screen+Refresh+Rate%7C120HZ%5EScreen+Size%7C37+in.+to+42+in.&sName=View+All**&viewItems=25&subCatView=true   ISx20070515x00001a          http://www.gold.com/shc/s/c_10153_12605_Computers+%26+Electronics_Televisions?filter=**Screen+Refresh+Rate%7C120HZ**&sName=View+All&subCatView=true 0   2819357575609397706";
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}


0 commentaires

2
votes

Si je sais que je pourrais avoir besoin d'autres paramètres de requête à l'avenir, je pense que ce sera plus prudent de décoder et d'analyser l'URL.

subCatView = true
viewItems = 25
sName = View All
filter = Screen Refresh Rate|120HZ^Screen Size|37 in. to 42 in.


0 commentaires

11
votes

En supposant que le début connu est filtre = ** code>, le modèle d'expression régulier (?: filtre = \\ * \\ *) (. *?) (?: &) devrait vous obtenir ce dont vous avez besoin. Utilisez Correspondant.Find () CODE> Pour obtenir toutes les occurrences du motif dans une chaîne donnée. Utilisation de la chaîne de test que vous avez fournie, les suivantes:

1: G1: Screen+Refresh+Rate%7C120HZ%5EScreen+Size%7C37+in.+to+42+in.
2: G1: Screen+Refresh+Rate%7C120HZ**


1 commentaires

Pourriez-vous s'il vous plaît inclure les teststring afin que nous puissions essayer cela pour de vrai? (L'essai de test de l'OP ne fonctionne pas avec ce code)



0
votes

Recherchez-vous une chaîne qui suit avec "filtrer =" et ignore le premier "*" et est terminé par le premier "&". Votre peut essayer ce qui suit: xxx


0 commentaires