/ / Perl vérifie si la chaîne est le préfixe d'une correspondance d'expression rationnelle valide - regex, perl

Perl vérifie si la chaîne est le préfixe d'une correspondance d'expression rationnelle valide - regex, perl

Est-il possible de déterminer, en général, si une chaîne donnée est un préfixe d'une correspondance possible d'une expression rationnelle en Perl?

Une fonction intéressante que la bibliothèque de regex OCaml Str soutiens est string_partial_match. Cette fonction détermine si la partie d'une chaîne commençant à une position donnée est soit a) le préfixe d'une correspondance, soit littéralement une correspondance elle-même, soit b) pas le préfixe d'une chaîne correspondante.

Du Documentation Str:

val string_partial_match: regexp -> string -> int -> bool

Semblable à Str.string_match, mais renvoie également true si la chaîne d'argument est un préfixe d'une chaîne qui correspond. Cela inclut le cas d'un vrai match complet.

Je me demandais si Perl était capable d'émuler cette fonction. En utilisant pos() pour définir la position, l'assertion de largeur nulle Get interpolation regex, nous pouvons émuler string_match (qui n’a pas le comportement de préfixe).

sub string_match {
my ($regex, $str, $pos) = @_;
pos($str) = $pos;
return ($str =~ m/G$regex/);
}

Les expressions rationnelles de Perl prennent en charge de nombreuses fonctionnalités qu'OCaml "sbibliothèque ne le fait pas, il est donc tout à fait possible que la capacité de reconnaître les préfixes de correspondances possibles ne soit pas possible de mettre en œuvre / isn "t exposée par l’API.

Réponses:

1 pour la réponse № 1

Si je vous comprends bien, alors vous voulez voir si la chaîne pourrait correspondre à l'expression régulière si la chaîne seraitêtre plus long. C'est-à-dire s'il est possible d'étendre la chaîne d'une manière qui corresponde à l'expression régulière. En termes techniques: lorsque le DFA atteint la fin de la chaîne, il n'a pas encore échoué.

Je peux voir quelques utilisations pour une telle fonctionnalité,en particulier lors de la vérification interactive des entrées utilisateur, un caractère à la fois. Ensuite, vous souhaitez faire la distinction entre "l'entrée ne correspondra jamais" et "l'entrée pourrait correspondre si l'utilisateur saisissait plus de caractères".

Pour autant que je sache, cependant, une telle fonctionnalité n'est pas prise en charge par Perl.