Sign in to follow this  
Followers 0
igrokxpx

Помощь с регулярными выражениями

29 posts in this topic

Есть база данных, в которой нужно с помощью регулярных выражений (либо чего угодно) заменить текст внутри символов 
st=текст&amp(текст разный)
на 
st=ссылка&amp(ссылка одна и та же)
в ручную править не вариант, ибо там больше 2000 записей.

Share this post


Link to post
Share on other sites

Как говорится, на свой страх и риск. На быструю руку накидал, проверил на простых примерах, работает:

<?php
$raw_text = "st=текст&amp"; //первоначальный вариант входящих данных
preg_match_all('!st=(.*)&amp!', $raw_text, $text); //вычленяем "текст" из всего остального
$text = $text[1][0]; // готовый "Текст", который был между знаками = и &
$url = "https://talk.pr-cy.ru"; //ссылка, на которую на сменить "текст"
$string = str_replace($text, $url ,$raw_text); //Смена "текста" на ссылку и помещение результата в переменную
echo $string; //Вывод содержимого на экран
?>
styoplotr and Pro100Fun like this

Share this post


Link to post
Share on other sites

 

Как говорится, на свой страх и риск. На быструю руку накидал, проверил на простых примерах, работает:

<?php
$raw_text = "st=текст&amp"; //первоначальный вариант входящих данных
preg_match_all('!st=(.*)&amp!', $raw_text, $text); //вычленяем "текст" из всего остального
$text = $text[1][0]; // готовый "Текст", который был между знаками = и &
$url = "https://talk.pr-cy.ru"; //ссылка, на которую на сменить "текст"
$string = str_replace($text, $url ,$raw_text); //Смена "текста" на ссылку и помещение результата в переменную
echo $string; //Вывод содержимого на экран
?>

А через что этот код проверять?

Share this post


Link to post
Share on other sites

А через что этот код проверять?

На хостинге или на denwer'е. Если Вы не знаете, как это работает, то лучше не рисковать в таком деле.

Share this post


Link to post
Share on other sites

На хостинге или на denwer'е. Если Вы не знаете, как это работает, то лучше не рисковать в таком деле.

И обязательно сделайте бэкап базы (личный опыт).

campusboy and Elektra like this

Share this post


Link to post
Share on other sites

И обязательно сделайте бэкап базы (личный опыт).

Конечно, Вы совершенно правы! Бэкап - это как презерватив, простите за сравнение  :)

Share this post


Link to post
Share on other sites

 

Как говорится, на свой страх и риск. На быструю руку накидал, проверил на простых примерах, работает:

<?php
$raw_text = "st=текст&amp"; //первоначальный вариант входящих данных
preg_match_all('!st=(.*)&amp!', $raw_text, $text); //вычленяем "текст" из всего остального
$text = $text[1][0]; // готовый "Текст", который был между знаками = и &
$url = "https://talk.pr-cy.ru"; //ссылка, на которую на сменить "текст"
$string = str_replace($text, $url ,$raw_text); //Смена "текста" на ссылку и помещение результата в переменную
echo $string; //Вывод содержимого на экран
?>

Как я понял из вопроса, у ТС база данных и нужно в ней заменить, Тут нужны пояснения st=текст&amp(текст разный) перед "текст" стоит пробел или поле st должно содержать &amp? т.к текст может быть любой длины, можно или заменить его весь на ссылку(то есть все поле и тут обычный UPDATE можно использовать) или последнее слово(тут regexp).

Share this post


Link to post
Share on other sites

Как я понял из вопроса, у ТС база данных и нужно в ней заменить, Тут нужны пояснения st=текст&amp(текст разный) перед "текст" стоит пробел или поле st должно содержать &amp? т.к текст может быть любой длины, можно или заменить его весь на ссылку(то есть все поле и тут обычный UPDATE можно использовать) или последнее слово(тут regexp).

REGEXP используется только при выборке данных, при UPDATE такого нет(разве что в PostgreSQL есть REGEXP_REPLACE), в MySQL лечится установкой доп. библиотек. 

Исходя из этого, данная задача решается только с помощью ЯП(как вариант код campusboy).

styoplotr likes this

Share this post


Link to post
Share on other sites

На хостинге или на denwer'е. Если Вы не знаете, как это работает, то лучше не рисковать в таком деле.

