как заменить числа из строки, чтобы они соответствовали только правильному номеру, а не их под номерам? - PullRequest
1 голос
/ 27 января 2012

Я новичок в регулярных выражениях. поэтому столкнулся со следующей проблемой.

мой код выглядит следующим образом.

$originalStr="101 abc 1101 xyz";
preg_match_all('/[0-9]{3,5} /', $originalStr, $matches);
$result=array();
$result=array_unique($matches[0]);
sort($result);
global $wpdb;
for($i=0;$i<count($result);$i++)
{   

    $getName="SELECT Name FROM MyTable WHERE ProductID='".trim($result[$i])."' LIMIT 1";
    $data = $wpdb->get_results($getName);
    $replaceWith="";
    foreach ($data as $obj)
    {
        $replaceWith=$obj->Name;
        $originalStr=str_replace($result[$i], $result[$i]." : ".$replaceWith, $originalStr);        
        break;      
    }   
}
echo $originalStr;

здесь моя цель состоит в том, чтобы заменить идентификатор продукта на «идентификатор продукта: название продукта», но проблема в том, что, поскольку 1101 имеет 101 в качестве своего вспомогательного номера, он заменяет строку 1101 на строку 101.

так что я получаю массив чисел в порядке, но моя проблема с заменой. Я хочу, чтобы он был заменен только на точное совпадение чисел.

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Вы можете использовать preg_replace_callback вместо того, чтобы вручную зацикливать список результатов и заменять его на втором шаге (при этом str_replace не знает контекст или какой заменить).*

Так что просто сделайте запрос к вашей базе данных в обратном вызове.Это не супер эффективно делать несколько запросов в цикле, ни в этом обратном вызове.Но это проще, по крайней мере.И preg_replace_callback точно знает, какой части он соответствует, и заменяет эту точную подстроку возвращенной заменой.

0 голосов
/ 27 января 2012

возможно, измените свое регулярное выражение на что-то вроде этого /(^|\s)[0-9]{3,5} /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...