拆分PHP系列

时间:2012-03-02 04:58:50

标签: php

我有这个字符串++++++1DESIGNRESULTSM25Fe415(Main)

我有类似的字符串约2000行,我想从中分割这些......

[++++++] [1] [DESIGNRESULTS] [M25] [Fe415] [(Main)]

从模式中只有第2个4h和第5个值发生变化

例如.. ++++++2DESIGNRESULTSM30Fe418(Main)等..

我真正想要的是:

  1. 拆分第一个值[++++++]
  2. 在[DESIGNRESULTS]的4个字符之后拆分值,所以生病了[M25]
  3. 将[[Main]]的4个字符前的值分开,这样生病了[Fe415]
  4. 完成所有这些后,将最后一块块存储在一个数组中。
  5. 我想要的类似输出是

    Array ( [0] => 1  [1] => M25  [2] => Fe415 ) 
    

    请帮帮我...

    提前致谢:)

2 个答案:

答案 0 :(得分:1)

您的数据拆分需求有点不清楚。一个正则表达式,它将在您首先指定的每个块上获得单独的匹配:

(\++)(\d)(DESIGNRESULTS)(M\d\d)(Fe\d\d\d)(\(Main\))

如果你只需要最后要求的两个,你可以使用

(\d)DESIGNRESULTS(M\d\d)(Fe\d\d\d)

如果位数未知,您也可以将\d\d替换为\d+

但是,根据您的示例,每个字符串块看起来都是一致的长度。使用

会更快
array(
   substr($string, 6, 1)
   //...
)

答案 1 :(得分:0)

这个怎么样

 $str = "++++++1DESIGNRESULTSM25Fe415(Main)";

 $match = array();
 preg_match("/^\+{0,}(\d)DESIGNRESULTS(\w{3})(\w{5})/",$str,$match);
 array_shift($match);
 print_r($match);