2009-08-24 5 views
2

J'essaie d'utiliser des expressions régulières pour faire correspondre une chaîne qui ne contient pas la séquence de caractères d'un symbole inférieur à (<) suivi d'un espace non. Voici quelques exemplesCorrespond à une chaîne qui ne contient pas une certaine séquence de caractères

valides - "A new description."
valides - "A < new description."
invalide - "A <new description."

Je ne peux pas sembler trouver l'expression juste pour obtenir un match. J'utilise le validateur Microsoft Regular Expression, donc j'ai besoin que ce soit une correspondance et n'utilise pas de code pour annuler la correspondance.

Toute aide serait appréciée.

Merci,
Dale

+1

Quelle est l'expression que vous utilisez maintenant? – BigBlondeViking

+0

J'ai essayé plusieurs. Mon dernier était quelque chose comme ^. * <(?! \ S). * $ Mais il ne trouve une correspondance que si j'ai le symbole inférieur suivi d'un espace. J'en ai besoin pour faire correspondre si le symbole inférieur à n'existe pas dans la chaîne. –

+0

Je ne sais pas pourquoi <\ S (avec un "S" en majuscule ne fonctionne pas) il dit hey si vous ne pouvez pas trouver un espace après votre "<" puis le faire correspondre. Quand j'ai fait un test sur les choses que tu as données, ça a marché. – chobo2

Répondre

6
@"^(?:[^<]+|<(?!\s))*$" 

Faire un négatif pour l'espace préanalyse permet de correspondre si le dernier caractère de la chaîne est « < ». Voici une autre façon:

^(?!.*<\S).+$ 

L'analyse de la chaîne préanalyse entière pour un « < » immédiatement suivi d'un caractère non-blanc. S'il n'en trouve pas, le ". +" Avance et correspond à la chaîne.

+0

Oh, vous les gars rock! Je ne peux pas croire que j'ai reçu autant de réponses possibles si rapidement. Cette expression^(?!. * <\ S). + $ Fait le travail bien. Merci Alan! –

0
var reg = new Regex(@"<(?!\s)"); 
string text = "it <matches"; 
string text2 = "it< doesn't match"; 

reg.Match(text);// <-- Match.Sucess == true 
reg.Match(text2);// <-- Match.Sucess == false 
+0

qu'en est-il "il ne correspond pas"? Je ne trouve pas de correspondance sur cette chaîne. J'ai besoin que la chaîne soit valide si elle ne contient pas le

+0

@Dale, j'ai édité ma réponse. – Cleiton

+0

Malheureusement, cela ne trouve toujours pas de correspondance si la chaîne ne contient pas du tout le symbole. –

0

Utilisez une anticipation négative: "(?!) <"

+0

c'est le chemin que j'ai essayé de descendre, je ne peux pas sembler avoir la bonne syntaxe. –

0

Je pense que cela pourrait être ce que vous cherchez.

Valid - "A new description." 
Valid - "A < new description." 
Invalid - "A <new description." 



Try this: <\S 

Ceci est à la recherche de quelque chose qui a un "less then" et un espace manquant après celui-ci.

Dans ce cas, il correspondrait "<n"

Je ne sais pas combien voulez-vous qu'il corresponde bien.

1

En d'autres termes, vous permettent deux choses dans votre chaîne:

  1. Tout caractère SAUF un <
  2. Un < suivi d'un espace.

Nous pouvons écrire que tout directement:

/([^<]|(<))+/ 
+0

Les parenthèses autour de "<" ne sont pas nécessaires, et des parenthèses supplémentaires dans une regex ajoutent un surcoût. Aussi, j'utiliserais '/^([^ <] | <) + $ /' pour souligner que toute la chaîne doit correspondre. (RegularExpressionValidator ajoute un^... $ implicite, de sorte que vous pouvez vous en passer sans eux dans ce cas particulier.) – cjm

+0

Ceci est très proche. Il ne correspond pas si le symbole inférieur à est à la fin de la chaîne, mais je peux vivre avec cela si nécessaire. –

Questions connexes