Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

Открыть новую тему     Написать ответ в эту тему

leftMIND

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   Регулярные выражения
Обучающий материал
  • Книги    
  • Шпаргалки: от AZJIO (AutoIt3, PCRE) от Dave Child
  • wikipedia.org - Регулярные выражения на wiki  
  • edlinsoft.blogspot.com - Регулярные выражения в .NET Framework  
  • php.ru - Синтаксис регулярных выражений  
  • php.net - Синтаксис регулярных выражений  
  • regexpstudio.com - Регулярные выражения для Delphi  
    Официальные источники:
  • docs.notepad-plus-plus.org - Официальный источник Notepad++ (англ. яз.)  
  • pcre.org - Официальный справочник движка PCRE (англ. яз.)  

  •    Тестирование регулярных выражений
    Программы
    Онлайн сервисы
  • RegexBuddy - крутая и платная  
  • RegExp - бесплатно, AZJIO, PCRE, AutoIt3  
  • Expresso  
  • The Regex Coach  
  • RegExstar, Github (AutoHotKey, PCRE)
  • Обзор программ от ManHunter    
  • regexr.com здесь в Community множество готовых регулярных выражений  
  • pagecolumn.com - для javascript  
  • pagecolumn.com - для php  
  • cuneytyilmaz.com - для javascript  
  • php-include.ru - на флеш-плеере  
  • regex101.com  
  • easyregexp.ru  
  • debuggex.com - показывает структурно  

  •    Схожие темы
  • javascript регулярные выражения
  • PHP: Регулярные выражения (RegExp, Regular, eregi, preg)
  • Игра - Регулярно выражайтесь!
     
    первое сообщение темы...
    Обсуждение шапки данной темы ведётся в этой теме
    Рекомендации по составлению вопросов в данной теме:

  • Всего записей: 33 | Зарегистр. 07-04-2002 | Отправлено: 23:55 15-10-2002 | Исправлено: AZJIO, 15:18 12-02-2021
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Цитата:
    В общем, разговор ни о чём, который будет продолжаться до тех пор, пока не будет поставлена конкретная задача.

    Цитата:
    Полагаю, дальнейшее обсуждение этой темы в данной ветке стоит прекратить, бо оффтоп.
    И как тут можно конкретную задачу ставить, когда она срузу выходит за рамки, а обстраутную невозможно из-за особенности версий и платформы применения.

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 16:48 12-04-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    И как тут можно конкретную задачу ставить, когда она срузу выходит за рамки, а обстраутную невозможно из-за особенности версий и платформы применения.

    Если вопрос в контексте программирования - укажите тему, в которой вы обсуждаете работу над расширением. Все заинтересованные могут продолжить общение по теме там.
     
    Здесь, как вы знаете, обсуждаются вопросы, связанные исключительно с регулярными выражениями. Если вы в процессе работы над своим расширением сталкиваетесь с затруднениями именно в плане регулярных выражений, то размещаете этот вопрос здесь (указывая контекст - диалект и т.п.).
     
    З.Ы. Прошу понять меня правильно. Я ни в коей мере не претендую на модераторские функции. И тем более не указываю вам что делать. Просто выражаю своё мнение. Т.к. не являюсь сторонником сваливания всего в одну кучу.

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 16:57 12-04-2019 | Исправлено: Romul81, 16:58 12-04-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO

    Цитата:
    они не должны быть в виде текста и с запятыми на конце, они должны быть ссылками, потому что они ссылки, потому что это предпросмотр, который все ссылки делает ссылками.


    Цитата:
    сверху, то там написано, что результат должен быть подобен форумному

    - на текущий момент, это две противоречивые задачи. Именно поэтому и просил словесное описание задачи... которая и была уточнена именно здесь:  11-04-2019
     
    Romul81

    Цитата:
    пока не будет поставлена конкретная задача.

    Так ведь она уже поставлена была и решение предложено. Только вот, пока не совсем понимаю предмет дальнейшего обсуждения решения (их было два, с моей стороны)... оно соответствует условиям задачи или нет? Имхо, соответствует. Однако, на истину в последней инстанции, совсем не претендую и допускаю, что вполне мог где-то ошибиться. Вот это и можем выяснить здесь, т.к. предмет обсуждения - регулярные выражения.  
    И да, если дальнейшее обсуждение и расширение задачи, выходит за рамки топика, то вполне можем переместиться в более подходящий топик - не вижу вообще никаких проблем.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:11 12-04-2019 | Исправлено: YuS_2, 17:19 12-04-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Хорошо, давайте пойдём на второй круг. И так, есть задача связанная с регулярным выражением, как её описать, чтобы можно было понять как рег. должно работать, где и как и в каких рамках проверить результат?

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 17:14 12-04-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VVL99 (Пост)

    Цитата:
    И так, есть задача связанная с регулярным выражением, как её описать, чтобы можно было понять как рег. должно работать

     
    Пример: есть текст такой-то. Нужно, чтоб рег. выражение:
    а) меняло его на такой-то
    б) находило / захватывало в группу такую-то его часть
     
    Контекст: ЯП, ну и прочие, относящиеся к теме замечания.
     

    Цитата:
    где и как и в каких рамках проверить результат

    Проверяете, очевидно, в своём IDE, дебаггере, консоли браузера, блокноте, онлайн-сервисе - везде, где вам удобно. Вам главное указать диалект, чтоб вам посоветовали рег. выр. с правильным синтаксисом. А проверки/тестирование - это уже всецело ваша сфера.

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 17:24 12-04-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VVL99

    Цитата:
    есть задача связанная с регулярным выражением, как её описать, чтобы можно было понять как рег. должно работать, где и как и в каких рамках проверить результат?

    Так и описать:
    1. Регулярные выражения используются по правилам javascript.
    2. Сейчас имеется такой код (если имеется, конечно), но желаемого результата нет.
    3. Необходимо получить из этого:
     <здесь пример текста>
    вот это:
     <здесь желаемый результат>
    4. Ещё какие-либо подробности, которые необходимо соблюсти при решении задачи.
     

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:32 12-04-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    YuS_2
    Хорошо, на будущее учту.
    Цитата:
    Контекст: ЯП, ну и прочие, относящиеся к теме замечания.
    А в прочее что обязательно нужно указать?

    Цитата:
    1. Регулярные выражения используются по правилам javascript.
    Версию видимо тоже надо сразу указывать.

    Цитата:
    4. Ещё какие-либо подробности, которые необходимо соблюсти при решении задачи.
    Тут видимо и был подвох, поскольку они есть, но их не видно.
     
    ====
     
    Все предыдущие задачи снимаются.
    Цитата:
    Проверяете, очевидно, в своём IDE, дебаггере, консоли браузера, блокноте, онлайн-сервисе - везде, где вам удобно. Вам главное указать диалект, чтоб вам посоветовали рег. выр. с правильным синтаксисом. А проверки/тестирование - это уже всецело ваша сфера.
    Проверки проведены, исходя из поставленных условий все представленные решения подошли.

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 18:51 12-04-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VVL99

    Цитата:
    А в прочее что обязательно нужно указать?


    Цитата:
    Версию видимо тоже надо сразу указывать.

    Не обязательно, но чем больше подробностей, имеющих значение для задачи, тем точнее решение будет.
    Вы ведь не новичок в программировании и без наших подсказок всё это знаете. То бишь, что касается регэкспов, постановка задачи ничем не отличается от постановки задачи для любого ЯП в целом.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:27 12-04-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VVL99
    Последнюю ссылку подсвечивать?

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 21:13 12-04-2019 | Исправлено: AZJIO, 21:14 12-04-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Нее, всё работает.

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 21:44 12-04-2019
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Теория и методика построения регулярных выражений. Проблема самообразования (The Theory and Methodology of Regular Expressions Building. The Problem of Selfeducation)

    Всего записей: 1326 | Зарегистр. 27-11-2008 | Отправлено: 10:44 14-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые здешние жители.
    В регулярных выражениях ничего не понимаю, но возникла идея их использовать так как другого варианта я не вижу.
    Есть HTML страница в которой нужно искать определённый текст. В странице содержится много строк примерно одинакового содержания:

    Код:
     
    <tr style="display:none"><td class=drug><a href=1.htm><b class=b>12345</b> (12345)</a></td><td class=firm><a href=11.htm><b>Текст</b></a></td></tr>
    <tr style="display:none"><td class=drug><a href=2.htm><b>67890</b></a></td><td class=firm>&nbsp;</td></tr>
    <tr style="display:none"><td class=drug><a href=3.htm><b class=b>12345<SUP>&reg;</SUP></b> (12345<SUP>&reg;</SUP>)</a></td><td class=firm colspan=2><i></i> <a href=33.htm>Текст</a></td></tr>
    <tr style="display:none"><td class=drug><a href=4.htm>67890</a></td><td class=firm colspan=2>Текст</td></tr>
     

    Текст для поиска может быть: "123", "34", "890"...
    Вот нужно выражение которое или делит строку на три части:

    Код:
     
    <tr style="display:none"><td class=drug><a href=1.htm><b class=b>
     


    Код:
     
    12345</b> (12345)
     


    Код:
     
    </a></td><td class=firm><a href=11.htm><b>Текст</b></a></td></tr>
     

    а далее я уже ищу текст в средней части или выражением уже искать текст. Если текст полностью или частично найден, то заменять в первой части:

    Код:
     
    <tr style="display:none">
     

    на

    Код:
     
    <tr style="display:block">
     

    Как видно и первая часть изменяется и вторая может быть с тэгами, которые не должны учитываться. В крайнем случае полученные строки я могу обработать собственными силами, а затем соединив три части, заменить в исходной странице.
    Вот такая вот задача.
    Буду признателен за готовое решение ибо, как сказал, в выражениях совсем не разбираюсь.
    Спасибо.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 08:33 30-04-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N

    Цитата:
    как сказал, в выражениях совсем не разбираюсь.

    html разметка и "чистые" регэкспы - работать будут очень плохо, а иногда и не будут вовсе, учитывая dom-структуру, в которой возможны множественные вложения элементов.
    В общем, необходимо подбирать ЯП + регэкспы, которые умеют работать с текстом, а в идеале и напрямую с тегами...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:45 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Вот об этом я и говорю. По крайней мере хоть что-то попробовать. Как говорил, достаточно разделить на три части. Даже допустимо делить по:

    Код:
     
    <tr style="display:none"><td class=drug><a href=1.htm>
     

    где только ссылка на страницу меняется и начиная с тэга

    Код:
     
    </a>
     

    где кончается искомый текст.
    Другого варианта как выражения я не увидел. Средствами Паскаля я такое не сделаю.
     
    Добавлено:
    Известные мне модули для парсинга HTML на Паскале не подходят никак, они только теги выдирают.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 08:50 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Часть проблемы сам решил:

    Код:
     
    <tr style="display:none"><td class=drug><a href=(\w).htm><b>
     

    Ищет там где есть только "<b>". А что нужно поставить чтобы искало ещё и "<b class=b>"?

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 11:42 30-04-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N (Пост)

    Цитата:
    Вот такая вот задача.  

    Ох, очень неочевидно всё... Реализовывать нужно программно, раз нет возможности использовать нормальный парсер. Попробую описать логику (если я правильно понял вашу задачу).
     
    1. Обявляем RegExp для поиска:
    (123|34|890) - вы здесь не упомянули, должны ли это быть числа, либо набор цифр, присутствующих в числе. Если числа, то \b(123|34|890)\b
     
    2. Изымаем из текста строку таблицы, деля её попутно на группы:

    Код:
    (<tr(?:(?!</?t[rd]).)*)(<td(?:(?!</?t[rd]).)*</td\s*>)((?:(?!</?tr).)*</tr\s*>)

    Во вторую захватываемую группу попадает только первая ячейка строки таблицы (насколько я понял, только в ней может находиться интересующая вас информация).
    Тестируем эту группу на соответствие рег.выр-ю из первого пункта. Если true, то
     
    3. В первой группе заменяем <tr style="display:none"> на <tr style="display:block"> и возвращаем конкатенированную строку по типу:
    изменённая первая группа + оригинальная вторая группа + оригинальная третья группа
     
    Всё. Что касается особенностей синтаксиса в pascal - смотрите документацию используемой библиотеки. Сам синтаксис здесь универсальный, но нужно смотреть нюансы по флагам. Вкратце - поиск жадный и точка находит окончание строки.

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 11:48 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Сейчас всё это проверяю в режиме поиска в AkelPad. До реализации на Паскале далеко так как придётся искать незная что не зная на чём. Вот поэтому вначале нужно само выражение.
    Строка
    Код:
    (<tr(?:(?!</?t[rd]).)*)(<td(?:(?!</?t[rd]).)*</td\s*>)((?:(?!</?tr).)*</tr\s*>)
    почему-то не дала результата, но натолкнула на мысль.  

    Код:
     
    <tr style="display:none"><td class=drug><a href=(\w).htm><b(.*?)>
     

    находит всё до нужного текста.
    А как найти от:

    Код:
     
    </a></td><td class=firm>...
     

    и до конца строки?
     
    Но и строку
    Код:
    (<tr(?:(?!</?t[rd]).)*)(<td(?:(?!</?t[rd]).)*</td\s*>)((?:(?!</?tr).)*</tr\s*>)
    попробую на конкретной библиотеке.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:02 30-04-2019 | Исправлено: Aleksandr N, 12:05 30-04-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N (Пост)

    Цитата:
    Сейчас всё это проверяю в режиме поиска в AkelPad. До реализации на Паскале далеко так как придётся искать незная что не зная на чём.

    С этого и надо было начинать.
    Выложите под кат тестируемый контент и укажите критерий поиска (те самые цифры).

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 12:08 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Так я выше и выложил четыре часто используемых строки цифрами заменив возможный текст. Искать в этом тексте всё что угодно.
    Ну например:

    Код:
     
    <tr style="display:none"><td class=drug><a href=2.htm><b>Иванов</b></a></td><td class=firm>&nbsp;</td></tr>
     

    Искать: "иван" или "ван" или "нов".
     
    Добавлено:
    Проблему присутствия тегов в строке поиска типа:

    Код:
     
    12345<SUP>&reg;</SUP></b> (12345<SUP>&reg;</SUP>)
     

    я думаю решу. Но можно и её почистить выражением.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:16 30-04-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N (Пост)

    Цитата:
    Ну например:  
     
    Код:
     
    <tr style="display:none"><td class=drug><a href=2.htm><b>Иванов</b></a></td><td class=firm>&nbsp;</td></tr>  
     
     
    Искать: "иван" или "ван" или "нов".  

     
    Найти:

    Код:
    <tr style="display:none">(?=<td\b(?:(?!</?td|(?:иван|ван|нов)).)*(?:иван|ван|нов))

     
    Заменить:

    Код:
    <tr style="display:block">

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 12:28 30-04-2019
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru