我的正则表达式存在一些问题:
if (preg_match_all('/{[a-z]+:ce_img:(single|pair)(\s.*)*}/', $files, $matches))
{
echo "ok";
}
出于某种原因,它会导致我的网站崩溃。当然,我已经尝试谷歌并发现了一些关于“灾难性回溯”的事情,虽然我不确定这是否是我的问题。
正则表达式应该给我{eggs:ce_img:single(或pair)到结尾}之间的所有内容
当我尝试更改或删除(单个|对)时,它只是正常运行。那应该是关于那个权利的事情吗?
我很确定$文件不是问题。
有人知道如何解决这个问题吗?
问候,Olcan
编辑: 这里有一个关于这个正则表达式应该如何工作的例子: image
答案 0 :(得分:1)
这应该有效:
{[a-z]+:ce_img:(?:single|pair)?([\w\W\s]+)*}
对于图片中显示的文字:
{eggs:ce_img:single
src="{src}"
fallback_src="/assets/a-b-c.jpg"
width="250"
height="250"
add_dims="no"
crop="yes"
title="{title}"
alt="{title}"
allow_scale_larger="yes"
}
你会得到:
Group 1 src="{src}"
fallback_src="/assets/a-b-c.jpg"
width="250"
height="250"
add_dims="no"
crop="yes"
title="{title}"
alt="{title}"
allow_scale_larger="yes"
在此处查看演示:https://regex101.com/r/uo9Kqi/1
答案 1 :(得分:1)
您的RegEx崩溃了您的网站(由于灾难性的回溯),因为您的输入文件至少包含其中一个:
{[a-z]+:ce_img:(?:single|pair)(?:\s+[\w-]+="[^"]*")*\s*}
类似。解决方案:
(?: # Start of non-capturing group (a)
\s+[\w-]+="[^"]*" # Match similar following string `attr="value"`
)* # Many or zero times - end of non-capturing block (a)
\s* # Match all space characters if any, before closing brace `}`
这与您的模式特别匹配。最后不同部分的解释:
__super::OnChangeActiveTab(wp, lp);