我有以下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 )


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

我的新代码看起来像这样

<?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之后的文本。

如何解决这个????

最佳答案

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


更新数据库中的值,使其不包含换行符,或者
更改您的正则表达式,以便点也可以匹配换行符。您可以通过添加s pattern modifier来做到这一点:

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

关于php - 从数据库中获取描述时,模式不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37384662/

10-14 14:42
查看更多