我有以下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之后的文本。
如何解决这个?????
答案 0 :(得分:0)
数据库中的字符串在MUMBAI
之前有一个换行符。所以:
更改正则表达式,使点也可以匹配换行符。您可以通过添加s
pattern modifier:
$pattern = "/.*PURCHASE.*?\d{2}\w{3}\s(.*)Ref:.*/s";