2012-08-23 125 views
1

我試圖讓整個句子:preg_match_all匹配整個句子

PRICE CHANGE this this : this var1 : this/this (this) var2,var3 : 111,11 Price(€) : 1.021 start from : 2012-07-26 18:15:00

來源:

timezone. PRICE CHANGE this : this var1 : this/this(this) var2, var3 : 119, 111 Price(€) : 5.021 start from : 2012-07-26 18:15:00 PRICE CHANGE this : this this2 var1 : this (this) var2, var3 : 1604, 452 Price(€) : 6.014 start from : 2012-07-26 18:15:00 bla bla bla bla.

使用此:

body = "timezone. PRICE CHANGE this : this var1 : this/this(this) var2, var3 : 119, 111 Price(€)  : 5.021 start from : 2012-07-26 18:15:00 PRICE CHANGE this : this this2 var1 : this (this) var2, var3 : 1604, 452 Price(€) : 6.014 start from : 2012-07-26 18:15:00 bla bla bla bla." 

$test = preg_match_all('/PRICE CHANGE\s*(.*?)*(\d+:\d+:\d+)', $body, $result); 

而且它不工作, 幫幫我?

+0

你錯過了你的最後/和(。*?)*沒有意義,我也不確定是否「。 「會匹配一個」€「,試試'/ PRICE CHANGE \ s +([\ s \ S] *?)(\ d +:\ d +:\ d +)/ gi' –

+0

不要緊,用$ test ='preg_match_all '/價格變化\ s *(\ s + \ S + \ D + \ w + \ W +)*(\ d +:\ d +:\ d +)/',$ body,$ result);'thanks! –

+0

and urs solution works fine too too @shhac!謝謝! –

回答

1
preg_match_all('/PRICE CHANGE.*?(?=PRICE CHANGE)/', $body, $result); 

會做的伎倆,除非有什麼東西你不告訴我們的結構。如果它真的只是價格變化的清單,那麼它會做tric並且更具可讀性。

的「(?=」在你不知道的情況下,先行,它是用來檢查即將到來的字符零寬度(匹配任何字符)斷言。當一個懶惰的運營商相結合,它可以是一個偉大這樣分手串

0

如果我理解正確的,你想趕上從每一個變化的時間,正確的要做到這一點,你可以改變你的表情是這樣的:?

'/PRICE CHANGE\s*(.*?)(\d+:\d+:\d+)/i' 

也許i修改並非完全必要