2012-09-10 1 views
0

J'ai cette regex: [A-Z][A-Z] \d\dNégation de cette regex - comment?

Je veux l'utiliser pour remplacer tout ce qui ne correspond pas à des espaces (ou tout autre caractère). Comment puis je faire ça? La classe de caractères niée ne fonctionne pas dans ce cas, car la regex elle-même a deux classes char.

Une partie courte de la chaîne ressemble que:

<div class=""></div>CL 17 </a><br> 

Seul le CL 17 devrait rester, le reste doit être vide.

Note: je remarquai que cela semble être compliqué, donc je l'ai résolu en écrivant un petit script PHP, qui obtient une liste des matches (preg_match_all) et gère ceux d'une façon des thats ok pour mon cas.

+3

Donc vous voulez changer 'foo AB 12 barXY 89baz' en' **** AB 12 **** XY 89 *** '? –

+0

Ouais, exactement ... – user1638055

+0

Cela ne va pas être facile avec regex. Je vais déjeuner maintenant mais j'essaierai de penser à quelque chose plus tard. –

Répondre

0

Après votre dernière modification que je suggère:

.*?([A-Z]{2} \d{2}).*?(?=[A-Z]{2} \d{2}|$) 

REMPLACER PAR le premier groupe.

(réponse avant édition):

[^A-Z][^A-Z]\S\D{2} 
+0

Ne fonctionne pas, jEdit prend en charge toutes sortes d'expressions rationnelles complexes, j'ai essayé le lookahead négatif ci-dessous, mais cela n'a pas fonctionné, aussi. – user1638055

0

après la dernière édition de post que vous êtes à la recherche d'une référence en arrière dans la chaîne de remplacement:

pattern: ^.*?([A-Z][A-Z] \d\d).*$ 
replace: $1 

peut-être équivalent à ce

pattern: ^.*?(?=[A-Z][A-Z] \d\d)|(?<=[A-Z][A-Z] \d\d).*$ 
replace: **nothing**