6 votes

Pourquoi auriez-vous besoin de la condition if ( ?(R)...|...) dans une expression rationnelle ?

J'étais en train de regarder la documentation sur les expressions rationnelles et j'ai été troublé par quelque chose. Les (R) dans le contexte de la (?(R)...|...) est dit être :

perl était un peu énigmatique :

(R)

Vérifie si l'expression a été évaluée à l'intérieur d'une récursion. Syntaxe complète : ( ?(R)then|else)

PCRE n'a pas été d'une grande utilité :

( ?(R) condition de récursivité globale

y expressions-regulières.info n'avait rien à dire à ce sujet.

Cette condition signifie-t-elle que la pile de sous-routines a plus d'un niveau de profondeur ou signifie-t-elle quelque chose d'autre ?

1voto

Wiktor Stribiżew Points 100073

Véase cette explication :

s'il n'y a pas de sous-motif nommé "R", la condition est vraie si un appel récursif à l'ensemble du motif ou à un sous-motif a été effectué

Cela implique que (?(R) la condition vérifie si l'ensemble du motif a été recrédité au moins une fois et que le résultat de la vérification est booléen, soit Vrai s'il y a eu récursion, ou Faux autrement.

Si vous avez besoin de vérifier quelques exemples, voir https://github.com/PhilipHazel/pcre2/blob/587b94277b50ababde2380b5877c93e36ca65db8/src/pcre2_jit_test.c .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X