當PHP解析一個文件時,會尋找開始<?php和結束標記?>,標記告訴PHP開始和停止解釋其中的代碼。此種方式的解析可以使PHP嵌入到各種不同的文檔中,凡是在一對開始和結束標記之外的內容都會被PHP解析器忽略。大多數情況下PHP都是嵌入在HTML文檔中的。 單行注釋僅僅注釋到行末或者當前的 PHP 代碼塊,視乎哪個首先出現。這意味著在 // ... ?> 或者 # ... ?>之後的 HTML 代碼將被顯示出來:?> 跳出了 PHP 模式並返回了 HTML 模式,// 或 #並不能影響到這一點。 由以上討論可可知,即使?>出現在//注釋中,PHP解析器也會認為PHP解析結束(當 PHP 碰到結束標記 ?> 時,就簡單地將其後的內容原樣輸出( 除非其後緊接著一個新行,參見指令分隔符)直到碰到下一個開始標記為止)。 <?php //$a = '<a href="test.html" title="#">test</a><a href="test.html" title="#">test</a>'; //preg_match_all('|<a[^>]+href="([^\"]*)".*?>|', $a, $b); //print_r($b); 輸出為: :!php preg.php |', $a, $b); //print_r($b);www.2cto.com 如何修正上述問題呢?或者你使用/* */進行注釋,或者將?>用字符串連接符進行連接,如下: <?php $a = '<a href="test.html" title="#">test</a><a href="test.html" title="#">test</a>'; preg_match_all('|<a[^>]+href="([^\"]*)".*?'.'>|', $a, $b); print_r($b); 這一細節同樣適用於JS結束標簽</script>