Signaler

Sélection d'une expression régulière [Résolu]

Posez votre question static695 - Dernière réponse le 1 août 2017 à 14:38 par static695
Bonjour,
J'aimerais écrire une expression régulière pour sélectionné l'espace vide entre password=" et "roles="support"
j'ai essayé (?:password=")(.+?)(?:"\sroles="support") mais rien.
Bien cordialement.
<user username="kwsupport" password="..." roles="support"/>
Afficher la suite 
Utile
+0
plus moins
Bonjour,

Pour simplifier l'expression et la rendre plus lisible, tu peux déjà enlever les groupes 1 et 3.
Par ailleurs, je ne pense pas que .+? soit valide. Mets plutôt .*
Du coup :
password="(.*)"\sroles="support"


Xavier
Donnez votre avis
Utile
+0
plus moins
ce que tu as fais sélectionne tout moi je veux juste sélectionné "cette espace vide" sans les guillemets
Reivax962 3051Messages postés jeudi 16 juin 2005Date d'inscription 23 août 2017 Dernière intervention - 31 juil. 2017 à 17:51
Oui mais tu as ton résultat dans le groupe 1. Tu peux aussi le nommer :
password="(?<password>.*)"\sroles="support"

Après tu as la valeur en faisant ["password"].

Comme ça :
var regex = new Regex("password=\"(?<password>.*)\"\\sroles=\"support\"");
var match = regex.Match(TaVariable);
if (match.Success)
{
    var password = match.Groups["password"].Value);
}


Xavier
Répondre
static695- 31 juil. 2017 à 18:01
ce qui se passe c'est que j'ai déjà écris une fonction qui prend en paramètre une expression régulière et la remplace par la valeur qu'il faut, et la je dois donc injecter la valeur entre les deux guillemets mais je n'arrive pas a trouver l'expression régulière.
si je trouve pas je vais essayer ta méthode tout de même, merci.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour

tu peux te servir des groupes dans un Regex.Replace
https://stackoverflow.com/questions/6005609/replace-only-some-groups-with-regex

Mais si tu veux une Regex, qui ne sélectionne que
l'espace vide entre password=" et "roles="support"
(t'aurais pu dire le mot de passe... parce qu'entre le mot de passe et l'attribut roles, il y a un espace...), il faut utiliser un "lookahead assertion"
Voir ici
http://regexstorm.net/tester?p=%28%3f%3c%3dpassword%3d%22%29%28.%2b%3f%29%28%3f%3d%22%5csroles%3d%22support%22%29&i=%3cuser+username%3d%22kwsupport%22+password%3d%22...%22+roles%3d%22support%22%2f%3e
static695- 1 août 2017 à 09:50
Tant qu'on y est j'aimerais aussi capter la ligne en dessus de <valve> et faire un saut de ligne pourquoi pas.
Tout en te remerciant.


<Valve className="org.apache.catalina.valves.AccessLogValve"
Répondre
Whismeril 9832Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 23 août 2017 Dernière intervention - 1 août 2017 à 12:51
Je ne comprends pas, tu parles ligne en dessus de valve, et dans ton exemple, il n'y a qu'une ligne.
Quand à en faire un saut de ligne, je n'ai pas la moindre idée de ce que cela veut dire.
Répondre
static695- 1 août 2017 à 14:11
oui desolé tu a raison, je veux dire l'espace blanc :) bon supposons:
jjjjjjjjjjjjjjjjj(cette ligne sans tout ces j quoi)
<Valve className="org.apache.catalina.valves.AccessLogValve"
Répondre
Whismeril 9832Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 23 août 2017 Dernière intervention - 1 août 2017 à 14:24
http://regexstorm.net/tester?p=%28.%2b%3f%29%28%3f%3d%5cr%5cn%3cValve%29&i=Supprime+cette+ligne+pour+v%c3%a9rifier+que+%c3%a7a+marche+aussi%0d%0ajjjjjjjjjjjjjjjjj%28cette+ligne+sans+tout+ces+j+quoi%29%0d%0a%3cValve+className%3d%22org.apache.catalina.valves.AccessLogValve%22


J'ai supposé un saut de ligne valant \r\n, mais cela peut aussi être \n seul
Répondre
Donnez votre avis
Utile
+0
plus moins
Par contre, il y a plusieurs utilisateurs ayant un pseudo commençant par static et suivi de nombres qui posent des questions sur ce qui ressemble à un fichier xml (ou du html).
Si tous ces utilisateurs sont toi, vu le nombre de manipulations que tu fais à ce fichier, ne serait il pas plus intéressant de le passer, faire tes traitements sur de la données métier et à la fin écrire un nouveau fichier?

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !