php表达式块,使用php正则表达式解析块

我正在尝试用PHP写一个(我认为)非常简单的RegEx,但它不起作用.

基本上我有一个像这样定义的块:

%%%%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,regex,block

来源: https://codeday.me/bug/20190726/1542744.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值