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