我想解析这个字符串
[[delay-4]]Welcome! [[delay-2]]Do you have some questions for us?[[delay-1]] Please fill input field!
我需要这样的东西:
[
[0] => '[[delay-4]]Welcome!',
[1] => '[[delay-2]]Do you have some questions for us?',
[2] => '[[delay-1]] Please fill input field!
];字符串也可以是这样的(开始时没有[延迟-4]):
Welcome! [[delay-2]]Do you have some questions for us?[[delay-1]] Please fill input field!
预期的产出应该如下所示:
[
[0] => 'Welcome!',
[1] => '[[delay-2]]Do you have some questions for us?',
[2] => '[[delay-1]] Please fill input field!
];我尝试使用这个regex (https://regex101.com/r/Eqztl1/1/)
(?:\[\[delay-\d+]])?([\w \\,?!.@#$%^&*()|`\]~\-='\"{}]+)但是,如果有人只用文本写了一个[,regex就会失败,如果我包含了[来匹配,我就会得到错误的结果,我对这个正则表达式有问题。
有人能帮我吗?
发布于 2019-07-26 13:04:04
两个简单的操作可能是获得结果的途径:
$result = preg_replace('/\s*(\[\[delay-\d+]])/i', "\n$1", $subject);
$result = preg_split('/\r?\n/i', $result, -1, PREG_SPLIT_NO_EMPTY);可以在这里看到运行:https://ideone.com/Z5tZI3和https://ideone.com/vnSNYI
这假设换行符没有特殊意义,可以拆分。
更新:正如在下面的注释中所指出的,只需一个拆分就可以了。
$result = preg_split('/(?=\[\[delay-\d+]])/i', $subject, -1, PREG_SPLIT_NO_EMPTY);但是,在零长度匹配和正则表达式方面也可能存在问题,您必须自己进行研究。
发布于 2019-07-26 12:06:13
你也可以不用regex就这么做。
在[[上爆炸并循环阵列。如果项目的开头是“延迟”,那么添加[[
$str = '[[delay-4]]Welcome! [[delay-2]]Do you have some questions for us?[[delay-1]] Please fill input field!';
$arr = array_filter(explode("[[", $str));
foreach($arr as &$val){
if(substr($val,0,5) == "delay") $val = "[[" . $val;
}
var_dump($arr);https://stackoverflow.com/questions/57219557
复制相似问题