使用正則表達式來檢測標簽是否關閉

en9 10年前發布 | 1K 次閱讀 PHP

function check_html($html) {
    preg_match_all("/<([a-zA-Z0-9]+)\\s*[^\\/>]*>/",$html,$start_tags);
    preg_match_all("/<\\/([a-zA-Z0-9]+)>/", $html, $end_tags);
    if(count($start_tags[1]) != count($end_tags[1])) return false;
    for($i = 0; $i < count($start_tags[1]); $i++) {
        if(!in_array($start_tags[1][$i], $end_tags[1])) return false;
    }
    return true;
}

解釋:

/<([a-zA-Z0-9]+)\\s*[^\\/>]*>/這個模式是用來匹配HTML的標記(如:<head>、<div>、<div id="main">等等,但是除了<br/>這種)的,并且在$start_tags保持著標簽的名字(如:head、div等)。而/<\\/([a-zA-Z0-9]+)>/這個模式是用來匹配閉合的HTML標記(如:</head>,</div>等)的。并且在$end_tags中保持這閉合的標簽名。然后我們用count($start_tags[1]) != count($end_tags[1])這個條件語句來判斷開始的標記跟閉合的標記是否相等,不相等就說明沒閉合。最后用in_array($start_tags[1][$i], $end_tags[1])來判斷開始標跟閉合的標記是否相等。至此,我們就完成了HTML的匹配了!

 本文由用戶 en9 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!