使用正则表达式提取字符串的前半部分

时间:2014-04-01 23:23:55

标签: php regex preg-replace

我有如下所示的变量字符串:
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

我想动态地在PHP中提取这些字符串的这一部分而我正在考虑使用正则表达式但是还没有取得多大成功:
The.Test.String.A01Y18
The.Regex.F05P78
Word.C05F78

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

文本的第一部分长度可变,并将每个单词与句点分开。下一部分的长度始终与模式相同:
一个字母,2个数字,一个字母,2个数字模式(C05F78)

之后字符串中的任何内容都是我要删除的内容。

3 个答案:

答案 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 :(得分:1)

使用此正则表达式应该有效,用第一个捕获组替换每个字符串:

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

请参阅http://regex101.com/r/fR3pM6

上的演示

答案 2 :(得分:1)

这也是有效的:

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

。*对于所有数字至少我们发现了一个由6个字符组成的字母和单词([\ w \ d] {6})

结果:

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