9
votes

Regex - Correspondre à la chaîne entière sauf si

Je dois écrire une expression régulière qui correspondra à tout dans la chaîne à moins que cela ne présente qu'un certain mot. Prenant cette chaîne par exemple: xxx pré>

l'expression qui correspond à tout est: p> xxx pré>

... qui doit être modifié de manière à ce qu'il sera pas strong> correspond à la chaîne du tout s'il contient le mot "sqlbuddy". Je pensais qu'un lookahead négatif le ferait, mais cela ne fonctionne pas pour moi. P>

Par exemple, j'ai essayé cela, ce qui ne fonctionne pas: P>

^(?!sqlbuddy).*$


0 commentaires

3 Réponses :


2
votes

En outre, cela a fonctionné pour moi: la position de la chaîne 'SQLBuddy' n'a pas d'importance.

^ ((?! sqlbuddy).) * $


0 commentaires

6
votes

L'exemple ne fonctionne pas car il suppose sqlbuddy est au début de la chaîne. Vous devez la modifier à ce qui suit, de sorte que sqlbuddy peut apparaître n'importe où dans la chaîne: xxx

Cependant, si vous voulez vraiment simplement vérifier si votre chaîne contient Un mot donné, alors peut-être un "http://12.34.567.890/sqlbuddy" .Contains ("sqlbuddy") suffira.


3 commentaires

Merci. Je l'utilise avec mod_rewrite, donc je ne peux pas utiliser .Contains (), mais cela fonctionne et aussi l'autre réponse ci-dessous. Toutefois, pour une raison quelconque, il ne correspond pas à l'utilisation du testeur de regex à GSKINNER.COM/REGEXR


@Allen, Découvrez Rubular, c'est ce que j'utilise pour mes tests de regex, et je l'aime vraiment.


+1 mais mineur Tweak: vous n'avez pas besoin du . * après sqlbuddy . Ceci suffit: (? M) ^ (?!. *? SQLBuddy). * $ ou (? m) ^ (? * $ Selon que vous voulez devenir paresseux ou en arrière.



0
votes

... aussi (pour d'autres personnes), si vous souhaitez effectuer une recherche uniquement dans un lieu spécifique d'une chaîne [longue] (texte long avec plusieurs correspondances), vous pouvez utiliser:

first_part_of_string.*(?!.*sqlbuddy.*).*second_part_of_string


0 commentaires