2009-08-02 3 views
1

Je construis un insert Mysql avec regex.Supprimer les lignes contenant plus de X valeurs, en utilisant regex

C'est ce que l'insert ressemble jusqu'à présent:

(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), (#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), (#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#); 

Dans une personne précédente question m'a aidé à écrire cette expression regex pour supprimer une valeur qui est smalled que l'exemple ci-dessus

var stripped30 = htstring30.replace(/\((?:[^#\n]*?#[^#\n]*?#[,\s]?){0,8}\)[,;]\s*/ig, ''); 

Cela va supprimer l'exception ci-dessous et le supprimer, me laissant avec seulement les 9 tables que je veux.

(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#), 

Maintenant, je veux essentiellement faire la même chose mais cette fois supprimer toutes les exceptions plus grandes que 9 - Quelqu'un peut-il me aider s'il vous plaît de le faire.

(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#, #text10#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#, #text10#, #text11#); 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#); 

Alors que quand il y a une exception plus que 9 que je le supprimer

Répondre

1

Vous pouvez utiliser cette expression régulière pour supprimer chaque ligne qui n'a pas 9 entrées:

/^(?!\s*\((?:#[^#\n]*#(?:\s*,\s*#[^#\n]*#){8})\)[,;]\s*$).*/mg 
+0

Je l'ai essayé mais il a tout effacé/^ (?! \ S * \ ((?: # [^ # \ N] * # (?: \ S *, \ s * # [^ # \ n] * #) {8} \) [,;] \ s * $). * [^;];? $/Mg J'ai reçu une erreur lors de son utilisation initiale,/^ (?! \ S * \ ((? : # [^ # \ n] * # (?: \ s *, \ s * # [^ # \ n] * #) {8} \) [,;] \ s * $)). * [^; ];? $/mg et ajout d'une parenthèse fermante –

+0

@Gerald Ferreira: Correction de – Gumbo

+0

+1 Oui, celui-ci supprime correctement les enregistrements "trop ​​longs" et "trop ​​courts" – ridgerunner

0
vous

pourrait essayer ce qui suit:

var stripped30 = htstring30.replace(/\((?:[^#\n]*?#[^#\n]*?#[,\s]?){10,}\)[,;]\s*/ig, ''); 

où le blanc après le 10, ind icates qu'il n'y a pas de limite supérieure.

modifier:

utilisant my answer from the previous question, mais la mise à jour comme je dois votre exemple ci-dessus, produit, pour moi, de bons résultats:

\(([\s]*#[^#]+#[\s]*,?){10,}\)[,;]* 

laissez-moi savoir comment tu te trouves.

+0

Bonjour AKF J'ai essayé votre solution et elle ne fonctionne pas non plus, bien qu'il me montre tous ceux qui ne correspondent pas au problème ... mais supprime ceux que je veux garder ... donc si cela pouvait être inversé comme ça, ça pourrait marcher –

Questions connexes