2009-05-06 6 views
3

Disons qu'il ya six cordesdébut de match de C# RegEx de ficelle et début de mot en même temps

  1. "ABCD bbb ccc"
  2. "abce bbb ccc"
  3. "abcf bbb ccc"

  4. "aaa abcd ccc"

  5. "aaa abce ccc"
  6. "aaa abcf ccc"

L'utilisateur saisit l'expression "<abc[!e]"

Cette expression se traduit en suivant regex "^ abc [^ e]"

regex Traduit sélectionnne avec succès des chaînes 1 et 3

Si je voulant faire correspondre les chaînes 4 et 6, l'expression doit être traduite en "\ Wabc [^ e]" (ceci correspondrait également à l'espace avant abc chars :(, ce qui n'est pas bon)

Malheureux L'expression entrée par l'utilisateur doit être convertie en regex qui correspondrait à la fois aux chaînes 1,3 et 4,6.

Y at-il moyen de traduire l'utilisateur est entré dans l'expression regex qui combinerait "^ abc [^ e]" et "\ WABC [^ e]" expressions (idéalement seconde expression ne correspondrait pas à la première place :))

+2

Avez-vous essayé: "(^ abc [^ e] | \ Wabc [^ e])"? Ou peut-être juste "(^ | \ W) abc [^ e]"? (puisque je ne l'ai pas essayé, j'utilise le commentaire au lieu de la réponse) –

+0

Je suppose qu'il ne devrait pas non plus correspondre 'aaaabcd' –

+0

lassevk cela a rendu ma vie un peu plus facile :). Si je pouvais seulement faire \ W ne pas commencer à faire correspondre avec l'espace, à l'instant il correspond à "abcd" –

Répondre

4

Perl connaît la limite de mot zéro largeur \ b:

\babc[^e] 

Je pense que cela devrait fonctionner dans la plupart des moteurs d'expression régulière de style Perl.

+0

+1 - Cela a fonctionné dans mes tests. Supprimé ma réponse –

+0

Fonctionne parfaitement. Je vous remercie :) –

Questions connexes