我正在尝试用 PHP 编写一个(我认为)非常简单的 RegEx,但它不起作用。 基本上我有一个这样定义的 block :
%%%%blockname%%%%
stuff goes here
%%%%/blockname%%%%
我不太擅长 RegEx,但这是我尝试过的:
preg_match_all('/^%%%%(.*?)%%%%(.*?)%%%%\/(.*?)%%%%$/i',$input,$matches);
它返回一个包含 4 个空条目的数组。
我想除了实际工作之外,第三场比赛还需要某种指针,因为它应该等于第一场比赛?
请赐教:)
最佳答案
您需要允许点匹配换行符,并允许 ^
和 $
匹配行的开头和结尾(不仅仅是整个字符串):
preg_match_all('/^%%%%(.*?)%%%%(.*?)%%%%\/(.*?)%%%%$/sm',$input,$matches);
s
(单行)选项使点匹配任何字符,包括换行符。
m
(多行)选项允许 ^
和 $
在行的开头和结尾匹配。
i
选项在您的正则表达式中是不必要的,因为其中没有区分大小写的字符。
然后,回答问题的第二部分:如果 blockname
在两种情况下都相同,那么您可以通过使用对第一个捕获组的反向引用来使其明确:
preg_match_all('/^%%%%(.*?)%%%%(.*?)%%%%\/\1%%%%$/sm',$input,$matches);
关于php - 使用 php 正则表达式解析 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303318/