如果下一个字符是特定字符,例如'abc',则拆分字符串

时间:2014-05-09 07:01:26

标签: php regex

我目前有一个字符串,如下所示

$string = "4WL533cba00780352524MT_FAILED(SCRNotInAllowList)                  STATUS_NOT_AVAILABLE";

我按照在线教程显示:

(gif|jpg)   Matches either "gif" or "jpeg".

从我的情况来看,我只需要在文本包含DN_或MT _

时拆分
$data = preg_split("/[\s,(DN_|MT_),]+/", trim($string));

输出

[0] => Array
    (
        [0] => 4WL533cba00780352524
        [1] => FAILE
        [2] => SCR
        [3] => otInAllowList
        [4] => S
        [5] => A
        [6] => US
        [7] => O
        [8] => AVAILABLE
    )

但是我希望输出为:

[0] => Array
    (
        [0] => 4WL533cba00780352524
        [1] => MT_FAILED(SCRNotInAllowList)
        [2] => STATUS_NOT_AVAILABLE
    )

希望你们能帮助我。

2 个答案:

答案 0 :(得分:4)

$string = "4WL533cba00780352524MT_FAILED(SCRNotInAllowList)                  STATUS_NOT_AVAILABLE";

$data = preg_split("/\s+|(?=DN_|MT_)/", trim($string));
print_r($data);

输出

Array
(
[0] => 4WL533cba00780352524
[1] => MT_FAILED(SCRNotInAllowList)
[2] => STATUS_NOT_AVAILABLE
)

答案 1 :(得分:4)

在你的正则表达式模式中,你将预期的模式包装在一个字符类中并且无法使用交替操作符 - 你可能希望看一下this regex site来详细解释正则表达式的基本语法,背景理论普通正则表达式引擎中的扩展功能。

在您的代码中使用

$data = preg_split("/\s+|(?=DN_|MT_)/", trim($string));

模式的简要说明:

你想要在空格的序列上或在其中一个字符串&n; 39,' MT _'的出现时分割。在后一种情况下,您希望拆分模式的匹配是结果数组中下一个元素的一部分。因此,您将模式包含在正向前瞻操作符中,该操作符为匹配提供尾随上下文。如果此匹配后跟' DN _'有效,则匹配空字符串。或者' MT _'。