igrokxpx 1 Posted May 1, 2015 Report Share Posted May 1, 2015 Есть база данных, в которой нужно с помощью регулярных выражений (либо чего угодно) заменить текст внутри символов st=текст&(текст разный)на st=ссылка&(ссылка одна и та же)в ручную править не вариант, ибо там больше 2000 записей. Link to post Share on other sites
VIP campusboy 912 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 Как говорится, на свой страх и риск. На быструю руку накидал, проверил на простых примерах, работает: <?php $raw_text = "st=текст&"; //первоначальный вариант входящих данных preg_match_all('!st=(.*)&!', $raw_text, $text); //вычленяем "текст" из всего остального $text = $text[1][0]; // готовый "Текст", который был между знаками = и & $url = "https://talk.pr-cy.ru"; //ссылка, на которую на сменить "текст" $string = str_replace($text, $url ,$raw_text); //Смена "текста" на ссылку и помещение результата в переменную echo $string; //Вывод содержимого на экран ?> Pro100Fun and styoplotr 2 Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Как говорится, на свой страх и риск. На быструю руку накидал, проверил на простых примерах, работает: <?php $raw_text = "st=текст&"; //первоначальный вариант входящих данных preg_match_all('!st=(.*)&!', $raw_text, $text); //вычленяем "текст" из всего остального $text = $text[1][0]; // готовый "Текст", который был между знаками = и & $url = "https://talk.pr-cy.ru"; //ссылка, на которую на сменить "текст" $string = str_replace($text, $url ,$raw_text); //Смена "текста" на ссылку и помещение результата в переменную echo $string; //Вывод содержимого на экран ?> А через что этот код проверять? Link to post Share on other sites
VIP campusboy 912 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 А через что этот код проверять? На хостинге или на denwer'е. Если Вы не знаете, как это работает, то лучше не рисковать в таком деле. Link to post Share on other sites
mojo 79 Posted May 2, 2015 Report Share Posted May 2, 2015 На хостинге или на denwer'е. Если Вы не знаете, как это работает, то лучше не рисковать в таком деле. И обязательно сделайте бэкап базы (личный опыт). Elektra and campusboy 2 Link to post Share on other sites
VIP campusboy 912 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 И обязательно сделайте бэкап базы (личный опыт). Конечно, Вы совершенно правы! Бэкап - это как презерватив, простите за сравнение Link to post Share on other sites
VIP styoplotr 514 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 Как говорится, на свой страх и риск. На быструю руку накидал, проверил на простых примерах, работает: <?php $raw_text = "st=текст&"; //первоначальный вариант входящих данных preg_match_all('!st=(.*)&!', $raw_text, $text); //вычленяем "текст" из всего остального $text = $text[1][0]; // готовый "Текст", который был между знаками = и & $url = "https://talk.pr-cy.ru"; //ссылка, на которую на сменить "текст" $string = str_replace($text, $url ,$raw_text); //Смена "текста" на ссылку и помещение результата в переменную echo $string; //Вывод содержимого на экран ?> Как я понял из вопроса, у ТС база данных и нужно в ней заменить, Тут нужны пояснения st=текст&(текст разный) перед "текст" стоит пробел или поле st должно содержать &? т.к текст может быть любой длины, можно или заменить его весь на ссылку(то есть все поле и тут обычный UPDATE можно использовать) или последнее слово(тут regexp). Link to post Share on other sites
LetSevI 322 Posted May 2, 2015 Report Share Posted May 2, 2015 Как я понял из вопроса, у ТС база данных и нужно в ней заменить, Тут нужны пояснения st=текст&(текст разный) перед "текст" стоит пробел или поле st должно содержать &? т.к текст может быть любой длины, можно или заменить его весь на ссылку(то есть все поле и тут обычный UPDATE можно использовать) или последнее слово(тут regexp). REGEXP используется только при выборке данных, при UPDATE такого нет(разве что в PostgreSQL есть REGEXP_REPLACE), в MySQL лечится установкой доп. библиотек. Исходя из этого, данная задача решается только с помощью ЯП(как вариант код campusboy). styoplotr 1 Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 На хостинге или на denwer'е. Если Вы не знаете, как это работает, то лучше не рисковать в таком деле. В то и дело что не в теме( У меня он идёт как текстовый файл, нарыл полно инфы что можно чуть ли не через ворд с помощью регулярных выражений, но конкретно для своей ситуации так ничего и не нашёл Link to post Share on other sites
LetSevI 322 Posted May 2, 2015 Report Share Posted May 2, 2015 В то и дело что не в теме( У меня он идёт как текстовый файл, нарыл полно инфы что можно чуть ли не через ворд с помощью регулярных выражений, но конкретно для своей ситуации так ничего и не нашёл Тогда подойдет любой текстовый редактор с поддержкой регулярных выражений в замене. Например, Atom Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Как я понял из вопроса, у ТС база данных и нужно в ней заменить, Тут нужны пояснения st=текст&(текст разный) перед "текст" стоит пробел или поле st должно содержать &? т.к текст может быть любой длины, можно или заменить его весь на ссылку(то есть все поле и тут обычный UPDATE можно использовать) или последнее слово(тут regexp). st=текст& - пробелов нет, в реале выглядит вот так st=61AEEAG89v5nWeuYTckanW=Jw692M7WRCGJRk0866sNXHm5eoRWND43wdVo3Qhzm5rntu0c9BMr7& Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Тогда подойдет любой текстовый редактор с поддержкой регулярных выражений в замене. Например, Atom Программа не проблема, проблема какой код ввести, чтобы получилось то что мне надо? Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Тогда подойдет любой текстовый редактор с поддержкой регулярных выражений в замене. Например, Atom Вот тут есть примеры этого всего https://support.office.com/ru-ru/article/Поиск-и-замена-текста-с-помощью-регулярных-выражений-расширенные-возможности-eeaa03b0-e9f3-4921-b1e8-85b0ad1c427f?ui=ru-RU&rs=ru-RU&ad=RUно для меня ничего подходящего( Link to post Share on other sites
VIP campusboy 912 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 Скиньте файл или сюда или в личку, попробуем обработать! Link to post Share on other sites
LetSevI 322 Posted May 2, 2015 Report Share Posted May 2, 2015 Ctrl+F -> Use Regex (значок .*) ([0-9a-zA-Zа-яА-Я]+)(?=\&) Должно быть примерно так. После Replace All styoplotr and campusboy 2 Link to post Share on other sites
VIP styoplotr 514 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 REGEXP используется только при выборке данных, при UPDATE такого нет(разве что в PostgreSQL есть REGEXP_REPLACE), в MySQL лечится установкой доп. библиотек. Исходя из этого, данная задача решается только с помощью ЯП(как вариант код campusboy). Mongo поддерживает, в redis-е тоже можно выполнить используя lua например, в postgre как вы уже сказали поддерживется, а Установить одну библиотеку не так сложно для mysql. Не очень вижу смысл скачивать базу изменять выражения и закачивать обратно. Notepad++ отлично справляется с регехпами http://www.slideshare.net/anjesh/the-power-of-regular-expression-use-in-notepad/ Link to post Share on other sites
LetSevI 322 Posted May 2, 2015 Report Share Posted May 2, 2015 Mongo поддерживает, в redis-е тоже можно выполнить используя lua например, в postgre как вы уже сказали поддерживется, а Установить одну библиотеку не так сложно для mysql. Достаточно проблематично, если это виртуальных хостинг. На виртуальных хостингах (не очень качественных, а это, к сожалению, больше 90%) возможности очень сильно ограничены и всплывает куча ошибок, но это уже совсем другая история. styoplotr 1 Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Ctrl+F -> Use Regex (значок .*) ([0-9a-zA-Zа-яА-Я]+)(?=\&) Должно быть примерно так. После Replace All Мне пишется, что программа не может открыть файл больше 2мб, а у меня он 60мб как быть? Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Mongo поддерживает, в redis-е тоже можно выполнить используя lua например, в postgre как вы уже сказали поддерживется, а Установить одну библиотеку не так сложно для mysql. Не очень вижу смысл скачивать базу изменять выражения и закачивать обратно. Notepad++ отлично справляется с регехпами http://www.slideshare.net/anjesh/the-power-of-regular-expression-use-in-notepad/ По ссылке не очень понятно какой код в Notepad++ решит эту проблему Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Мне пишется, что программа не может открыть файл больше 2мб, а у меня он 60мб как быть? и + у вас в коде никак не указано начало, это в 5 строках оно находит то что надо, а в тонном тексте ,где и в других местах встречаются символы & он работать правильно уже не будет Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Скиньте файл или сюда или в личку, попробуем обработать! , Link to post Share on other sites
VIP styoplotr 514 Posted May 2, 2015 VIP Report Share Posted May 2, 2015 По ссылке не очень понятно какой код в Notepad++ решит эту проблему Код коллега выше в примере, на скриншоте показал, попробуйте тот же самый в notepad++ он должен открыть Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 Код коллега выше в примере, на скриншоте показал, попробуйте тот же самый в notepad++ он должен открыть там нет начала, а по концу там много других файлов есть, которые трогать не надо Link to post Share on other sites
mojo 79 Posted May 2, 2015 Report Share Posted May 2, 2015 там нет начала, а по концу там много других файлов есть, которые трогать не надо В notepad++ заменяете регулярное выражение st=[0-9a-zA-Zа-яА-Я]*& на st=ссылка*& PS Спасибо за тему. Решая ваш вопрос, придумал как справиться со своей (схожей) проблемой. Link to post Share on other sites
igrokxpx 1 Posted May 2, 2015 Author Report Share Posted May 2, 2015 В notepad++ заменяете регулярное выражение st=[0-9a-zA-Zа-яА-Я]*& на st=ссылка*& PS Спасибо за тему. Решая ваш вопрос, придумал как справиться со своей (схожей) проблемой. Сделал, как было так и осталось, вот скриншот http://prntscr.com/70nvr9 Link to post Share on other sites
Recommended Posts