我有一个包含此类数据的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
获取标记及其内容的正确方法是什么?
答案 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
)