Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2024, 12:46   #1
AdisPrint
 
Регистрация: 21.08.2017
Сообщений: 5
По умолчанию Сравнение строк с учетом знаков препинания.

В общем иногда в магазине на многих страницах выявляется ошибка.

Допустим.
Товар, поставляется индивидуальной, цветной упаковке.
Заменить на.
Чайник, поставляется индивидуальной упаковке.

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

Т.е. если эту строку вбить в поиск "Товар, поставляется индивидуальной, цветной упаковке." то он не найдет ее в описании товаров.
AdisPrint вне форума Ответить с цитированием
Старый 14.01.2024, 14:03   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

1)
Цитата:
Сообщение от AdisPrint Посмотреть сообщение
В общем иногда в магазине на многих страницах выявляется ошибка.
Какая ошибка?
2)
Цитата:
Сообщение от AdisPrint Посмотреть сообщение
Товар, поставляется индивидуальной, цветной упаковке.
Откуда берётся строка для сравнения?
3)
Цитата:
Сообщение от AdisPrint Посмотреть сообщение
Заменить нужно целиком одну строку на другую
Заменить необходимо в шаблоне страницы на этапе вывода? Т.е каждый раз при обновлении страницы необходимо производить замену. Или это разовая операция результат которой необходимо сохранить туда же (файл, БД и тд) на место искомой строки?
4)
Цитата:
Сообщение от AdisPrint Посмотреть сообщение
если эту строку вбить в поиск "Товар, поставляется индивидуальной, цветной упаковке." то он не найдет ее в описании товаров
Поиск срадствами браузера? Или поиск по базе данных магазина?
Valick вне форума Ответить с цитированием
Старый 14.01.2024, 17:53   #3
AdisPrint
 
Регистрация: 21.08.2017
Сообщений: 5
По умолчанию

Неважно какая ошибка, орфографическая, грамматическая. В общем ошибка в описании товара.
Проще говоря у сотни товаров появился одинаковый текст.
Вася, дурак. А нужно было Коля, дурак.

Так вот без запятых, точек и прочих знаков, найти подстроку - Вася дурак в поле описание товара если там так же написано Вася дурак, не представляет никакой проблемы.

А вот подстроку Вася, дурак. с запятой и точкой, в поле описания товара в котором так же написано Вася, дурак. простыми операторами поиска вхождения подстроки с строку найти ничего не получается, 0 результат поиска.

Да берется из БД и туда же записывается. Можно сделать это в phpmyadmin, поиск с заменой по определенному столбцу. Но гораздо проще написать файлик который вызывается из админки магазина, с двумя полями, поиск и замена.

Последний раз редактировалось AdisPrint; 14.01.2024 в 17:56.
AdisPrint вне форума Ответить с цитированием
Старый 14.01.2024, 20:46   #4
Liris
Пользователь
 
Регистрация: 09.05.2012
Сообщений: 20
По умолчанию

Может использовать регулярки? Ну типа:

Код:
/(Вася)(.*)(дурак)/
Где (.*) это любые символы.

Из нескольких слов аналогично:

Код:
/(Петя)(.*)(тоже)(.*)(дурак)/
Liris вне форума Ответить с цитированием
Старый 15.01.2024, 00:03   #5
Ottava
Форумчанин
 
Регистрация: 05.09.2017
Сообщений: 157
По умолчанию

Цитата:
Сообщение от Liris Посмотреть сообщение
Может использовать регулярки? Ну типа:

Код:
/(Вася)(.*)(дурак)/
Где (.*) это любые символы.
(.*) может накосячить, лучше ограничить вхождение по [, ]+

Цитата:
Сообщение от AdisPrint Посмотреть сообщение
В общем иногда в магазине на многих страницах выявляется ошибка.

Допустим.
Товар, поставляется индивидуальной, цветной упаковке.
Заменить на.
Чайник, поставляется индивидуальной упаковке.
Можно делать замены по регулярке прямо в MySQL. Допустим, замены надо делать в поле Description таблицы TableName. А в поле ItemName лежит наименование товара (чайник, микроволновка, электропечь и тп).

Сделайте в phpmyadmin запрос:
Код:
SELECT * FROM `TableName` WHERE Description RLIKE "Товар[, ]+поставляется[, ]+индивидуальной[, ]+цветной[, ]+упаковке\."
Он должен выбрать все строки с Description, равным 'Товар, поставляется индивидуальной, цветной упаковке.'

A) Если Description содержит только искомую строку (без обрамляющего текста вокруг), можно заменить их все разом по шаблону:
Код:
UPDATE `TableName` SET Description=CONCAT(ItemName, ', поставляется в индивидуальной упаковке.') WHERE Description RLIKE "Товар[, ]+поставляется[, ]+индивидуальной[, ]+цветной[, ]+упаковке\."
Отлаживать лучше запросом:
Код:
SELECT CONCAT(ItemName, ', поставляется в индивидуальной упаковке.') FROM `TableName` WHERE Description RLIKE "Товар[, ]+поставляется[, ]+индивидуальной[, ]+цветной[, ]+упаковке\."
и проверить, что всё будет заменяться как надо.


B) Если Description содержит искомую строку и обрамляющий текст вокруг, то запрос на выборку сделайте с .* по краям:
Код:
SELECT * FROM `TableName` WHERE Description RLIKE ".*Товар[, ]+поставляется[, ]+индивидуальной[, ]+цветной[, ]+упаковке\..*"
и замену лучше делать регуляркой на PHP, так как REGEXP_REPLACE() появился только в MySQL 8.0

PS: Не забудьте сделать бэкап БД перед любыми массовыми изменениями таблиц.
Безопасность с Content Security Policy

Последний раз редактировалось Ottava; 15.01.2024 в 00:55. Причина: nt
Ottava вне форума Ответить с цитированием
Старый 15.01.2024, 09:47   #6
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

AdisPrint, как реализован поиск товараов в магазине? Elasticsearch используется?
Valick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать количество знаков препинания С++ wolchara Помощь студентам 2 11.01.2015 14:36
Удаление знаков препинания из текстов. С++ Angriff Помощь студентам 3 08.03.2012 15:52
Посчитать кол-во знаков препинания в тексте. Dane4ka Помощь студентам 10 08.05.2011 20:50
последовательность знаков препинания Владимир_король Помощь студентам 3 29.04.2010 10:56
Программа удаления знаков препинания... hen Общие вопросы C/C++ 17 11.10.2009 16:57