@99-rus

Как найти в строке текст который содержит спецсимволы с помощью регулярного выражения?

Есть список товаров которые приходят от поставщика, в них есть названия категорий которые нужно удалить из названия, и есть товары на сайте - они без названия категории. Как я делаю:
1. получаю массив названий товаров с нашего сайта
2 получаю массив названий вместе с категориями с сайта поставщика
3. в цикле и с помощью регулярного выражения, пытаюсь найти совпадения и вывести те товары, которые находит...
может сумбурно описал, и может есть другие решения, подскажите пожалуйста.
// тут разбираем массив от поставщика
foreach($allProductsKlimatprof as $valKlimatprof){
           // это массив с названием товаров с сайта
            foreach($itemProductAll as $itemAll){
                // ищем совпадения, и если находим, то выводим название товара которое совпало
                if (preg_match('/(?<=[\s,.:;"\']|^)' . $itemAll['name'] . '/', $valKlimatprof['NAME'])) {
                    echo $itemAll['name'] . ' - Это те товары, которые нашли и отсеяли<br>';
                }
            }
        }

Это то, что выводит от поставщика:
Сплит-система T18H-ILC/I/TF05P-LC/T18H-ILU/O
Блок внутренний T09H-SnN2/I
Блок наружный T14H-FMA/O
Сплит-система T12H-SLyR2/I/T12H-SLyR2/O
Сплит-система QV-I24FG1/QN-I24UG1
Сплит-система QV-SR18WA/QN-SR18WA
Блок наружный T42H-FMA2/O
Сплит-система LS-HE18TWE2/LU-HE18UWE2
Блок внутренний LS-MHE24KCE2
Сплит-система QV-CA24WA/QN-CA24WA
Сплит-система T24H-SLyW/I/T24H-SLyW/O
Сплит-система T18H-SNE/I/T18H-SNE/O
Сплит-система T24H-SNE/I/T24H-SNE/O

Находит только по типу вот таких:
LS-MHE09KOA2A
LU-4HE28FME2
LU-4HE36FME2
LU-5HE42FME2

А вот такие например уже не находит:
T24H-SNE/I/T24H-SNE/O
LS-H12KPA2/LU-H12KPA2
LS-HE36TVA4/LU-HE36UVA4
QV-I12CG1/QN-I12UG1/QA-ICP11
DI07BFM-D/DO07BFM-D
T09H-SLyW/I/T09H-SLyW/O
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 3
vhood
@vhood
Не забывайте отмечать решения
Судя по предоставленным данным, от поставщика некий артикул всегда находится в конце строки.

Регулярные выражения тут не нужны.

Предлагаю просто отформатировать ответ от поставщика и вывести пересечения

$items = array_intersect(
    $companyItems, // на сайте
    array_map(
        function (string $item) {
            $parts = explode(' ', $item);
            return end($parts);
        },
        $supplierItems // от поставщика
    ),
);
Проверка

spoiler
если не доставать отдельно имена товаров на сайте, можно собрать артикулы с товаров поставщика в один массив, пройтись по товарам на сайте и проверить in_array($item['name'], $supplierNames, true)
Ответ написан
@99-rus Автор вопроса
Вот так к стати находит больше совпадений, но попадаются все же лишние:
if (mb_strpos($valKlimatprof['NAME'], $itemAll['name']) != false) {
                    echo $itemAll['name'].'<br>';
}
Ответ написан
Комментировать
MAYNER
@MAYNER
preg_match('[a-zA-Z0-9-\/]{2,}')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы