首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex解析字符串并获得所需的输出

使用regex解析字符串并获得所需的输出
EN

Stack Overflow用户
提问于 2019-07-26 11:54:42
回答 2查看 111关注 0票数 1

我想解析这个字符串

[[delay-4]]Welcome! [[delay-2]]Do you have some questions for us?[[delay-1]] Please fill input field!

我需要这样的东西:

代码语言:javascript
复制
[
    [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!

预期的产出应该如下所示:

代码语言:javascript
复制
    [
        [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/)

代码语言:javascript
复制
(?:\[\[delay-\d+]])?([\w \\,?!.@#$%^&*()|`\]~\-='\"{}]+)

但是,如果有人只用文本写了一个[,regex就会失败,如果我包含了[来匹配,我就会得到错误的结果,我对这个正则表达式有问题。

有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2019-07-26 13:04:04

两个简单的操作可能是获得结果的途径:

代码语言:javascript
复制
$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/Z5tZI3https://ideone.com/vnSNYI

这假设换行符没有特殊意义,可以拆分。

更新:正如在下面的注释中所指出的,只需一个拆分就可以了。

代码语言:javascript
复制
$result = preg_split('/(?=\[\[delay-\d+]])/i', $subject, -1, PREG_SPLIT_NO_EMPTY);

但是,在零长度匹配和正则表达式方面也可能存在问题,您必须自己进行研究。

票数 2
EN

Stack Overflow用户

发布于 2019-07-26 12:06:13

你也可以不用regex就这么做。

[[上爆炸并循环阵列。如果项目的开头是“延迟”,那么添加[[

代码语言:javascript
复制
$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://3v4l.org/sIui1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57219557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档