php - 使用 php 正则表达式解析 block

标签 php regex block

我正在尝试用 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/

相关文章:

php - 使用 PHP-FPM 时可以覆盖 htaccess 中的 PHP 设置吗?

php - mysql 查询未返回正确的百分比

regex - Solr:使用正则表达式片段提取段落

javascript - 如何使用正则表达式使用数据表进行多值或列搜索?

symfony - 无法将扩展 Twig 模板 block 覆盖为空

php - 如何 "un-slug"标题 slug

javascript - JS 正则表达式验证帮助

ruby - RSpec -- 测试方法是否调用了它的 block 参数

mysql - 交易陷阱 22

javascript - 带有确认对话框的功能