Jump to content

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


Recommended Posts

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

Link to post
Share on other sites
  • VIP

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

<?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; //Вывод содержимого на экран
?>
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; //Вывод содержимого на экран
?>

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites
  • VIP

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

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

Link to post
Share on other sites
  • VIP

 

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

<?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).

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

 

Link to post
Share on other sites

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

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

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но для меня ничего подходящего(

Link to post
Share on other sites
  • VIP

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

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

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

Link to post
Share on other sites

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

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

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

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

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++ решит эту проблему

Link to post
Share on other sites

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

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

Link to post
Share on other sites
  • VIP

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

В notepad++

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

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

на

st=ссылка*&amp

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

Link to post
Share on other sites

В notepad++

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

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

на

st=ссылка*&amp

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

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

Link to post
Share on other sites
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...