2013-05-13 5 views
1

En essayant de créer une fonction de filtre pour faciliter l'écriture de fichiers html par les éditeurs.Rechercher des correspondances et remplir un tableau

Les utilisateurs vont saisir un texte comme celui-ci:

Fusce eget sapien a tortor hendrerit pharetra sed a libero. Vestibulum quis dui sed elit   semper semper non molestie nulla. Curabitur suscipit feugiat varius. 

{{accordion}} 
    {{title}}1 This is the first accordion title{{title_end}} 
    {{body}}1 This is the first accordion body{{body_end}} 
    {{title}}1 This is the second accordion title{{title_end}} 
    {{body}}1 This is the second accordion body{{body_end}} 
    {{title}}1 This is the third accordion title{{title_end}} 
    {{body}}1 This is the third accordion body{{body_end}} 
{{accordion_end}} 

Nulla consequat cursus turpis vitae pretium. Suspendisse iaculis nisl rhoncus justo luctus vel scelerisque diam volutpat. 

{{accordion}} 
    {{title}}2 This is the first accordion title{{title_end}} 
    {{body}}2 This is the first accordion body{{body_end}} 
    {{title}}2 This is the second accordion title{{title_end}} 
    {{body}}2 This is the second accordion body{{body_end}} 
    {{title}}2 This is the third accordion title{{title_end}} 
    {{body}}2 This is the third accordion body{{body_end}} 
{{accordion_end}} 

Ut imperdiet odio quis diam ornare in congue purus rhoncus. Quisque scelerisque est sed sapien facilisis a facilisis turpis adipiscing. In hac habitasse platea dictumst. 

Notez que les blocs d'accordéon apparaît entre autres morceaux de texte, et ils apparaissent dans plusieurs occurences. J'utilise un gabarit pour thématiser les accordéons, donc je voudrais que les accordéons soient structurés comme un tableau, et ensuite injecter les accordéons thématiques dans les bonnes positions dans le texte.

Array 
(
    [0] => Array 
     (
      [title] => 1 This is the first accordion title 
      [body] => 1 This is the first accordion body 
     ) 

    [1] => Array 
     (
      [title] => 1 This is the second accordion title 
      [body] => 1 This is the second accordion body 
     ) 

    [2] => Array 
     (
      [title] => 1 This is the third accordion title 
      [body] => 1 This is the third accordion body 
     ) 

) 

Je suis de déconner avec preg_replace_callback, mais je ne peux pas vraiment trouver la bonne façon de le faire.

Jusqu'à présent, Ive été en train de faire comme ceci:

function format_accordion($text) { 

    $regex = '#{{accordion}}(.+?){{accordion_end}}#is'; 

    return preg_replace_callback(
    $regex, 
    "lolfunction", 
    $text); 
} 


function lolfunction($accordion_content) { 

    $title_regex = '#{{title}}(.+?){{title_end}}#is'; 
    $body_regex = '#{{body}}(.+?){{body_end}}#is'; 

    $data = array(); 

    foreach ($accordion_content as $key => $value) { 
    $data[$key]['title'] = $key . " title"; // I need to find the titles 
    $data[$key]['body'] = $key . " body"; // I need to find the bodies 
    } 



    return theme("kunsten_accordion", array("data" => $data)); 

} 

La fonction thème() passe le tableau à un modèle html. Je l'ai appelé la fonction lolfunction(), parce que je l'avais espéré avoir tout simplement une fonction format_accordion() :)

+0

