2011-06-13 60 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);