preg_match无法匹配从数据库中获取的字符串

时间:2015-02-08 13:19:18

标签: php

我有这个字符串

  

$ s ='FX67KU373确认。您从JANE DOE收到了USD85.00   44587398于2014年4月11日下午5:48新Tigo余额为USD92.00。保证金   在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脚本上的字符串相同。但是,当我

$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';

2 个答案:

答案 0 :(得分: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';

如果从数据库中查看输出,您会注意到字符串中有换行符(我假设您提供的粘贴,可能不是这种情况):< / p>

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 :(得分:-1)

尝试在模式上添加g或i选项,如:“/ test / i”