Question

J'ai vu beaucoup de choses en commun dans l'expression rationnelle des capacités des différents regex-enabled outils/langues (p. ex.perl, sed, java, vim, etc), mais j'ai aussi beaucoup de différences.

Est-il standard sous-ensemble de regex capacités de tous les regex-enabled outils/langues de soutien?Comment faire regex capacités varient entre outils/langues?

Était-ce utile?

La solution

Comparer Expression Régulière Saveurs

http://www.regular-expressions.info/refflavors.html

Autres conseils

La plupart des outils d'expression/d'appui aux langues de ces capacités de base:

  1. Classes de personnages/décors et leur Négation - []
  2. Ancres - ^$
  3. Alternance - |
  4. Les quantifieurs - ?+*{n,m}
  5. Les métacaractères - \w, \s, \d, ...
  6. Références arrières - \1, \2, ...
  7. De Dot .
  8. Simple modificateurs comme /g et j'ai mondiale et ignorer la casse
  9. Échapper Les Caractères

Des outils plus avancés/les langues de soutien:

  1. Lookaheads et derrières
  2. Classes de caractères POSIX
  3. Les limites de mot
  4. Inline Commutateurs comme en permettant le respect de la casse pour seulement une petite section de la regex
  5. Modificateurs comme /x pour permettre supplémentaires de mise en forme et les commentaires, /m pour multiligne
  6. Nommé Capture
  7. Unicode

Si vous avez pris le grep regexp de grammaire, pas la egrep, ou le sed regexp la grammaire et l'avez utilisé, vous devriez être en utilisant un sous-ensemble sûr à travers de nombreuses plates-formes et des outils.

La seule chose qui peut vous mordre puis c'est quand vous allez décalage entre les regexp implémentations utilisant des Automates à états Finis (FSA) et à l'aide de retours en arrière, par exemplequantificateur implémentations varient d'un grep pour Perl.

FSA implémentations basées trouverez plus long match commençant à la première position.Mandature ceux trouverez la gauche biaisée premier match, en commençant à la première position.C'est, il va essayer chaque branche, dans l'ordre de la répétition jusqu'à ce qu'une correspondance soit trouvée.

Considérez la chaîne "xyxyxyzz", et le patron "(xy)*(xyz)?".FSA base de moteurs de match de la plus longue sous-chaîne, "xyxyxyz".Le suivi en fonction des moteurs correspondra à gauche-biaisée de la première sous-chaîne, "xyxyxy".

Il n'y a pas de moteur de série.Cependant, la POSIX une Expression Régulière Étendue format est valide sous-ensemble de la plupart des moteurs et est probablement aussi proche que vous obtiendrez à un standardisé sous-ensemble.

Voir emacs syntaxe d'expression régulière: http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html#Regexps.

Je me souviens avoir lu que emacs syntaxe est définie dans la pierre (en arrière pour des raisons de compatibilité), donc si vous voulez être compatible avec tout, tout rendre compatible avec cette.Certains outils pourraient soutenir, d'autres ne pourraient pas.

Alors que vous avez un objectif louable, je pense que ça va être extrêmement difficile à atteindre, et j'ai aussi trouvé emacs regexps une douleur à travailler avec.Peut-être 99% de tout ce qui est assez bon si elle vous rend plus heureux et plus productifs?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top