aura-t-il vraiment plus facile pour vos utilisateurs écrire '{{accordéion}} {{title}} {{body}}' quand ils pourraient utiliser du XML standard (ou même du HTML) pour baliser le texte? Si vous utilisez XML ('<body>'), vous n'aurez pas besoin d'écrire un analyseur personnalisé. – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Je ne veux pas qu'ils écrivent html, ce qui signifierait qu'ils doivent écrire des classes, c'est-à-dire aussi. Mais c'est peut-être une bonne idée de les faire écrire xml. Je serais quand même obligé de remplacer les balises xml par des classes html +. Des idées? – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1120186/">tolborg</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">oui sauf l'inverse. J'ai une chaîne. Puis transformez les correspondances en tableau. Ensuite, formatez le tableau en une nouvelle chaîne. Puis injectez la nouvelle chaîne dans le texte original. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1120186/">tolborg</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="answer-title"> <span class="text-logo margin-top-sm">A</span> <h2 class="title h4">Répondre</h2> </div> <div class="item-description text-md markdown-body margin-bottom-40 voidso"> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>D'accord, je fini par faire ceci:</p> <pre><code class="prettyprint-override">function format_accordion($text) { $regex = '#{{accordion}}(.+?){{accordion_end}}#is'; return preg_replace_callback( $regex, function($content) { $title_regex = '#{{title}}(.+?){{title_end}}#is'; $body_regex = '#{{body}}(.+?){{body_end}}#is'; // find all titles preg_match_all($title_regex, $content[1], $titles); // find all bodies preg_match_all($body_regex, $content[1], $bodies); $data = array(); foreach($titles[1] as $key => $title) { $data[$key]['title'] = $title; } foreach($bodies[1] as $key => $body) { $data[$key]['body'] = $body; } return theme("kunsten_accordion", array("data" => $data)); }, $text); } </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/16531442">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2013-05-13 21:28:18</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1120186/">tolborg</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">C'est certainement la façon la plus directe que je puisse penser :) – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4319274062" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">Questions connexes</div> <ul class="relative_list"> <li> 1. <a href="http://fr.voidcc.com/question/p-emejbjpm-vh.html" target="_blank" title="Rechercher et supprimer des correspondances de tableau motifs"> Rechercher et supprimer des correspondances de tableau motifs </a> </li> <li> 2. <a href="http://fr.voidcc.com/question/p-yzgtmioy-ho.html" target="_blank" title="Rechercher un tableau et supprimer des entrées"> Rechercher un tableau et supprimer des entrées </a> </li> <li> 3. <a href="http://fr.voidcc.com/question/p-eemqsira-dy.html" target="_blank" title="Comment créer une requête sql pour rechercher des correspondances partielles?"> Comment créer une requête sql pour rechercher des correspondances partielles? </a> </li> <li> 4. <a href="http://fr.voidcc.com/question/p-eoyspdie-ct.html" target="_blank" title="Powershell - Comment rechercher des mots entiers (ou) des correspondances exactes"> Powershell - Comment rechercher des mots entiers (ou) des correspondances exactes </a> </li> <li> 5. <a href="http://fr.voidcc.com/question/p-owjgamom-bd.html" target="_blank" title="perl Obtenir les index des correspondances dans le tableau"> perl Obtenir les index des correspondances dans le tableau </a> </li> <li> 6. <a href="http://fr.voidcc.com/question/p-uzrvchwh-mb.html" target="_blank" title="Rails - Rechercher des correspondances dans le modèle de relation"> Rails - Rechercher des correspondances dans le modèle de relation </a> </li> <li> 7. <a href="http://fr.voidcc.com/question/p-ypvafgkd-ew.html" target="_blank" title="Remplir un tableau"> Remplir un tableau </a> </li> <li> 8. <a href="http://fr.voidcc.com/question/p-prsndzms-gb.html" target="_blank" title="Inclure des correspondances partielles dans SQLite FTS3 Rechercher"> Inclure des correspondances partielles dans SQLite FTS3 Rechercher </a> </li> <li> 9. <a href="http://fr.voidcc.com/question/p-qakdnbvc-vb.html" target="_blank" title="Github rechercher des correspondances dans différents noms de fichiers"> Github rechercher des correspondances dans différents noms de fichiers </a> </li> <li> 10. <a href="http://fr.voidcc.com/question/p-pkhonvoy-k.html" target="_blank" title="Comment rechercher efficacement un tableau pour remplir des champs de formulaire?"> Comment rechercher efficacement un tableau pour remplir des champs de formulaire? </a> </li> <li> 11. <a href="http://fr.voidcc.com/question/p-nwhxyyrz-ea.html" target="_blank" title="remplir un tableau numpy"> remplir un tableau numpy </a> </li> <li> 12. <a href="http://fr.voidcc.com/question/p-vgmocrsr-hk.html" target="_blank" title="html sélectionnez plusieurs choix entrée, stockez-les dans mysql db et rechercher des correspondances"> html sélectionnez plusieurs choix entrée, stockez-les dans mysql db et rechercher des correspondances </a> </li> <li> 13. <a href="http://fr.voidcc.com/question/p-uiqwecwo-mh.html" target="_blank" title="Rechercher des chaînes dans une chaîne et créer un tableau"> Rechercher des chaînes dans une chaîne et créer un tableau </a> </li> <li> 14. <a href="http://fr.voidcc.com/question/p-xxtcoyup-vs.html" target="_blank" title="Comment suivre et rechercher des coordonnées dans un tableau 2d"> Comment suivre et rechercher des coordonnées dans un tableau 2d </a> </li> <li> 15. <a href="http://fr.voidcc.com/question/p-buqsatnk-he.html" target="_blank" title="rechercher et remplacer des mots dans un tableau de cellules"> rechercher et remplacer des mots dans un tableau de cellules </a> </li> <li> 16. <a href="http://fr.voidcc.com/question/p-bwojwesu-vv.html" target="_blank" title="Remplir un tableau avec des entiers entrants"> Remplir un tableau avec des entiers entrants </a> </li> <li> 17. <a href="http://fr.voidcc.com/question/p-qcescyik-bd.html" target="_blank" title="rechercher dans un tableau"> rechercher dans un tableau </a> </li> <li> 18. <a href="http://fr.voidcc.com/question/p-uihxmhjq-ku.html" target="_blank" title="Rechercher et remplacer dans un tableau"> Rechercher et remplacer dans un tableau </a> </li> <li> 19. <a href="http://fr.voidcc.com/question/p-hdtowdkc-ez.html" target="_blank" title="Rechercher un tableau"> Rechercher un tableau </a> </li> <li> 20. <a href="http://fr.voidcc.com/question/p-agzwexyd-ct.html" target="_blank" title="Créer un tableau de correspondances regex"> Créer un tableau de correspondances regex </a> </li> <li> 21. <a href="http://fr.voidcc.com/question/p-pmykuzks-md.html" target="_blank" title="Nombre de correspondances dans un tableau"> Nombre de correspondances dans un tableau </a> </li> <li> 22. <a href="http://fr.voidcc.com/question/p-zxnttgtz-ee.html" target="_blank" title="Comment rechercher un tableau avec un tableau?"> Comment rechercher un tableau avec un tableau? </a> </li> <li> 23. <a href="http://fr.voidcc.com/question/p-moqjibae-he.html" target="_blank" title="Même tableau, différentes correspondances (Doctrine)"> Même tableau, différentes correspondances (Doctrine) </a> </li> <li> 24. <a href="http://fr.voidcc.com/question/p-alrncblw-vx.html" target="_blank" title="binaire Rechercher un tableau"> binaire Rechercher un tableau </a> </li> <li> 25. <a href="http://fr.voidcc.com/question/p-ehqcngud-dr.html" target="_blank" title="rechercher un tableau dans un tableau"> rechercher un tableau dans un tableau </a> </li> <li> 26. <a href="http://fr.voidcc.com/question/p-kctdpqqz-vr.html" target="_blank" title="Ajouter des correspondances du tableau à la liste"> Ajouter des correspondances du tableau à la liste </a> </li> <li> 27. <a href="http://fr.voidcc.com/question/p-qlrlxshi-km.html" target="_blank" title="Comment rechercher un tableau intégré"> Comment rechercher un tableau intégré </a> </li> <li> 28. <a href="http://fr.voidcc.com/question/p-rabhebge-ec.html" target="_blank" title="Rechercher un tableau multidimensionnel php"> Rechercher un tableau multidimensionnel php </a> </li> <li> 29. <a href="http://fr.voidcc.com/question/p-eropitxj-gg.html" target="_blank" title="Rechercher des valeurs dans un tableau et placer les résultats dans un autre tableau jquery"> Rechercher des valeurs dans un tableau et placer les résultats dans un autre tableau jquery </a> </li> <li> 30. <a href="http://fr.voidcc.com/question/p-mccwmzqs-dm.html" target="_blank" title="Remplir le tableau avec un autre tableau"> Remplir le tableau avec un autre tableau </a> </li> </ul> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515422260"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Dernière question </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://fr.voidcc.com/question/p-vctbksoa-bky.html" target="_blank" title="complexité temporelle des IF imbriquées"> complexité temporelle des IF imbriquées </a> </li> <li class="side_article_list_item"> 2. <a href="http://fr.voidcc.com/question/p-hhwgzzwl-bky.html" target="_blank" title="J'essaie de faire un appel système dans Ubuntu 12.04.1. Je cours une erreur en compilant mon fichier hello.c"> J'essaie de faire un appel système dans Ubuntu 12.04.1. Je cours une erreur en compilant mon fichier hello.c </a> </li> <li class="side_article_list_item"> 3. <a href="http://fr.voidcc.com/question/p-qehaubpg-bky.html" target="_blank" title="scintille d'animation et l'évolution des sprites dans monogame"> scintille d'animation et l'évolution des sprites dans monogame </a> </li> <li class="side_article_list_item"> 4. <a href="http://fr.voidcc.com/question/p-fgawoyzd-bkw.html" target="_blank" title="Imprimer chaque élément d'une CArray"> Imprimer chaque élément d'une CArray </a> </li> <li class="side_article_list_item"> 5. <a href="http://fr.voidcc.com/question/p-rlsaqskl-bkw.html" target="_blank" title="Langage R - Pracma - findpeaks - Recherche des pics maintenus dans les données de séries temporelles"> Langage R - Pracma - findpeaks - Recherche des pics maintenus dans les données de séries temporelles </a> </li> <li class="side_article_list_item"> 6. <a href="http://fr.voidcc.com/question/p-pwfjzlyv-bkx.html" target="_blank" title="en passant un double pointeur dans une fonction et en lui assignant une adresse d'un pointeur local à une fonction"> en passant un double pointeur dans une fonction et en lui assignant une adresse d'un pointeur local à une fonction </a> </li> <li class="side_article_list_item"> 7. <a href="http://fr.voidcc.com/question/p-wdbdktvr-bkx.html" target="_blank" title="Reconnaître un nombre est tapé deux fois de suite"> Reconnaître un nombre est tapé deux fois de suite </a> </li> <li class="side_article_list_item"> 8. <a href="http://fr.voidcc.com/question/p-hnrmhsaf-bkx.html" target="_blank" title="Logo Centre entre deux onglets"> Logo Centre entre deux onglets </a> </li> <li class="side_article_list_item"> 9. <a href="http://fr.voidcc.com/question/p-rpcivzcl-bkx.html" target="_blank" title="Comment lire ce code python en PHP?"> Comment lire ce code python en PHP? </a> </li> <li class="side_article_list_item"> 10. <a href="http://fr.voidcc.com/question/p-fapnufox-bky.html" target="_blank" title="Modification d'un fichier texte pour tout supprimer avant un certain caractère"> Modification d'un fichier texte pour tout supprimer avant un certain caractère </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Questions connexes</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://fr.voidcc.com/question/p-emejbjpm-vh.html" target="_blank" title="Rechercher et supprimer des correspondances de tableau motifs"> Rechercher et supprimer des correspondances de tableau motifs </a> </li> <li class="side_article_list_item"> 2. <a href="http://fr.voidcc.com/question/p-yzgtmioy-ho.html" target="_blank" title="Rechercher un tableau et supprimer des entrées"> Rechercher un tableau et supprimer des entrées </a> </li> <li class="side_article_list_item"> 3. <a href="http://fr.voidcc.com/question/p-eemqsira-dy.html" target="_blank" title="Comment créer une requête sql pour rechercher des correspondances partielles?"> Comment créer une requête sql pour rechercher des correspondances partielles? </a> </li> <li class="side_article_list_item"> 4. <a href="http://fr.voidcc.com/question/p-eoyspdie-ct.html" target="_blank" title="Powershell - Comment rechercher des mots entiers (ou) des correspondances exactes"> Powershell - Comment rechercher des mots entiers (ou) des correspondances exactes </a> </li> <li class="side_article_list_item"> 5. <a href="http://fr.voidcc.com/question/p-owjgamom-bd.html" target="_blank" title="perl Obtenir les index des correspondances dans le tableau"> perl Obtenir les index des correspondances dans le tableau </a> </li> <li class="side_article_list_item"> 6. <a href="http://fr.voidcc.com/question/p-uzrvchwh-mb.html" target="_blank" title="Rails - Rechercher des correspondances dans le modèle de relation"> Rails - Rechercher des correspondances dans le modèle de relation </a> </li> <li class="side_article_list_item"> 7. <a href="http://fr.voidcc.com/question/p-ypvafgkd-ew.html" target="_blank" title="Remplir un tableau"> Remplir un tableau </a> </li> <li class="side_article_list_item"> 8. <a href="http://fr.voidcc.com/question/p-prsndzms-gb.html" target="_blank" title="Inclure des correspondances partielles dans SQLite FTS3 Rechercher"> Inclure des correspondances partielles dans SQLite FTS3 Rechercher </a> </li> <li class="side_article_list_item"> 9. <a href="http://fr.voidcc.com/question/p-qakdnbvc-vb.html" target="_blank" title="Github rechercher des correspondances dans différents noms de fichiers"> Github rechercher des correspondances dans différents noms de fichiers </a> </li> <li class="side_article_list_item"> 10. <a href="http://fr.voidcc.com/question/p-pkhonvoy-k.html" target="_blank" title="Comment rechercher efficacement un tableau pour remplir des champs de formulaire?"> Comment rechercher efficacement un tableau pour remplir des champs de formulaire? </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://fr.voidcc.com/contact">Nous contacter</a></li> <li>© 2020 FR.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>