В то и дело что не в теме( У меня он идёт как текстовый файл, нарыл полно инфы что можно чуть ли не через ворд с помощью регулярных выражений, но конкретно для своей ситуации так ничего и не нашёл

Share this post


Link to post
Share on other sites

В то и дело что не в теме( У меня он идёт как текстовый файл, нарыл полно инфы что можно чуть ли не через ворд с помощью регулярных выражений, но конкретно для своей ситуации так ничего и не нашёл

Тогда подойдет любой текстовый редактор с поддержкой регулярных выражений в замене. Например, Atom

Share this post


Link to post
Share on other sites

Как я понял из вопроса, у ТС база данных и нужно в ней заменить, Тут нужны пояснения st=текст&amp(текст разный) перед "текст" стоит пробел или поле st должно содержать &amp? т.к текст может быть любой длины, можно или заменить его весь на ссылку(то есть все поле и тут обычный UPDATE можно использовать) или последнее слово(тут regexp).

st=текст&amp - пробелов нет, в реале выглядит вот так st=61AEEAG89v5nWeuYTckanW=Jw692M7WRCGJRk0866sNXHm5eoRWND43wdVo3Qhzm5rntu0c9BMr7&amp

 

Share this post


Link to post
Share on other sites

Тогда подойдет любой текстовый редактор с поддержкой регулярных выражений в замене. Например, Atom

Программа не проблема, проблема какой код ввести, чтобы получилось то что мне надо?

Share this post


Link to post
Share on other sites

Тогда подойдет любой текстовый редактор с поддержкой регулярных выражений в замене. Например, Atom

Вот тут есть примеры этого всего https://support.office.com/ru-ru/article/Поиск-и-замена-текста-с-помощью-регулярных-выражений-расширенные-возможности-eeaa03b0-e9f3-4921-b1e8-85b0ad1c427f?ui=ru-RU&rs=ru-RU&ad=RUно для меня ничего подходящего(

Share this post


Link to post
Share on other sites

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/

Share this post


Link to post
Share on other sites

Mongo поддерживает, в redis-е тоже можно выполнить используя lua например, в postgre как вы уже сказали поддерживется, а  Установить одну библиотеку не так сложно для mysql.

Достаточно проблематично, если это виртуальных хостинг. На виртуальных хостингах (не очень качественных, а это, к сожалению, больше 90%) возможности очень сильно ограничены и всплывает куча ошибок, но это уже совсем другая история.

styoplotr likes this

Share this post


Link to post
Share on other sites

Ctrl+F -> Use Regex (значок .*)

([0-9a-zA-Zа-яА-Я]+)(?=\&amp)

ZSB21DOrKfY.jpgДолжно быть примерно так. После Replace All

Мне пишется, что программа не может открыть файл больше 2мб, а у меня он 60мб как быть?

Share this post


Link to post
Share on other sites

Mongo поддерживает, в redis-е тоже можно выполнить используя lua например, в postgre как вы уже сказали поддерживется, а  Установить одну библиотеку не так сложно для mysql.

Не очень вижу смысл скачивать базу изменять выражения и закачивать обратно. Notepad++ отлично справляется с регехпами http://www.slideshare.net/anjesh/the-power-of-regular-expression-use-in-notepad/

По ссылке не очень понятно какой код в Notepad++ решит эту проблему

Share this post


Link to post
Share on other sites

Мне пишется, что программа не может открыть файл больше 2мб, а у меня он 60мб как быть?

и + у вас в коде никак не указано начало, это в 5 строках оно находит то что надо, а в тонном тексте ,где и в других местах встречаются символы &amp он работать правильно уже не будет

Share this post


Link to post
Share on other sites

Скиньте файл или сюда или в личку, попробуем обработать!

,

Share this post


Link to post
Share on other sites

По ссылке не очень понятно какой код в Notepad++ решит эту проблему

Код коллега выше в примере, на скриншоте показал, попробуйте тот же самый в notepad++ он должен открыть

Share this post


Link to post
Share on other sites

Код коллега выше в примере, на скриншоте показал, попробуйте тот же самый в notepad++ он должен открыть

там нет начала, а по концу там много других файлов есть, которые трогать не надо

Share this post


Link to post
Share on other sites

там нет начала, а по концу там много других файлов есть, которые трогать не надо

В notepad++

заменяете регулярное выражение

st=[0-9a-zA-Zа-яА-Я]*&amp

на

st=ссылка*&amp

PS Спасибо за тему. Решая ваш вопрос, придумал как справиться со своей (схожей) проблемой. 

Share this post


Link to post
Share on other sites

В notepad++

заменяете регулярное выражение

st=[0-9a-zA-Zа-яА-Я]*&amp

на

st=ссылка*&amp

PS Спасибо за тему. Решая ваш вопрос, придумал как справиться со своей (схожей) проблемой. 

Сделал, как было так и осталось, вот скриншот http://prntscr.com/70nvr9

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.