2011-06-13 45 views
3

我一直想弄清楚如何将字符串下面的字符串转换为多行,它将在两个连续的字母后添加逗号。 Anyhelp表示感谢。使用正则表达式和PHP

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace('/((?<=\[a-zA-Z]\b))/', ',', $myLine); 

输出将

1234:21:3AB, 
3459435:2343RT, 
23432523:CD, 

感谢, JP

我喜欢所有的答案,我感谢大家没闲着,以帮助,并通过让这对所有各种不同的方式运行工作。正则表达式php可以做很多种不同的方式,这真是太神奇了。再次感谢所有!

+2

你的意思是连续两个字母或两个/相同/字母(如AA,ABB) – 2011-06-13 19:22:25

+0

连续字母就像在上面的字符串中有AB RT CD等...最终结果将是1234:21:3AB,3459435:2343RT,23432523:CD,新行将在逗号后面(对此感到抱歉) – jpp 2011-06-13 19:23:45

+1

它缺少一些细节。什么是“多行”?你能编辑和发布预期的输出,所以我们不必猜测? – netcoder 2011-06-13 19:24:06

回答

2

这是我想到的东西很快。

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace('/([a-zA-Z]{2})/', "$1,\n", $myLine); 

输出:

1234:21:3AB, 
3459435:2343RT, 
23432523:CD, 

或者,如果你不想让后面的逗号:

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace('/([a-zA-Z]{2}(?!$))/', "$1,\n", $myLine); 

输出:

1234:21:3AB, 
3459435:2343RT, 
23432523:CD 
+0

可以将第四个位置从后面的三个长度同时剥离,否则我将不得不使用另一个正则表达式,例如get 21 :, 234,523? – jpp 2011-06-13 19:47:56

+0

@jpp:我会在一个单独的正则表达式中这样做。或者更好的是,你可以'substr'来获得你想要的字符范围。 – 2011-06-13 19:55:50

+0

但是字符串后面的substr是可能的? – jpp 2011-06-14 13:15:08

1

我不知道你想要的新线,但只要连续的字母去,它会是这样的:

$myLine= preg_replace('/([a-zA-Z]{2})/', '$1,', $myLine); 
2
$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine = preg_replace('/([a-z]{2})/i', '$1,', $myLine); 
0

添加{2},使之完全匹配两次。

/((?<=[a-zA-Z]{2}))/ 

此外,您可以使用\w任何单词字符。

/((?<=\w{2}\b))/ 
1

像这样的东西应该工作你:

preg_replace('~([a-z]{2})~i', "$1,", $myLine) 
1

试试这个:

$myLine = "1234:21:3AB3459435:2343RT23432523:CD"; 
$myLine= preg_replace("/([a-z]{2})/i","$1,\n", $myLine); 
0

我有一点麻烦解释你的问题。假设你的意思是你想你的样本数据 “1234:21:3AB3459435:2343RT23432523:CD” 转换为 “1234:21:3AB,3459435:2343RT,23432523:CD”:

$myLine= preg_replace('/([a-zA-Z]{2})/','$1,',$myLine); 

应工作。该模式与一行中的两个字母字符完全匹配,并且其周围的括号使该匹配成为替换中的参考。然后替换为两个匹配的字符,并在它们后面加一个逗号。有关更多详细信息,请参阅http://us.php.net/manual/en/function.preg-replace.php

如果您希望结果为多行(例如,为了更漂亮的输出),只需更改替换表达式以包含新行(例如,

$myLine= preg_replace('/([a-zA-Z]{2})/','$1'.",\n",$myLine);