Forum Programmation.perl demande d'aide sur regex dans pmwiki

Posté par  .
Étiquettes : aucune
0
6
mai
2009
bonsoir,

je suis en train de réaliser une recette pour pouvoir inclure la syntaxe txt2tags à l'intérieur de pmwiki :

http://pmwiki.org/wiki/Cookbook/Txt2tags

Cela ne fonctionne pas trop mal, mais je bloque sur certaines parties, notamment pour faire des remplacements avec des regex sur des zones de texte s'étendant sur plusieurs lignes.


Dans ma recette, j'ai cela :
Markup ('txt2tags_verbatimline' , 'directives', '/``` (.*?)/', "$1");

Ce qui permet d'ajouter la balise PRE à tout texte compris entre 2 `, par exemple

``Partie en monospace``

Cela fonctionne correctement.

Maintenant j'essaye d'implémenter une notation similaire, qui permet d'ajouter la balise PRE à une zone de texte complète, par exemple

```
Partie qui sera
en zone PRE
et qui gardera
les retours à la ligne
```

Malheureusement, ce code ne fait pas l'affaire :

Markup ('txt2tags_verbatim' , 'directives', '/```(.*?)```/s', "$1");

ni celui-là :
Markup ('txt2tags_verbatim' , 'directives', '/```(.*?^$)```/m', "$1");

Naïvement j'ai tenté :

Markup ('txt2tags_verbatim' , 'directives', '/```(.*?\n)```/s', "$1");

(une autre recette contenait ce genre de code, avec un \n)

mais ce n'est pas mieux. La zone de texte n'est pas du tout parsée et le code reste identique dans l'affichage html.

J'ai regardé la notice dans :

http://www.pmwiki.org/wiki/PmWiki/CustomMarkup

Qui indique bien :



It appears that (.*?) does not match newlines in these functions, making the above example inoperable if the text to be wrappen in < em > contains new lines.

If you include the "s" modifier on the regular expression then the dot (.) will match newlines. Thus your regular expression will be "/STUFF(.*?)/s". That s at the very end is what you are looking for. If you start getting into multi-line regexes you may be forced to look at the m option as well - let's anchors (^ and $) match not begin/end of strings but also begin/end of lines (i.e., right before/after a newline).

Je ne comprends pas la partie : "Thus your regular expression will be "/STUFF(.*?)/s". That s at the very end is what you are looking for."


Pourquoi est-ce que c'est indiqué que ce n'est pas pas ce qu'on recherche ?
Sauriez-vous comment corriger cette regex ?

Merci d'avance.

(je poste cela dans la partie programmation.perl vu que ce sont des regex comme on trouve dans perl...)
  • # cherchez pas...

    Posté par  . Évalué à 2.

    En fouillant dans le code, j'ai trouvé un exemple similaire à ce que je voulais faire, aussi cette ligne fonctionne :


    Markup('txt2tags_verbatim', '[=', "/^```\n(.*?\n)```[^\\S\n]*\n/sme", "Keep(PSS('<pre class=\"escaped\">$1'))");

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.