从数据库

时间:2016-05-23 07:10:36

标签: php mysql preg-match

我有以下php程序

<?php
$pattern = "/.*PURCHASE.*?\d{2}\w{3}\s(.*)Ref:.*/";
$description = "PURCHASE Card no.: XXXXXXXXXXXXXXXX 13MAR IDEAMONEY MUMBAI Ref: 031352203423 ";
if(preg_match($pattern,$description,$matches))
 {
print_r($matches);
 }
?>

这给出了确切的输出

Array ( [0] => PURCHASE Card no.: 5497XXXXXXXX1502 13MAR IDEAMONEY MUMBAI Ref: 031352203423 [1] => IDEAMONEY MUMBAI ) 

但问题是当我在mysql DB中保存$ description的内容并获取相同的内容并执行与其无法匹配的模式匹配时。

我的新代码看起来像这样

<?php
$pattern = "/.*PURCHASE.*?\d{2}\w{3}\s(.*)Ref:.*/";

include 'dbconnection.php';
$conn = get_dbConnection(); 
$query1 = "select * from MY_TABLE_NAME";
$stmt = $conn->query($query1);

while($result=$stmt->fetch())
{
 $description = $result['MY_COLUMN_NAME'];
if(preg_match($pattern,$description,$matches))
{
print_r($matches);
}
?>

它从数据库中获取相同的描述内容但不匹配。

如果我用

替换上面的$ pattern
$pattern = "/.*/";

它将输出作为

Array ( [0] => PURCHASE Card no.: 5497XXXXXXXX1502 13MAR IDEAMONEY )  

而不是给予

 Array ( [0] => PURCHASE Card no.: XXXXXXXXXXXXXXXX 13MAR IDEAMONEY MUMBAI Ref: 031352203423 ) 

所以匹配没有发生的问题是它忽略了IDEAMONEY之后的文本。

如何解决这个?????

1 个答案:

答案 0 :(得分:0)

数据库中的字符串在MUMBAI之前有一个换行符。所以:

  • 更新数据库中的值,使其中没有换行符或
  • 更改正则表达式,使点也可以匹配换行符。您可以通过添加s pattern modifier

    来完成此操作
    $pattern = "/.*PURCHASE.*?\d{2}\w{3}\s(.*)Ref:.*/s";