2015-02-08 64 views
1

匹配字符串取我有這個字符串的preg_match無法從數據庫

$ S =「FX67KU373證實。您已收到JANE DOE的USD85.00 44587398 14年4月11日下午5:48新Tigo的餘額爲USD92.00.Save money on Tigo';

在我的PHP腳本測試目的。在生產中,我從數據庫中獲取的字符串這樣

$dbh = new PDO('mysql:host=localhost;dbname=app', 'root', '123456'); 

$fc = $dbh->prepare("select one from t_data where id = 1084"); 
$fc->execute(); 

$s = $fc->fetchColumn(0); 

echo $s; 

s顯示我是來自哪個是一樣的一個關於我的PHP script.However,當我

$matches = array(); 

preg_match('/from (.*?) on/', $s, $matches); 

echo '<br/><br/>'; 
var_dump($matches); 
數據庫中獲取字符串

$matches對於從數據庫中提取的字符串是空的,對於我的腳本中的值不爲空。爲什麼是這種情況?

這是從數據庫中字符串的模樣究竟

$s = 'FX67KU373 Confirmed. 
You have received USD85.00 from 
JANE DOE 44587398 
on 4/11/14 at 5:48 PM 
New Tigo balance is USD92.00.Save money on Tigo'; 

回答

3

您的字符串(代碼)是短短一行:

$s = 'GK52RY410 Confirmed. You have received Ksh110.00 from JANE DOE 448909294 on 3/2/15 at 7:50 PM New Tigo balance is USD110.00.Pay Bills via Tigo'; 

如果你看一下與數據庫的輸出,你會發現,有串(在換行符我想這從您提供的膏,它可能並非如此):

FX67KU373 Confirmed. 
You have received USD85.00 from 
JANE DOE 44587398 
on 4/11/14 at 5:48 PM 
New Tigo balance is USD92.00.Save money on Tigo 

所以,你的模式是簡單的不匹配,因爲它是唯一的搜索空白fromon之間

你應該使用\s+對於這一點,所以'/from\s+(.*?)\s+on/'

from\s+(.*?)\s+on 

Regular expression visualization

Debuggex Demo

+1

'm'不會做你認爲它做的事。如果你的正則表達式中沒有'^'或'$','m'什麼也不做。 – 2015-02-08 13:44:08

+0

@NiettheDarkAbsol - 你說得對。但仍然是一個'空白'不符合換行符,而'\ s *'會。 – dognose 2015-02-08 13:44:55

+0

不應該有至少一個空格作爲分隔符?非常感謝那個鏈接,順便說一句! – 2015-02-08 13:49:36

-1

試加g或i選項像模式:「/測試/我」

+0

它不是因爲區分大小寫。 – user3272483 2015-02-08 13:31:17

+0

刪除?從模式。 $ s被填滿了嗎? – 2015-02-08 13:32:46

+0

是它被填滿。 – user3272483 2015-02-08 13:34:29