2016-04-08 68 views
0

我有一個包含這些數據的TXT文件:無法的preg_match標記內容​​

<!-- block_Inspekcionnye_proverki1000_1 -->some arbitrary data 
<!-- end_block_Inspekcionnye_proverki1000_1 --> other data and other tags 

然而,當我試圖將此內容與正則表達式匹配,我什麼也沒有 - 只是一個空數組。這是我有:

$regex = "`<!-- block_Inspekcionnye_proverki1000_1 -->(.*)<!-- end_block_Inspekcionnye_proverki1000_1 -->`"; 
$text = file_get_contents("txt.txt"); 
preg_match($regex, $text, $matches); 
echo strpos($text, "<!-- block_Inspekcionnye_proverki1000_1 -->") . "<BR/>"; 
echo strpos($text, "<!-- end_block_Inspekcionnye_proverki1000_1 -->") . "<BR/>"; 
print_r($matches); 

結果我得到:

1178 
59172 
Array () 

所以,你可以看到的確有<!-- block_Inspekcionnye_proverki1000_1 -->標籤 - 它開始於指數1178。結尾標記<!-- end_block_Inspekcionnye_proverki1000_1 -->開始於索引59172。但爲什麼$matches是空的?如果我做錯了什麼,使用preg_match獲得標籤及其內容的正確方法是什麼?

+0

這是由於'\這個'((。| \\ n)*)'而不是'(。*)'.. 在這裏檢查: - https://regex101.com/r/kB5vC2/1 – rock321987

+0

你可以使用'backreference'如下所示: - 簡單的http://ideone.com/1ivkFI – rock321987

+2

@ rock321987解決方案的替代方案是在你的正則表達式中包含's'模式修飾符,如下所示:'$ regex =「\'<! - block_Inspekcionnye_proverki1000_1 - >(。*)<! - end_block_Inspekcionnye_proverki1000_1 - > \「s」;'。這將使點也匹配換行符。 –

回答

1

使用正則表達式正向後看?<=)和正先行溶液(?=)斷言

$str = "<!-- block_Inspekcionnye_proverki1000_1 -->some arbitrary data 
<!-- end_block_Inspekcionnye_proverki1000_1 --> other data and other tag"; 

preg_match("/(?<=-->)[\w ]+?\R?(?=<!--)/su", $str, $matches); 

print_r($matches); 

輸出:

Array 
(
    [0] => some arbitrary data 

) 
+0

給出的'flags'偉大的解決方案!謝謝! – Jacobian

+0

@Jacobian,不客氣 – RomanPerekhrest