2012-07-03 46 views
2

我正在尋找一種方式來從該字符串抓住以下數據註冊精通的話VS

DON'T FLOP - ‬Rap Battle - Illmaculate Vs Tony D 

DON'T FLOP - ‬Rap Battle - $var1 Vs $var2 

這樣我就可以結束了$var3 = $var1 Vs $var2

問題每一面是,對手的名字可以包含一個以上的單詞,而我可以一直走到句子的最後,對手的右邊是vs,我沒有辦法限定對手名字的開頭,是嗎?

如何在 - 之後的空白處執行檢查,在vs中停止並重新啓動$ var2直到句子結束?

回答

1

非貪婪捕獲組(.+?)Vs左邊,-和空間應該抓住的第一個名字下面。只要你總是有空間在-之後,這應該可以正常工作。如有必要,\s+允許多個空格。

$pattern = '/Rap Battle -\s+(.+?)\s+Vs\s+(.+)$/'; 

$string = "DON'T FLOP - Rap Battle - Illmaculate Vs Tony D"; 
preg_match($pattern, $string, $matches); 
var_dump($matches); 

array(3) { 
    [0]=> 
    string(34) "Rap Battle - Illmaculate Vs Tony D" 
    [1]=> 
    string(11) "Illmaculate" 
    [2]=> 
    string(6) "Tony D" 
} 

$var1 = $matches[1]; 
$var2 = $matches[2]; 
+0

你怎麼使它看起來那麼容易,謝謝你。 –

0
$text = "DON'T FLOP - Rap Battle - Illmaculate Vs Tony D"; 
$regex = '%Rap Battle - (.*?) Vs (.*)$%'; 
preg_match($regex, $text, $array); 

$array[0] = entire string match. 
$array[1] = first opponent. 
$array[2] = 2nd opponent.