2015-02-08 40 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