2016-05-23 1 views
0

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

он дает выход в

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

вместо придания

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

поэтому проблема, почему согласование не случается, это пренебрежение текстом после IDEAMONEY само по себе.

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

+0

ли сохранен в базе данных в качестве законченной строки? Это кажется наиболее очевидным здесь. – Andreas

+0

yess сохраняется так же, как я упомянул в переменной $ description – aries12

+0

Вы уверены, что «пробел» перед 'MUMBAI' не является символом линии? Если вы добавите «s» в конце регулярного выражения, как это: '/.* PURCHASE. *? \ D {2} \ w {3} \ s (. *) Ссылка:. */S', делает это работать тогда? – trincot

ответ

0

Строка в вашей базе данных имеет новую строку перед MUMBAI. Так как:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^