2016-01-15 45 views
-1

我正在處理一個Php腳本。但不幸的是我在REGEX部分真的很窮。我想提取這樣的東西。在首次出現整數之前提取一段字符串

我給該字符串是:

的Hello World! 2016祝你有美好的一天!

現在,我想它到一個數組拆分爲

{ 「1」: 「世界,你好!」, 「2」: 「有一個漂亮的前一天」}

我想在遇到Integer時將其分開。它只是,我需要一個正則表達式。有人可以幫我解決這個問題嗎?另外,請給我建議一些可以幫助我學習REGEX的鏈接。提前感謝您。

+0

1.爲什麼它必須是一個正則表達式? 2.你在拆分什麼,固定字符串「2016」? – mhawke

+0

字符串2016未固定。它可以是任何整數。 –

+0

請將完整的規格 - 拆分的基礎 - 添加到問題中。 – Praveen

回答

1

最簡單的方法是使用preg_split()。很明顯它做什麼(用正則表達式分割字符串),併產生符合您要求的輸出:

php > $s = "Hello World! 2016 Have a nice day ahead!"; 
php > $pattern = "/\s+\d+\s+/"; 
php > $a = preg_split($pattern, $s); 
php > print_r($a); 
Array 
(
    [0] => Hello World! 
    [1] => Have a nice day ahead! 
) 

唯一的區別是,你的問題要求1爲基礎的索引,而這個答案提供0基於索引。你應該更喜歡基於0的索引,因爲這是默認的PHP序列即數組,字符串等

提供資源的鏈接已經超出了SO範圍,但是,你可以嘗試:

或從簡單的谷歌小號任何成千上萬人的可達目錄操作搜索。


或者,如果您知道定界字符串的字面值,你可以使用explode()

php > $s = "Hello World! 2016 Have a nice day ahead!"; 
php > $delimiter = " 2016 "; 
php > $a = explode($delimiter, $s); 
php > print_r($a); 
Array 
(
    [0] => Hello World! 
    [1] => Have a nice day ahead! 
) 
1

/^([\D]+)\s+\d+\s+(.*)$/應該這樣做。

你得到所有的非數字,然後數字與他們周圍的空白,然後剩下的。

全部放在一起:

$string = 'Hello World! 2016 Have a nice day ahead!'; 
preg_match('/^([\D]+)\s+\d+\s+(.*)$/', $string, $match); 
// $match[1]: Hello World! 
// $match[2]: Have a nice day ahead! 
+0

非常感謝你!這是有道理的。 Bt我不會標記你的答案是正確的,直到我的兩個問題都得到回答。 –

+0

@Milind使用http://regexone.com/和http://regexr.com/來學習正則表達式。 –

+0

我喜歡這張備忘單:http://www.cheatography。com/davechild/cheat-sheets/regular-expressions /,並通過https://regex101.com/進行快速測試 –

相關問題