Regex kullanarak PHP yorumlarınızı maç için çalışıyor ive.
//([^<]+)\r\n
Ive var ama gerçekten işe yaramazsa ne Thats.
Ive da çalıştı
//([^<]+)\r
//([^<]+)\n
//([^<]+)
... Boşuna
Ne program size bu regex kodlama? Eğer satır karakter çalışma olmadığını endişeli iseniz son örneği iyi bir aklı kontrol edilir. (Ben az daha yorumunuzda izin vermez neden hiçbir fikrim yok. Ben sizin uygulamaya özgü olduğunu varsayıyorum)
Denemek
//[^<]+
İşe yarayıp yaramadığını görmek. DRAEMON diyor, sen diyagonalleri kaçmak zorunda kalabilirsiniz. Ayrıca parantez kaçmak zorunda kalabilirsiniz. Bunu biliyorum söyleyemem, ancak parantezler sık kapamak için kullanılır capturing groups. Son olarak, en az bir karakter çift bölü sonra gerçekten var olup olmadığını kontrol edin.
Yorum eşleştirmek için, PHP 5 yorumların iki türü vardır düşünmek zorunda:
//
ile başlar ve satır sonuna gitmek comments/*
ile başlar ve */
gitmek commentsÖncelikle bu iki hattınız düşünüyor:
$filePath = '/home/squale/developpement/astralblog/website/library/HTMLPurifier.php';
$str = file_get_contents($filePath);
Sizinle ilk olanları maç olabilir:
$matches_slashslash = array();
if (preg_match_all('#//(.*)$#m', $str, $matches_slashslash)) {
var_dump($matches_slashslash[1]);
}
Ve ikinci olanlar ile:
$matches_slashstar = array();
if (preg_match_all('#/\*(.*?)\*/#sm', $str, $matches_slashstar)) {
var_dump($matches_slashstar[1]);
}
Ama muhtemelen (what about heredoc syntax, btw, did you think about that one ? )
dize ortasında '//
' ile sıkıntılar içine almak, ya da böyle "yorumlar geçiş" olacak:
/*
echo 'a';
/*/
echo 'b';
//*/
(Just add a slash at the begining to "toggle" the two blocks, if you don't know the trick)
Yani ... Sadece regex ile yorumlarını tespit etmek oldukça zor ...
Başka bir yol belli, PHP kodu ve yorum ayrıştırmak için nasıl bilir ki, PHP Tokenizer kullanmak olacaktır.
Referanslar için bakınız:
Bunun üzerine, PHP kod sizin dize dizgeciklerini kullanmak gerekir Eğer bir sonucu olarak olsun tüm belirteçleri üzerinde yineleme ve olanları yorumlar hangi algılar.
Böyle bir şey muhtemelen yapacağını:
$tokens = token_get_all($str);
foreach ($tokens as $token) {
if ($token[0] == T_COMMENT
|| $token[0] == T_DOC_COMMENT) {
// This is a comment ;-)
var_dump($token);
}
}
Ve çıktı gibi, böyle şeyler bir listesini alırsınız:
array
0 => int 366
1 => string '/** Version of HTML Purifier */' (length=31)
2 => int 57
ya da bu:
array
0 => int 365
1 => string '// :TODO: make the config merge in, instead of replace
' (length=55)
2 => int 117
(You "just" might to strip the //
ve /* */
, ama bu size kalmış; en azından, yorum ayıkladıktan ^ ^) em>
Eğer gerçekten nedeniyle "garip" sözdizimi tuhaf hata her türlü olmadan yorum algılamak istiyorsanız, bu gitmek için yol olurdu herhalde ;-)