2014-04-01 32 views
1

我有变量字符串,如下面:
The.Test.String.A01Y18.123h.WIB-DI.DO5.1.K.314-ECO
的。 Regex.F05P78.123h.WIB-DI.DO5.1.K.314-EYT
Word.C05F78.342T.DSW-RF.EF5.2.F.342-DDF使用正则表达式来提取字符串上半年

我希望提取这部分这些字符串在PHP中是动态的,我正在使用正则表达式,但并没有取得太大的成功:
The.Test.String.A01Y18
The.Regex.F05P78
Word.C05F78

最终以:
测试字符串A01Y18
正则表达式F05P78
字C05F78

文的第一部分将在变数长度,并将每个单词分隔一段时间。接下来的部分将永远是相同的长度与图案:
一个字母,数字2,一个字母,2个数字模式(C05F78)

后的字符串中的任何事情是我想删除的内容。

+5

分享您的尝试为止。 – mario

+0

那么它似乎并不是字符串的第一部分。 –

回答

1

就是这样

$x=array(
    "The.Test.String.A01Y18.123h.WIB-DI.DO5.1.K.314-ECO", 
    "The.Regex.F05P78.123h.WIB-DI.DO5.1.K.314-EYT", 
    "Word.C05F78.342T.DSW-RF.EF5.2.F.342-DDF" 
); 

for ($i=0, $tmp_count=count($x); $i<$tmp_count; ++$i) { 
    echo str_replace(".", " ", preg_replace("/^(.+?)([a-z]{1}[0-9]{2}[a-z]{1}[0-9]{2})\..+$/i", "\\1\\2", $x[$i]))."<br />"; 
} 
1

使用正则表达式应该工作,与第一个捕获组替换每个字符串:

^((?:\w+\.)+\w\d{2}\w\d{2}).* 

见演示在http://regex101.com/r/fR3pM6

1

这是有效的太:

preg_match("\.*[\w\d]{6}", stringVariable) 
01 。

*对于所有数字ATLEAST我们发现的字母和6个字符组成的词的组合物([\ W \ d] {6})

结果:

Match 1: The.Test.Stsrisng.A01Y18  
Match 2: The.Regex.F05P78  
Match 3: Word.C05F78