2009-05-18 6 views
9

i ont les lignes suivantes:Regex pour les lignes correspondant qui ne contiennent pas un mot

Message:Polarion commit Mon May 18 06:59:37 CEST 2009 
Message:Polarion commit Fri May 15 19:39:45 CEST 2009 
Message:424-18: use new variable 
Message:Polarion commit Fri May 15 19:29:10 CEST 2009 
Message:Polarion commit Fri May 15 19:27:23 CEST 2009 
Message:000-00: do something else 
Message:Polarion commit Fri May 15 17:50:30 CEST 2009 
Message:401-103: added application part 
Message:Polarion commit Fri May 15 17:48:46 CEST 2009 
Message:Polarion commit Fri May 15 17:42:04 CEST 2009 

et je veux obtenir toutes les lignes ne contenant pas « Polarion »

comment pourrais-je faire cela?

ps: je l'ai vu: Regex to match against something that is not a specific substring , mais il ne m'a pas aidé

pps: je suis en train de le faire dans tortoiseSVN pour sélectionner des messages de journal, et je pense qu'il ya un problème avec « négatif lookbehind "

+0

Veuillez mettre en retrait le code et les exemples de fichiers en texte clair avec quatre espaces, pour assurer un formatage correct. Vous pouvez le faire en sélectionnant le texte et en appuyant sur ctrl-k. À votre santé. – Stephan202

+0

Tous les moteurs regex ne prennent pas en charge le lookbehind négatif - TortoiseSVN est probablement celui qui ne le fait pas. –

Répondre

9

Il pourrait être plus facile si vous faites correspondre votre expression régulière à la chose que vous recherchez, puis inversez les résultats.

La plupart des outils utilisant Regex vous permettent d'inverser les résultats de la recherche, appelant généralement l'option 'v' dans V ert (en gardant le i Case- I nsensitive):

par exemple

grep -v <search> 
find /v <search> 

etc.

+0

Hmmm, le premier texte en gras, le v en inversé se montre bien dans l'aperçu, mais semble mauvais ici ... –

+0

Les astérisques ne sont pas destinés à être utilisés à l'intérieur d'un mot, mais ... devrait fonctionner. Ce n'est pas la première fois que j'ai vu le panneau de prévisualisation donner de faux résultats. –

+0

+1, c'est exactement ce que je cherchais – Claudiu

19

Ce expresion fera le travail.

^(?:.(?<!Polarion))*$ 

Il utilise une assertion négative lookbehind zéro largeur pour affirmer que la chaîne ne contient pas « Polarion ». La version suivante effectuera l'assertion seulement après un «n» - peut-être que ce sera plus rapide, peut-être plus lent.

^(?:[^n]*|n(?<!Polarion))*$ 
+1

Réponse intéressante, mais grep -v est beaucoup plus simple. –

+0

Wow m'a aidé avec d'autres éditeurs de texte et Java :-). Merci. –

+0

fonctionne très bien dans le bloc-notes ++ – BurnsBA

0

Je ne pouvais trouver aucune information sur ce moteur regex TortoiseSVN utilise, mais vous pourriez poser sur le mailing list. Tous les moteurs ne prennent pas en charge les fonctions avancées comme le look-behind négatif de largeur nulle.

3

Voici une solution en utilisant un test avant négatif, ce qui est plus largement soutenu qu'un lookbehind:

^Message:(?!Polarion).*$ 

(De plus, puisque nous savons où Polarion peut paraître, nous ne devons faire aucun des inutiles . fantaisies Daniel a suggéré)


Explication de l'expression ci-dessus, sous forme de commentaire regex, est:

(?x)  # Enable comments 
^   # Start of string (start of line in multiline mode) 
Message: # Literal text 
(?!  # Begin negative lookahead 
Polarion # Literal text 
)   # End negative lookahead 
.*   # Greedily match any number of any character 
$   # End of string (end of line in multiline mode) 
0

Cela a fonctionné pour moi et est rapide à entrer (dans une boîte de dialogue de recherche ou similaire): ^(?!.*not this).*but this

+0

vous pouvez montrer quelques exemples de travail –

0

Comme le montre this answer, le champ de recherche de TortoiseSVN n'est pas limité aux expressions régulières. Plus précisément, si une expression est incluse dans !(), elle est annulée et les lignes non correspondantes apparaissent dans le résultat. Le ! annule l'expression incluse (régulière ou non).

Pour votre cas,

!(Polarion) 

devrait faire l'affaire.

Questions connexes