шаблон не соответствует, когда описание берется из базы данных

У меня есть следующая программа 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 сам по себе.

как это решить?????

1 ответ

  1. Строка в базе данных имеет новую строку MUMBAI. Так что либо:

    • Обновите значение в базе данных, чтобы в нем не было новых строк, или
    • Измените регулярное выражение так, чтобы точка также могла соответствовать новым линиям. Это можно сделать, добавив модификатор spattern:

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