无法preg_match标记的内容

时间:2016-04-08 18:54:33

标签: php regex

我有一个包含此类数据的txt文件:

<!-- 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获取标记及其内容的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

使用regexp 正面后视?<=)和正向前瞻(?=)断言的解决方案

$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

)