2013-05-13 63 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="//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">相關問題</div> <ul class="relative_list"> <li> 1. <a href="http://hk.voidcc.com/question/p-xqfpsbrx-uz.html" target="_blank" title="填充數組時類型不匹配"> 填充數組時類型不匹配 </a> </li> <li> 2. <a href="http://hk.voidcc.com/question/p-silsrtjx-cz.html" target="_blank" title="貓鼬查詢填充查找元素的匹配id"> 貓鼬查詢填充查找元素的匹配id </a> </li> <li> 3. <a href="http://hk.voidcc.com/question/p-klddowma-gg.html" target="_blank" title="C#在數組中查找匹配"> C#在數組中查找匹配 </a> </li> <li> 4. <a href="http://hk.voidcc.com/question/p-uywiezhf-t.html" target="_blank" title="vLookup匹配不同的查找數組"> vLookup匹配不同的查找數組 </a> </li> <li> 5. <a href="http://hk.voidcc.com/question/p-eltlxhsn-wa.html" target="_blank" title="自動填充數組與空數據來匹配另一個數組大小"> 自動填充數組與空數據來匹配另一個數組大小 </a> </li> <li> 6. <a href="http://hk.voidcc.com/question/p-mvbjmicv-et.html" target="_blank" title="參考檢查。查找,匹配,組合"> 參考檢查。查找,匹配,組合 </a> </li> <li> 7. <a href="http://hk.voidcc.com/question/p-whvvqcjs-uk.html" target="_blank" title="查找匹配"> 查找匹配 </a> </li> <li> 8. <a href="http://hk.voidcc.com/question/p-qzemeajr-em.html" target="_blank" title="索引匹配,其中查找值在查找數組中"> 索引匹配,其中查找值在查找數組中 </a> </li> <li> 9. <a href="http://hk.voidcc.com/question/p-yjsrdexw-go.html" target="_blank" title="SQL查找某些ID和填充"> SQL查找某些ID和填充 </a> </li> <li> 10. <a href="http://hk.voidcc.com/question/p-brzxidfa-ur.html" target="_blank" title="查找Excel電子表格和VBA數組之間的匹配"> 查找Excel電子表格和VBA數組之間的匹配 </a> </li> <li> 11. <a href="http://hk.voidcc.com/question/p-giqecizh-td.html" target="_blank" title="查找和返回完全匹配(重複)在JavaScript數組"> 查找和返回完全匹配(重複)在JavaScript數組 </a> </li> <li> 12. <a href="http://hk.voidcc.com/question/p-vrzkpwpl-vc.html" target="_blank" title="使用async/await和promise查找數組中的匹配元素"> 使用async/await和promise查找數組中的匹配元素 </a> </li> <li> 13. <a href="http://hk.voidcc.com/question/p-oaezwwxc-ke.html" target="_blank" title="查找有多少數字數組被填充?"> 查找有多少數字數組被填充? </a> </li> <li> 14. <a href="http://hk.voidcc.com/question/p-gcuaddpc-ev.html" target="_blank" title="分配一個數組並填充它"> 分配一個數組並填充它 </a> </li> <li> 15. <a href="http://hk.voidcc.com/question/p-dodvjfyi-su.html" target="_blank" title="匹配和查找以找到價格"> 匹配和查找以找到價格 </a> </li> <li> 16. <a href="http://hk.voidcc.com/question/p-onabquaz-uk.html" target="_blank" title="Python - 用零填充和填充列表以匹配另一個列表"> Python - 用零填充和填充列表以匹配另一個列表 </a> </li> <li> 17. <a href="http://hk.voidcc.com/question/p-qshvbhtl-qz.html" target="_blank" title="貓鼬填充不填充數組"> 貓鼬填充不填充數組 </a> </li> <li> 18. <a href="http://hk.voidcc.com/question/p-dnpymmxv-q.html" target="_blank" title="如何填充缺失的匹配值"> 如何填充缺失的匹配值 </a> </li> <li> 19. <a href="http://hk.voidcc.com/question/p-kfakgvhg-nr.html" target="_blank" title="Android自動填充匹配選項"> Android自動填充匹配選項 </a> </li> <li> 20. <a href="http://hk.voidcc.com/question/p-qbewppmc-ry.html" target="_blank" title="查找組相匹配的行"> 查找組相匹配的行 </a> </li> <li> 21. <a href="http://hk.voidcc.com/question/p-kmmsqynh-uk.html" target="_blank" title="填充numpy數組"> 填充numpy數組 </a> </li> <li> 22. <a href="http://hk.voidcc.com/question/p-vbocohcs-ss.html" target="_blank" title="填充3D數組"> 填充3D數組 </a> </li> <li> 23. <a href="http://hk.voidcc.com/question/p-alfwnota-tk.html" target="_blank" title="VB.Net - 填充數組"> VB.Net - 填充數組 </a> </li> <li> 24. <a href="http://hk.voidcc.com/question/p-yebfwwpq-bg.html" target="_blank" title="從填充符上的非貪婪匹配中獲取匹配"> 從填充符上的非貪婪匹配中獲取匹配 </a> </li> <li> 25. <a href="http://hk.voidcc.com/question/p-ythmipar-x.html" target="_blank" title="使用cfloop查詢填充數組"> 使用cfloop查詢填充數組 </a> </li> <li> 26. <a href="http://hk.voidcc.com/question/p-xlbxiuxf-bm.html" target="_blank" title="PHP從MySql查詢填充數組"> PHP從MySql查詢填充數組 </a> </li> <li> 27. <a href="http://hk.voidcc.com/question/p-fjnradfd-vu.html" target="_blank" title="foreaching數組和匹配?"> foreaching數組和匹配? </a> </li> <li> 28. <a href="http://hk.voidcc.com/question/p-rncrtszr-us.html" target="_blank" title="通過匹配字符串和通配符來查找數組元素"> 通過匹配字符串和通配符來查找數組元素 </a> </li> <li> 29. <a href="http://hk.voidcc.com/question/p-mqsfsegu-do.html" target="_blank" title="使用odbc適配器和out循環填充數組"> 使用odbc適配器和out循環填充數組 </a> </li> <li> 30. <a href="http://hk.voidcc.com/question/p-fbqetild-gp.html" target="_blank" title="查找兩個數組中的匹配數字"> 查找兩個數組中的匹配數字 </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=1652515421930"></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"> 最新問題 </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.voidcc.com/question/p-kkyyasdp-bbo.html" target="_blank" title="Asp.net +剃刀2 + MySQL的&的iFrame顯示"> Asp.net +剃刀2 + MySQL的&的iFrame顯示 </a> </li> <li class="side_article_list_item"> 2. <a href="http://hk.voidcc.com/question/p-vajwtzyn-bax.html" target="_blank" title="DNS/Route53 - 配置記錄並處理www"> DNS/Route53 - 配置記錄並處理www </a> </li> <li class="side_article_list_item"> 3. <a href="http://hk.voidcc.com/question/p-umzqtywi-bca.html" target="_blank" title="電話號碼沒有得到驗證的JavaScript"> 電話號碼沒有得到驗證的JavaScript </a> </li> <li class="side_article_list_item"> 4. <a href="http://hk.voidcc.com/question/p-sksjngtc-bbd.html" target="_blank" title="的Symfony2在督促"> 的Symfony2在督促 </a> </li> <li class="side_article_list_item"> 5. <a href="http://hk.voidcc.com/question/p-cmirmwwk-ut.html" target="_blank" title="斯卡拉隱式轉換爲有效宏內的一元值"> 斯卡拉隱式轉換爲有效宏內的一元值 </a> </li> <li class="side_article_list_item"> 6. <a href="http://hk.voidcc.com/question/p-gcnjjcqg-us.html" target="_blank" title="Swift 4和Firebase中的信號量建議"> Swift 4和Firebase中的信號量建議 </a> </li> <li class="side_article_list_item"> 7. <a href="http://hk.voidcc.com/question/p-hntamcdm-us.html" target="_blank" title="如何在應用程序啓動期間獲取位置"> 如何在應用程序啓動期間獲取位置 </a> </li> <li class="side_article_list_item"> 8. <a href="http://hk.voidcc.com/question/p-fuccwdsl-ur.html" target="_blank" title="什麼讓使用PHP的preg_match"> 什麼讓使用PHP的preg_match </a> </li> <li class="side_article_list_item"> 9. <a href="http://hk.voidcc.com/question/p-cwpqmdrp-ur.html" target="_blank" title="你好我正在使用離子科爾多瓦"> 你好我正在使用離子科爾多瓦 </a> </li> <li class="side_article_list_item"> 10. <a href="http://hk.voidcc.com/question/p-vgooxoga-bbu.html" target="_blank" title="如何將雙緯和雙經度設置爲數組"> 如何將雙緯和雙經度設置爲數組 </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.voidcc.com/question/p-xqfpsbrx-uz.html" target="_blank" title="填充數組時類型不匹配"> 填充數組時類型不匹配 </a> </li> <li class="side_article_list_item"> 2. <a href="http://hk.voidcc.com/question/p-silsrtjx-cz.html" target="_blank" title="貓鼬查詢填充查找元素的匹配id"> 貓鼬查詢填充查找元素的匹配id </a> </li> <li class="side_article_list_item"> 3. <a href="http://hk.voidcc.com/question/p-klddowma-gg.html" target="_blank" title="C#在數組中查找匹配"> C#在數組中查找匹配 </a> </li> <li class="side_article_list_item"> 4. <a href="http://hk.voidcc.com/question/p-uywiezhf-t.html" target="_blank" title="vLookup匹配不同的查找數組"> vLookup匹配不同的查找數組 </a> </li> <li class="side_article_list_item"> 5. <a href="http://hk.voidcc.com/question/p-eltlxhsn-wa.html" target="_blank" title="自動填充數組與空數據來匹配另一個數組大小"> 自動填充數組與空數據來匹配另一個數組大小 </a> </li> <li class="side_article_list_item"> 6. <a href="http://hk.voidcc.com/question/p-mvbjmicv-et.html" target="_blank" title="參考檢查。查找,匹配,組合"> 參考檢查。查找,匹配,組合 </a> </li> <li class="side_article_list_item"> 7. <a href="http://hk.voidcc.com/question/p-whvvqcjs-uk.html" target="_blank" title="查找匹配"> 查找匹配 </a> </li> <li class="side_article_list_item"> 8. <a href="http://hk.voidcc.com/question/p-qzemeajr-em.html" target="_blank" title="索引匹配,其中查找值在查找數組中"> 索引匹配,其中查找值在查找數組中 </a> </li> <li class="side_article_list_item"> 9. <a href="http://hk.voidcc.com/question/p-yjsrdexw-go.html" target="_blank" title="SQL查找某些ID和填充"> SQL查找某些ID和填充 </a> </li> <li class="side_article_list_item"> 10. <a href="http://hk.voidcc.com/question/p-brzxidfa-ur.html" target="_blank" title="查找Excel電子表格和VBA數組之間的匹配"> 查找Excel電子表格和VBA數組之間的匹配 </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.voidcc.com/contact">聯系我們</a></li> <li>© 2020 HK.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>