IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Trouver une expression régulière pour les valeurs des noeuds XML


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Trouver une expression régulière pour les valeurs des noeuds XML
    Bonjour,

    Admettons que j'ai un flux XML avec des caractères spéciaux:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <aaa&>val a</aaa&>
    <bbb>val b      &</bbb>

    Je voudrais remplacer le & dans toutes les valeurs de noeud mais dans aucune balise.

    Actuellement j'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String text = "&<balise & aa><a attr=\"3\">   &dfff&dfgdfg  &</a &></balise>aaa&aaa <ba&lise2>blabla2</ba&lise2>";
     
    String startWord = "[^(<[a-zA-Z0-9]*\\s)]";
    		String endWord = "[^(\\s[a-zA-Z0-9]*>)]";
    		String regex = "(?="+startWord+"|^)(\\&)(?="+endWord+"|$)";
    		String formattedText = text.replaceAll(regex, "[ET]");
    		System.out.println("Regex : " + regex);
    		System.out.println(" > " + formattedText);
    Après transformation, ma console m'affiche ce résultat:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    > [ET]<balise & aa><a attr="3">   [ET]dfff[ET]dfgdfg  [ET]</a &></balise>aaa[ET]aaa <ba[ET]lise2>blabla2</ba[ET]lise2>

    <ba[ET]lise2> --> c'est pas bon

    J'ai beau me creuser la tête, je n'arrive désesperément pas à trouver la bonne expression pour mon besoin.. Est ce que l'un d'entre vous aurait une idée?

    Merci.
    Motin

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String contenuDuFichierXML =...
    StringBuilder resultat = new StringBuilder();
    boolean estDansUneBalise = false;
    for(char c : contenuDuFichierXML.toCharArray()){
        if(c == '<')estDansUneBalise = true;
        if(c == '>')estDansUneBalise = false;
        if(!estDansUneBalise && c == '&'){
            resultat.append("[ET]");
        }
        else{
            resultat.append(c);
        }
    }
    devrait marcher.
    Les expressions régulières c'est bien mais parfois c'est plus simple de le faire à la main...
    Sinon tu peut aussi utiliser un parseur xml et faire ton replaAll sur le (get/set)Text.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Mise à part l'utilisation arbitraire de chevrons formant un genre de format à balises, tout ceci n'a rien à voir avec du XML.

    En XML:
    - Pas d'espace ou de & dans les noms de balise.
    - À moins d'être dans une balise <![CDATA[ ]]>, le & doit faire une entité (genre &nbsp; ou & #x20; ou ce genre de choses,) c'est la règle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    En fait, j'ai donné un mauvais exemple, le problème c'est que notre projet reçoit un flux XML qui ne peut pas être parsé si les valeurs de noeuds possèdent des caractères spéciaux.
    Du coup, le but du jeu est de trouver une solution général pour remplacer les caractères tels que &, ", <, >, ' par leurs représentations HTML dans les valeurs de noeuds. avant de l'envoyer à notre parseur.
    Effectivement, les balises ne comportent pas de &, mais elles possèdent forcément des < et >.

    D'où l'intêret de retrouver les éléments hors des balises.

    La première solution fonctionne dans le cas des &, mais si je veux transformer les < et > hors balises, ça ne fonctionnera pas.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Comment diable croyais-tu pouvoir faire la différence entre un < qui commence une balise et un < qui fait partie du contenu d'une balise ?

    Tous ces trucs-là sont bien entendu du XML mal formé et en principe il faut le rejeter et dire à l'envoyeur de faire du XML bien formé à la place.
    Mais bon, je peux comprendre qu'on puisse pas toujours discuter.
    Par contre, la question reste : je vois pas bien comment faire la différence entre un < qui fait partie du contenu et un < qui commence une balise.

    (À noter que le > ne devrait poser problème à aucun parseur, c'est tout à fait bien formé.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    À la limite, si on connait d'avance toutes les balises possibles, on peut faire une recherche sur les "<" qui ne commencent pas une chaine de type "<baliseConnue".

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Les expressions régulières, c'était justement pour pouvoir faire la différence, je ne suis pas expert en la matière, mais je pensais qu'en utilisant une expression régulière, on aurait pu faire la différence et trouver des caractères comme

    <balise>...<...</balise>


    C'est clair que le mieux de tout c'est qu'avant de nous envoyer le flux, ils transforment leurs caractères spéciaux par leurs représentations HTML avant de l'insérer dans le noeud.

    A la rigueur, pour les caractères &,",' c'est réglé, comme c'est sur qu'ils ne se trouveront pas entre balise, on peut directement faire un replaceAll. Mais c'est moins évident pour < et >.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Motin Voir le message
    Les expressions régulières, c'était justement pour pouvoir faire la différence, je ne suis pas expert en la matière, mais je pensais qu'en utilisant une expression régulière, on aurait pu faire la différence et trouver des caractères comme

    <balise>...<...</balise>
    Bien sûr qu'on peut.

    Mais ce cas-là inclut aussi :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <balise>...<br />... </balise>

    et de manière générale :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <balise>...<sous-balise>...</sous-balise>...</balise>

    et ainsi de suite.

    Sans parler bien sûr de l'argument choc :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <balise>...</balise>...</balise>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Et pourtant, nous venons de trouver une api qui sait trouver les < et >, sans forcément être des sous balise.

    Ca s'appelle CyberNeko, après test, voici le flux que nous utilisons:

    Les caractères spéciaux se trouvent au noeud "technicalComplementaryLabel"

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <customerOrderUpdate>
       <modifiedLines>
                  <lineNumber>0</lineNumber>
       </modifiedLines>
       <customerOrder>
                  <storeCode>001</storeCode>
                  <businessUnitCode>24</businessUnitCode>
                  <customerOrderCode>556</customerOrderCode>
                  <creationDate>27/11/2009</creationDate>
                  <updateDate>27/11/2009</updateDate>
                  <transactionType>1</transactionType>
                  <stateChangeDate>27/11/2009</stateChangeDate>
                  <initialAvailabilityDate>28/11/2009</initialAvailabilityDate>
                  <totalAmountIncludingVAT>84.90</totalAmountIncludingVAT>
                  <amountWithoutVAT>70.99</amountWithoutVAT>
                  <customer>
                              <customerKey>18</customerKey>
                              <billingAddressIdentify>1</billingAddressIdentify>
                              <firstname></firstname>
                              <lastname></lastname>
                  </customer>
                  <createUserCode>ADMIN</createUserCode>
                  <updateUserCode>ADMIN</updateUserCode>
                  <state>20</state>
                  <mediumCode>1</mediumCode>
                  <currency>EUR</currency>
                  <mass>0.00</mass>
                  <reminderMediaCode>0</reminderMediaCode>
                  <customerOrderLinesList>
                              <customerOrderLine>
                                          <supplierNumber>125001</supplierNumber>
                                          <lineNumber>1</lineNumber>
                                          <quantity>10.00</quantity>
                                          <complementaryLabel>un label complementaire</complementaryLabel>
                                          <technicalComplementaryLabel>un long label technique turque * \ : & < dfkfk Q> cvkd > > vkdvk || dovIlk kez su zaman araliginda görülen web sayfalarini döndür: </technicalComplementaryLabel>
                                          <standardPriceIncludingVAT>84.90</standardPriceIncludingVAT>
                                          <groundSellingPriceVAT>84.90</groundSellingPriceVAT>
                                          <customerPriceIncludingVAT>84.90</customerPriceIncludingVAT>
                                          <amountIncludingVAT>84.90</amountIncludingVAT>
                                          <amountWithoutVAT>70.99</amountWithoutVAT>
                                          <creationDate>27/11/2009</creationDate>
                                          <customerAvailabilityDate>28/11/2009</customerAvailabilityDate>
                                          <createUserCode>ADMIN</createUserCode>
                                          <updateUserCode>ADMIN</updateUserCode>
                                          <transactionLineType>3</transactionLineType>
                                          <state>20</state>
                                          <VATCode>2</VATCode>
                                          <VATRate>19.60</VATRate>
                                          <VATBaseCode>2</VATBaseCode>
                                          <VATBaseRate>19.60</VATBaseRate>
                                          <productAdditionType>1</productAdditionType>
                                          <productCode>10000172</productCode>
                                          <initialAvailabilityDate>28/11/2009</initialAvailabilityDate>
                                          <supplierOrderCode>00000000</supplierOrderCode>
                                          <supplierDeliveryQuantity>0.00</supplierDeliveryQuantity>
                                          <quantityToPickUp>0.00</quantityToPickUp>
                                          <pickUpQuantity>0.00</pickUpQuantity>
                                          <isStoreInCG>true</isStoreInCG>
                              </customerOrderLine>
                  </customerOrderLinesList>
                  <depositAmount>0.00</depositAmount>
                  <checkoutDepositAmount>0.00</checkoutDepositAmount>
                  <availabilityDate>28/11/2009</availabilityDate>
       </customerOrder>
    </customerOrderUpdate>

    Après exécution: on obtient:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <customerorderupdate>
       <modifiedlines>
                  <linenumber>0</linenumber>
       </modifiedlines>
       <customerorder>
                  <storecode>001</storecode>
                  <businessunitcode>24</businessunitcode>
                  <customerordercode>556</customerordercode>
                  <creationdate>27/11/2009</creationdate>
                  <updatedate>27/11/2009</updatedate>
                  <transactiontype>1</transactiontype>
                  <statechangedate>27/11/2009</statechangedate>
                  <initialavailabilitydate>28/11/2009</initialavailabilitydate>
                  <totalamountincludingvat>84.90</totalamountincludingvat>
                  <amountwithoutvat>70.99</amountwithoutvat>
                  <customer>
                              <customerkey>18</customerkey>
                              <billingaddressidentify>1</billingaddressidentify>
                              <firstname></firstname>
                              <lastname></lastname>
                  </customer>
                  <createusercode>ADMIN</createusercode>
                  <updateusercode>ADMIN</updateusercode>
                  <state>20</state>
                  <mediumcode>1</mediumcode>
                  <currency>EUR</currency>
                  <mass>0.00</mass>
                  <remindermediacode>0</remindermediacode>
                  <customerorderlineslist>
                              <customerorderline>
                                          <suppliernumber>125001</suppliernumber>
                                          <linenumber>1</linenumber>
                                          <quantity>10.00</quantity>
                                          <complementarylabel>un label complementaire</complementarylabel>
                                          <technicalcomplementarylabel>un long label technique turque * \ : &amp; &lt; dfkfk Q&gt; cvkd &gt; &gt; vkdvk || dovIlk kez su zaman araliginda görülen web sayfalarini döndür: </technicalcomplementarylabel>
                                          <standardpriceincludingvat>84.90</standardpriceincludingvat>
                                          <groundsellingpricevat>84.90</groundsellingpricevat>
                                          <customerpriceincludingvat>84.90</customerpriceincludingvat>
                                          <amountincludingvat>84.90</amountincludingvat>
                                          <amountwithoutvat>70.99</amountwithoutvat>
                                          <creationdate>27/11/2009</creationdate>
                                          <customeravailabilitydate>28/11/2009</customeravailabilitydate>
                                          <createusercode>ADMIN</createusercode>
                                          <updateusercode>ADMIN</updateusercode>
                                          <transactionlinetype>3</transactionlinetype>
                                          <state>20</state>
                                          <vatcode>2</vatcode>
                                          <vatrate>19.60</vatrate>
                                          <vatbasecode>2</vatbasecode>
                                          <vatbaserate>19.60</vatbaserate>
                                          <productadditiontype>1</productadditiontype>
                                          <productcode>10000172</productcode>
                                          <initialavailabilitydate>28/11/2009</initialavailabilitydate>
                                          <supplierordercode>00000000</supplierordercode>
                                          <supplierdeliveryquantity>0.00</supplierdeliveryquantity>
                                          <quantitytopickup>0.00</quantitytopickup>
                                          <pickupquantity>0.00</pickupquantity>
                                          <isstoreincg>true</isstoreincg>
                              </customerorderline>
                  </customerorderlineslist>
                  <depositamount>0.00</depositamount>
                  <checkoutdepositamount>0.00</checkoutdepositamount>
                  <availabilitydate>28/11/2009</availabilitydate>
       </customerorder>
    </customerorderupdate>

    Les caractères spéciaux sont bien encodés correctements, ça fonctionne avec les &, < et >. Il ne me reste plus qu'à faire un replaceAll sur les ' et ".


    Voici le code utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public static void main(String[] argv) throws Exception {         
    		 DOMFragmentParser parser = new DOMFragmentParser();       
    		// output the elements in lowercase, nekohtml doesn't do this by default         
    		parser.setProperty("http://cyberneko.org/html/properties/names/elems","lower");          
    		// if this is set to true (the default, you dont need to specifiy this)        
    		// then neko html wont and an html,head and body tags to the response.         
    		//parser.setFeature("http://cyberneko.org/html/features/document-fragment",true);          
    		Document document = new DocumentImpl();         
    		DocumentFragment fragment = document.createDocumentFragment();         
    		// parse the document into a fragment
    		// Récupération du flux         
    		parser.parse(new InputSource(new StringReader(xmlBuild())), fragment);          
    		TransformerFactory transformerFactory = TransformerFactory.newInstance();         
    		Transformer transformer = transformerFactory.newTransformer();         
    		// don't display the namespace declaration         
    		transformer.setOutputProperty("omit-xml-declaration", "yes");         
    		DOMSource source = new DOMSource(fragment); 
     
    		StringWriter replacedPayload = new StringWriter();
    		StreamResult result = new StreamResult(replacedPayload);         
    		transformer.transform(source, result); 
    		System.out.println(replacedPayload);
     
    	}
    Quelques points sont encore à analyser, comme garder la casse des noeuds, mais ce n'est pas vraiment une anomalie


    Au passage, nous avons trouvé la solution ici:

    http://stackoverflow.com/questions/5...ss-than-symbol

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    *Bâille*. Oui, mais et

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <technicalComplementaryLabel>un long label technique ... </ qui finit par se terminer</technicalComplementaryLabel>

    ?
    Et

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <technicalComplementaryLabel>... </technicalComplementaryLabel> ...</technicalComplementaryLabel>

    , comme déjà dit ?

    Par ailleurs, CyberNeko ne résout pas ces choses-là avec des expressions régulières. Tout au plus il s'en sert pour découper le problème.
    Et ce qu'il gère n'est pas du XML mais du HTML. Je reconnais qu'au point où en est ce n'est plus qu'un détail, d'autant plus qu'il accepte les balises qui n'ont rien à voir avec le HTML.

    Ça marchotte, ça marchouille, tout dépend des circonstances et des conditions. Je te dis de ne pas trop compter dessus, que certaines choses sont impossibles et que tu ne peux garantir à personne que tu ne tomberas pas dedans. Mais si le résultat à l'à peu près te convient, c'est probablement le mieux à faire, oui.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    [HS]
    Un petit HS pour vous indiquer que vous pouvez indiquer le type de code dans les balises [code=langage]. Par défaut le type est fonction du forum sur lequel le message se trouve (java ici).
    Donc pour forcer la coloration syntaxique, disons en XML au hazard ^^ :
    [code=xml]<balise>mon code...[/code]

    [/HS]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <technicalComplementaryLabel>... </technicalComplementaryLabel> ...</technicalComplementaryLabel>
    Aucune importance, en théorie c'est impossible, dans notre cas les flux que nous recevons sont formés de manière classique et basique: aucun attribut, juste une succession de balise avec des valeurs dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <technicalComplementaryLabel>un long label technique ... </ qui finit par se terminer</technicalComplementaryLabel>
    Ca c'est plus problématique, ils peuvent saisir n'importe quoi comme symbole, mais faudrait vraiment être tordu pour saisir un commentaire pareil


    Par ailleurs, CyberNeko ne résout pas ces choses-là avec des expressions régulières. Tout au plus il s'en sert pour découper le problème.
    Et ce qu'il gère n'est pas du XML mais du HTML. Je reconnais qu'au point où en est ce n'est plus qu'un détail, d'autant plus qu'il accepte les balises qui n'ont rien à voir avec le HTML.
    En fait l'important n'est pas d'utiliser une expression régulière, comme je disais plus haut, le but du jeu, c'est de parser les caractères spéciaux.
    Je ne suis pas un expert dans ce domaine, pour moi utiliser une expression régulière pour régler le problème me semblait plausible.. Maintenant si CyberNeko fait autrement, c'est très bien, même si au départ, cet outil est utilisé pour le HTML.

    Mais si le résultat à l'à peu près te convient, c'est probablement le mieux à faire, oui.
    C'est à dire que la meilleure solution, ça aurait été e transformer les caractères par leurs représentations HTML avant de l'injecter dans le flux, mais c'est hors de mon périmètre d'activité..

Discussions similaires

  1. Extraire les valeurs des noeuds xml en java
    Par Mohcine.nb dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 28/04/2014, 14h27
  2. Réponses: 8
    Dernier message: 13/10/2008, 20h26
  3. Pb d'expression Réguliére : pour les amateurs
    Par tnodev dans le forum Général Java
    Réponses: 10
    Dernier message: 16/02/2008, 22h14
  4. [RegEx] Expression régulière pour les retours de lignes
    Par Marshall_Mathers dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2007, 09h42
  5. Réponses: 2
    Dernier message: 14/06/2006, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo