2013-09-23 82 views
1

我需要你的幫助,關於如何解析字符串。我有一個字符串結構如下:如何在php中解析字符串模式,而字符串很複雜

馬朗| TVhHMTAwMDBK MALANGBONG,GARUT | QkRPMjA3MTlK MALANGKE BARAT,馬桑巴| VVBHMjMzMDVK MALANGKE,馬桑巴| VVBHMjMzMDRK

現在我搞不清如何解析這個字符串,這樣我可以得到像這樣的模式:

MALANG|TVhHMTAwMDBK 
MALANGBONG,GARUT|QkRPMjA3MTlK 
MALANGKE BARAT,MASAMBA|VVBHMjMzMDVK 
MALANGKE BARAT,MASAMBA|VVBHMjMzMDVK 

模式輸出是CITY_NAME | RandomCode

我嘗試使用由空間爆炸,但城市的名字有時也包含空格。什麼功能在PHP我可以用來解決這個問題?

+0

他們都是從馬蘭開始的......還是還有其他的可能嗎? – Kuzgun

+1

因爲它沒有結構(隨機位是放棄)去請求數據提供者給你更多細節 –

+0

嗨Kuzgun,這個詞馬蘭將被替換爲一些變量。如替換爲SUR: SURABAYA | axasdasWsdzx SURABAYA,BARAT DAYA | tverWasfxGMH等 或者可能與我國的城市名稱看起來像類似的另一個詞一樣,如JAKA: JAKARTA | nmTRGBSjgWVB JAKARTA BARAT, TANGERANG | kmliHYDgDjgg –

回答

1

試試這個吧。它適合你的榜樣確定

$str = 'MALANG|TVhHMTAwMDBK MALANGBONG,GARUT|QkRPMjA3MTlK MALANGKE BARAT,MASAMBA|VVBHMjMzMDVK MALANGKE,MASAMBA|VVBHMjMzMDRK'; 
$pattern = '/(?<=^|)[A-Z, ]+?\|[A-Za-z0-9]+(?= |$)/'; 

if (preg_match_all($pattern, $str, $matches)) { 
    $parts = $matches[0]; 
} 

您可能需要調整一些字符類的,如果說你的城市名稱中包含超過大寫字母,空格和逗號的任何其他。這裏

實施例 - http://codepad.viper-7.com/6ujl3p

可選地,如果RandomCode部件都保證所有長12個字符,preg_split可以是更好的貼合,例如

$pattern = '/(?<=\|[A-Za-z0-9]{12}) /'; 
$parts = preg_split($pattern, $str); 

演示此處 - http://codepad.viper-7.com/Wd4Wmc

+0

Thankyou @Phil,現在工作。 $ pattern ='/(?<=^|)[A-Z,] +?\ | [A-Za-z0-9] +(?= | $)/'; 這是否意味着$模式將檢查之前的每個字符串|和|之後的每個字符串受空間限制? 是的,這就是我的意思,我需要更多時間來學習和理解字符串模式和字符串操作。感謝您的幫助;) –

+0

@ParminSupaidiST有關更多信息,請參見http://www.regular-expressions.info/lookaround.html – Phil