2013-05-13 77 views
1

我試圖建立一個過濾器函數,使編輯器用戶可以輕鬆地編寫html。查找匹配和填充數組

的用戶要輸入文字是這樣的:

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. 

注意,手風琴塊文本的其他部分之間出現,且都出現在多次出現。

我正在使用模板來主題手風琴,所以我希望手風琴結構化爲數組,然後將主題手風琴注入文本中的正確位置。

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 
     ) 

) 

我一直在搞preg_replace_callback,但我真的找不到正確的方式來做到這一點。

到目前爲止,我一直都在做這樣的:

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)); 

} 

主題()函數傳遞數組到HTML模板。我命名的函數lolfunction(),因爲我曾希望在短短的一個功能format_accordion():)一切

+0

才能真正爲你的用戶更容易當他們可以使用標準XML(甚至是HTML)來標記文本時,寫{{accordion}} {{title}} {{body}}?如果您使用XML('<body>'),則不需要編寫自定義分析器。 – <span class="text-secondary"> <small> <span>2013-05-13 20:15:26</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">我不想讓他們寫html,這意味着他們必須寫類,也就是說。但是,讓他們編寫xml也許是個好主意。但是,我仍然必須用html +類替換xml標記。有任何想法嗎? – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1120186/">tolborg</a></span> <span>2013-05-13 20:22:06</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">除了它的其他方式。我有一個字符串。然後將匹配轉換爲數組。然後將數組格式化爲新的字符串。然後將新字符串注入原始文本。 – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1120186/">tolborg</a></span> <span>2013-05-13 20:27:12</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">回答</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>好吧,我終於實現了這一點:</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">來源</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">這絕對是我能想到的最直接的方式:) – <span class="text-secondary"> <small> <span>2013-05-13 22:04:15</span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" 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">相關問題</div> <ul class="relative_list"> <li> 1. <a href="http://hk.uwenku.com/question/p-ckrsweti-bgy.html" target="_blank" title="填充數組時類型不匹配"> 填充數組時類型不匹配 </a> </li> <li> 2. <a href="http://hk.uwenku.com/question/p-mnqwmixt-kp.html" target="_blank" title="貓鼬查詢填充查找元素的匹配id"> 貓鼬查詢填充查找元素的匹配id </a> </li> <li> 3. <a href="http://hk.uwenku.com/question/p-akbvtlcu-hy.html" target="_blank" title="XSLT匹配元素和填充"> XSLT匹配元素和填充 </a> </li> <li> 4. <a href="http://hk.uwenku.com/question/p-xmqhdkce-rg.html" target="_blank" title="在R中匹配和填充值"> 在R中匹配和填充值 </a> </li> <li> 5. <a href="http://hk.uwenku.com/question/p-qnkrtbrp-dm.html" target="_blank" title="Mongoose字段匹配填充"> Mongoose字段匹配填充 </a> </li> <li> 6. <a href="http://hk.uwenku.com/question/p-yzdndabt-st.html" target="_blank" title="如何找到匹配JSON鍵和填充其他列"> 如何找到匹配JSON鍵和填充其他列 </a> </li> <li> 7. <a href="http://hk.uwenku.com/question/p-kavwssla-rn.html" target="_blank" title="C#在數組中查找匹配"> C#在數組中查找匹配 </a> </li> <li> 8. <a href="http://hk.uwenku.com/question/p-nmkzgqgp-yt.html" target="_blank" title="查找匹配值的數組鍵值"> 查找匹配值的數組鍵值 </a> </li> <li> 9. <a href="http://hk.uwenku.com/question/p-shmhbwki-bs.html" target="_blank" title="vLookup匹配不同的查找數組"> vLookup匹配不同的查找數組 </a> </li> <li> 10. <a href="http://hk.uwenku.com/question/p-yrfxtxxg-xw.html" target="_blank" title="在數組字段中查找匹配"> 在數組字段中查找匹配 </a> </li> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4606349252"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <li> 11. <a href="http://hk.uwenku.com/question/p-cytyrvzh-go.html" target="_blank" title="SQL中的列匹配數據填充"> SQL中的列匹配數據填充 </a> </li> <li> 12. <a href="http://hk.uwenku.com/question/p-dyzwzvhy-cd.html" target="_blank" title="查找列和matlab匹配"> 查找列和matlab匹配 </a> </li> <li> 13. <a href="http://hk.uwenku.com/question/p-eozmllkz-qb.html" target="_blank" title="BufferedReader和填充int數組"> BufferedReader和填充int數組 </a> </li> <li> 14. <a href="http://hk.uwenku.com/question/p-zyeokuel-t.html" target="_blank" title="Java在匹配遊戲中隨機填充數組"> Java在匹配遊戲中隨機填充數組 </a> </li> <li> 15. <a href="http://hk.uwenku.com/question/p-dusqjkqy-px.html" target="_blank" title="參考檢查。查找,匹配,組合"> 參考檢查。查找,匹配,組合 </a> </li> <li> 16. <a href="http://hk.uwenku.com/question/p-xlrofkzc-bho.html" target="_blank" title="自動填充數組與空數據來匹配另一個數組大小"> 自動填充數組與空數據來匹配另一個數組大小 </a> </li> <li> 17. <a href="http://hk.uwenku.com/question/p-ugxkftfv-xp.html" target="_blank" title="查找匹配"> 查找匹配 </a> </li> <li> 18. <a href="http://hk.uwenku.com/question/p-gikdiuxl-pc.html" target="_blank" title="索引匹配,其中查找值在查找數組中"> 索引匹配,其中查找值在查找數組中 </a> </li> <li> 19. <a href="http://hk.uwenku.com/question/p-tppxkcqq-sx.html" target="_blank" title="填充數組"> 填充數組 </a> </li> <li> 20. <a href="http://hk.uwenku.com/question/p-hhtqawex-bhp.html" target="_blank" title="填充數組"> 填充數組 </a> </li> <li> 21. <a href="http://hk.uwenku.com/question/p-fuudzadc-zq.html" target="_blank" title="填充數組"> 填充數組 </a> </li> <li> 22. <a href="http://hk.uwenku.com/question/p-bzcwoelg-sc.html" target="_blank" title="SQL查找某些ID和填充"> SQL查找某些ID和填充 </a> </li> <li> 23. <a href="http://hk.uwenku.com/question/p-yvqyjmzq-bkk.html" target="_blank" title="使用async/await和promise查找數組中的匹配元素"> 使用async/await和promise查找數組中的匹配元素 </a> </li> <li> 24. <a href="http://hk.uwenku.com/question/p-rowtqynq-d.html" target="_blank" title="查找和返回完全匹配(重複)在JavaScript數組"> 查找和返回完全匹配(重複)在JavaScript數組 </a> </li> <li> 25. <a href="http://hk.uwenku.com/question/p-yhbnkpqx-bax.html" target="_blank" title="查找Excel電子表格和VBA數組之間的匹配"> 查找Excel電子表格和VBA數組之間的匹配 </a> </li> <li> 26. <a href="http://hk.uwenku.com/question/p-pgqbdgie-bc.html" target="_blank" title="Mongo查找內部和對象數組的多個匹配"> Mongo查找內部和對象數組的多個匹配 </a> </li> <li> 27. <a href="http://hk.uwenku.com/question/p-hjlwizgl-vv.html" target="_blank" title="查找有多少數字數組被填充?"> 查找有多少數字數組被填充? </a> </li> <li> 28. <a href="http://hk.uwenku.com/question/p-wjhrjuxs-qg.html" target="_blank" title="分配一個數組並填充它"> 分配一個數組並填充它 </a> </li> <li> 29. <a href="http://hk.uwenku.com/question/p-xkyujpuu-bno.html" target="_blank" title="匹配和查找以找到價格"> 匹配和查找以找到價格 </a> </li> <li> 30. <a href="http://hk.uwenku.com/question/p-kqnytfbk-oq.html" target="_blank" title="如何比較Laravel中的兩個數組填充匹配和不匹配值的選擇列表"> 如何比較Laravel中的兩個數組填充匹配和不匹配值的選擇列表 </a> </li> </ul> </div> <div> <script async src="https://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="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048261"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/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="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" 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"> 最新問題 </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://hk.uwenku.com/question/p-rqxqbnet-nq.html" target="_blank" title="大熊貓 - 在同一個數據幀"> 大熊貓 - 在同一個數據幀 </a> </li> <li class="side_article_list_item"> 2. <a href="http://hk.uwenku.com/question/p-xplytjbe-mv.html" target="_blank" title="最簡單的方式分發Tensorflow培訓的前提?"> 最簡單的方式分發Tensorflow培訓的前提? </a> </li> <li class="side_article_list_item"> 3. <a href="http://hk.uwenku.com/question/p-qumxhczl-ma.html" target="_blank" title="連接來自外部客戶端進程的kubernetes內作爲碼頭容器運行的點火服務器"> 連接來自外部客戶端進程的kubernetes內作爲碼頭容器運行的點火服務器 </a> </li> <li class="side_article_list_item"> 4. <a href="http://hk.uwenku.com/question/p-srhbjjlo-hn.html" target="_blank" title="使用Thymeleaf窗體構建POST請求"> 使用Thymeleaf窗體構建POST請求 </a> </li> <li class="side_article_list_item"> 5. <a href="http://hk.uwenku.com/question/p-psgzdntr-cy.html" target="_blank" title="如何通過控制器與MVC發送電子郵件"> 如何通過控制器與MVC發送電子郵件 </a> </li> <li class="side_article_list_item"> 6. <a href="http://hk.uwenku.com/question/p-vqbdnxxu-dt.html" target="_blank" title="替換VBA中的多個字符實例"> 替換VBA中的多個字符實例 </a> </li> <li class="side_article_list_item"> 7. <a href="http://hk.uwenku.com/question/p-dpipuaue-eo.html" target="_blank" title="node.js作爲服務移動+管理面板與角"> node.js作爲服務移動+管理面板與角 </a> </li> <li class="side_article_list_item"> 8. <a href="http://hk.uwenku.com/question/p-rrjogcxg-gg.html" target="_blank" title="平均年齡但不包括某些記錄"> 平均年齡但不包括某些記錄 </a> </li> <li class="side_article_list_item"> 9. <a href="http://hk.uwenku.com/question/p-gwigassx-bk.html" target="_blank" title="bash變量名使用變量"> bash變量名使用變量 </a> </li> <li class="side_article_list_item"> 10. <a href="http://hk.uwenku.com/question/p-mgegqkdf-cp.html" target="_blank" title="如何從Python字符串中刪除括號內的文本?"> 如何從Python字符串中刪除括號內的文本? </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> 相關問題</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://hk.uwenku.com/question/p-ckrsweti-bgy.html" target="_blank" title="填充數組時類型不匹配"> 填充數組時類型不匹配 </a> </li> <li class="side_article_list_item"> 2. <a href="http://hk.uwenku.com/question/p-mnqwmixt-kp.html" target="_blank" title="貓鼬查詢填充查找元素的匹配id"> 貓鼬查詢填充查找元素的匹配id </a> </li> <li class="side_article_list_item"> 3. <a href="http://hk.uwenku.com/question/p-akbvtlcu-hy.html" target="_blank" title="XSLT匹配元素和填充"> XSLT匹配元素和填充 </a> </li> <li class="side_article_list_item"> 4. <a href="http://hk.uwenku.com/question/p-xmqhdkce-rg.html" target="_blank" title="在R中匹配和填充值"> 在R中匹配和填充值 </a> </li> <li class="side_article_list_item"> 5. <a href="http://hk.uwenku.com/question/p-qnkrtbrp-dm.html" target="_blank" title="Mongoose字段匹配填充"> Mongoose字段匹配填充 </a> </li> <li class="side_article_list_item"> 6. <a href="http://hk.uwenku.com/question/p-yzdndabt-st.html" target="_blank" title="如何找到匹配JSON鍵和填充其他列"> 如何找到匹配JSON鍵和填充其他列 </a> </li> <li class="side_article_list_item"> 7. <a href="http://hk.uwenku.com/question/p-kavwssla-rn.html" target="_blank" title="C#在數組中查找匹配"> C#在數組中查找匹配 </a> </li> <li class="side_article_list_item"> 8. <a href="http://hk.uwenku.com/question/p-nmkzgqgp-yt.html" target="_blank" title="查找匹配值的數組鍵值"> 查找匹配值的數組鍵值 </a> </li> <li class="side_article_list_item"> 9. <a href="http://hk.uwenku.com/question/p-shmhbwki-bs.html" target="_blank" title="vLookup匹配不同的查找數組"> vLookup匹配不同的查找數組 </a> </li> <li class="side_article_list_item"> 10. <a href="http://hk.uwenku.com/question/p-yrfxtxxg-xw.html" target="_blank" title="在數組字段中查找匹配"> 在數組字段中查找匹配 </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://hk.uwenku.com/contact">聯系我們</a></li> <li>© 2020 HK.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>