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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 89 90 91 92 93 94 95 96 97

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

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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как вопрос зашёл
    YuS_2

    Цитата:
    Тут бы не код, а словесное описание того, что требуется получить...
    Если словесное, то это ещё сложнее. Лично моя задача, сделать онлайн предпросмотр сообщения, НО, что бы он соответствовал движку руборды, а так есть недостатки, о которых я не упоминал в практическом примере.
    Если задача всё ещё интересно, то:
    http://ya.ru/7, http://ya.ru/8  
    первая ссылка будет с запятой в адресе, а вторая просто текстом, из-за нехватки доп. символа (пробела).
    А вообще ваши варианты очень хорошие и интересные.
     
    Добавлено:
    http://forum.ru-board.com/topic.cgi?forum=2&topic=2753&start=1360&limit=1

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 15:23 11-04-2019 | Исправлено: VVL99, 15:38 11-04-2019
    Romul81



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

    Цитата:
    Если задача всё ещё интересно, то:  
    http://ya.ru/7, http://ya.ru/8  

     
    Давайте по-порядку. Устраивает ли вас решение из следующего поста:
    Romul81 (Пост)

    Цитата:
    Таким образом, для продакшена код следующий:  
    Регулярка:  
    //
    Функция реплейсер:  
    //
    Использование:
    //

     
    Если да, то можно двигаться дальше в плане устранения недостатков, путём усложнения регулярки (чтоб отрабатывались те ситуации, о которых вы упомянули).
     
    И ещё не понятен момент (правда это уже не по теме регулярных выражений). Даже если вы прикрутите такой продвинутый предпросмотр, как вы сможете контролировать сам постинг, ведь содержимое textarea конвертируется уже движком форума при submit?
    Единственный вариант, который приходит на ум - форма предпросмотра должна возвращать в textarea (т.е. замещать его содрежимое) уже пофикшенный BB-Code. А это ещё тот гемор, т.к. надо выполнять обратное преобразование HTML --> BB-Code.
     
    Правильнее, наверное, будет следующая последовательность:
    1) Получение оригинального BB-Code из textarea
    2) Применение фиксов (ссылки и всё, что вы там задумали). Только с выводом тоже в BB-Code, а не HTML. Кэширование этого получившегося кода.
    3) Конвертирование в HTML и его рендеринг.
    4) Если в форме предпросмотра предусмотрена кнопка submit, то отправлять на сервер кэшированный BB-Code из второго шага.
    Если возврат в textarea, то замена старого кода на новый BB-Code из кэша.
     
    Как-то так...

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 16:06 11-04-2019
    AZJIO



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

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 16:12 11-04-2019
    Romul81



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

    Цитата:
    там смайлы в регулярке, перед отправкой сними галку "Разрешить смайлики?" под постом

    У меня без смайлов. Галку снимал изначально. Очередной глюк.
    Вот регулярка:

    Код:
    var re = /\[url=(?:(?:https?|ftp):\/\/[^\s/$.?#].\S*)?\s*\](?:(?!\[\/url\]).)*\[\/url\]|((?:(?:ftp|https?):\/\/|(www\.))[^\s/$.?#].\S*)/gi;

    Попробуйте ещё код из под ката (хотя там ES6).

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 16:17 11-04-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81 (пост)
    Цитата:
    Давайте по-порядку. Устраивает ли вас решение из следующего поста:
    Romul81 (Пост)  
    Он работает хорошо, как и другие варианты представленные на предыдущей странице.
    Но вторая ссылка (после запятой и пробела) показывается как ссылка, а после отправки сообщения, на форуме она будет текстом.

    Цитата:
    если вы прикрутите такой продвинутый предпросмотр
    Сам предпросмотр уже существует и действует в расширении для хрома (кстати я давал видео с ним чуть раньше).
    https://jpegshare.net/images/2e/b0/2eb037353834456fed4469b10e9ec930.png
    Кстати проект общественный, я его делаю как бы сам, но если есть желание я не откажусь, на пользу дела.

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



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

    Цитата:
    Если словесное, то это ещё сложнее.

    Часто словесное описание алгоритма приводит к результату скорее, чем попытки разбора кода...
     

    Цитата:
    первая ссылка будет с запятой в адресе, а вторая просто текстом, из-за нехватки доп. символа (пробела).

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

    Код:
    var a = document.querySelectorAll(".post");
    a[a.length-1].innerHTML = post.value.replace(/(\=)?(?:(?:ftp|https?):\/\/|www\.)[^\s,\]]+/gi, function($0, $1){
        return $1 ? $0 : "<a href='"+$0+"'>"+$0+"</a> ";
    });

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

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

    Цитата:
    опять не уверен, что правильно понял суть проблемы
    Перефразирую:
    В текстовом поле ответа мы пишем разнообразные сочетания ссылок текстом и ссылок с тегами, пример - http://forum.ru-board.com/postings.cgi?action=edit&forum=2&topic=2753&postno=1361
    Затем отправляем сообщение и видим, что некоторые ссылки остались ссылками, а другие в виде текста, пример - http://forum.ru-board.com/topic.cgi?forum=2&topic=2753&start=1360&limit=1
    В данном примере только последняя ссылка идёт текстом, зато предпоследняя с запятой в адресе.
    Задача:
    Необходимо создать рег. выр., которое в выводе (в консоле или в любом другом блоке) заранее покажет результат идентичный форумному.
    Согласитесь, если бы я сразу такое написал, никто бы даже не стал пробовать, уж больно заковыристая задачка.

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 19:43 11-04-2019 | Исправлено: VVL99, 19:47 11-04-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VVL99
    Надо в регвыре сделать игнор запятой [^,\s]+. А также не знаю возможно ли но если в регулярке используется некий контекст после ссылки, а его нет, то попробовать добавить у переменной, которая содержит введённый контекст, добавить к ней перенос строки, для вывода, а в итоговом при отправке можно удалить последние 2 символа.
    Кстати, можно сделать запрет запятой если за ней пробел, то есть запретить её в конце ссылки.
     
    JavaScript: Конкатенация
    var a = "текст";
    a += " ";
    так????
     

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

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 20:16 11-04-2019 | Исправлено: AZJIO, 20:27 11-04-2019
    Romul81



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

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

     
    Полагаю, дальнейшее обсуждение этой темы в данной ветке стоит прекратить, бо оффтоп.
    Задача, практически полностью лежит в плоскости программирования Javascript.
    У вас в ресурсах есть каталог со скриптами - http://forum.ru-board.com/board/Cheery/js/
    Кнопка "отправить" запускает функцию Formchecker()
    Все функции находятся в глобальной зоне видимости. Там есть всё необходимое для проверки/изменения данных до того, как они дойдут до submit.
    Отдебажьте весь процесс пашагово. Код там не сложный и его мало. Пусть ваше расширение патчит эти функции, внося свою логику и решая те или иные имеющиеся проблемы.
    Если затруднение будет по конкретным моментам, связанным с регулярками - спрашивайте. Но как можно проще - типа есть это, надо получить это.
    Всё решаемо, более чем уверен (по быстрому взглянув на код).
    Так что, удачи!

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 21:09 11-04-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кроссворды
       
     
    AZJIO
    Цитата:
    так????
    Надо самому поэкспериментировать, у меня уже много ваших вариантов, буду разбирать.
     

    Цитата:
    силы потрачены не по делу.
    Нее, я думаю это всё было очень полезно и не только для меня.
     
    Romul81

    Цитата:
    Полагаю, дальнейшее обсуждение этой темы в данной ветке стоит прекратить, бо оффтоп.  
    Задача, практически полностью лежит в плоскости программирования Javascript
    Практическая задача была только для ясности, просто некоторые выражения могут не подойти для JS и надо сразу пояснить где и зачем выполняется задача, опять же я пользуюсь сжатием кода, некоторые выражения ломаются при разжатии, но главное во всём этом, это разбор выражения и кое-что уже стало понятнее.
    Цитата:
    Кнопка "отправить" запускает функцию Formchecker()  
    Все функции находятся в глобальной зоне видимости. Там есть всё необходимое для проверки/изменения данных до того, как они дойдут до submit.
    Сейчас в браузере+расширение не одна область видимости, но это не проблема, я просто забыл что может быть проще именно к форумным скриптам обращаться, так как привык полагаться на свой код. Спасибо за подсказку.

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 21:42 11-04-2019 | Исправлено: VVL99, 23:29 11-04-2019
    Romul81



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

    Цитата:
    просто некоторые выражения могут не подойти для JS

    JS тоже разный бывает. В новом стандарте появились некоторые интересные фичи, самая ценная из которых - заглядывание назад переменной длины. Это помимо хорошей поддержки юникода (диапазоны, скрипты и т.д.)
     
    Мануал с примерами
    Крутая шпаргалка (актуальная)
     
    Тут вопрос в том, планируете ли вы поддерживать старые браузеры в своём расширении. Эти фичи стали доступны в хроме, начиная с 64-й версии.
     
    VVL99 (post)

    Цитата:
    опять же я пользуюсь сжатием кода, некоторые выражения ломаются при разжатии

    Ну это всецело вопрос инструментов, которыми вы пользуетесь. Я не знаю, что такое сжатие и разжатие Javascript-кода. Но современные (актуальные) минификаторы вполне качественно справляются с этой задачей.

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 23:07 11-04-2019
    YuS_2



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

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

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

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

    Учитывая то, что ссылки обрамленные тегами, по условию, регэксп обрабатывать не должен, то примерно так:

    Код:
    var a = document.querySelectorAll(".post");  
    a[a.length-1].innerHTML = post.value.replace(/(\=)?(?:(?:ftp|https?):\/\/|(www\.))[^\]\s]+(?= |\n)/gi, function($0, $1, $2){  
        return $1 ? $0 : "<a href='"+($2?'http://':'')+$0+"'>"+$0+"</a>";  
    });

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Да, теперь запятая там где надо.

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

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



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

    Цитата:
    (?= |\n)

    так как там конец строки, то может (?=\s|\z)

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

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 11:59 12-04-2019 | Исправлено: AZJIO, 12:00 12-04-2019
    YuS_2



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

    Цитата:
    так как там конец строки, то может (?=\s|\z)

    Да, для универсальности, можно и так упростить (?=\s)
    А вот \z - не поддерживается в ECMAScript...
    и это тоже:

    Цитата:
    управляющие последовательности \a, \e, \l, \u, \L, \U, \E, \Q, \A, \Z, \z и \G

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    А может в шапку добавить типа некоторые отличие рег.выр., и описать распространённые флаги которые не поддерживаются в каких либо движках, в том числе и просмотр назад/вперёд, чтобы не наступать на одни и те же грабли.
     
    По поводу рег.выр. для ссылок, тогда обязательно добавлять пробел или \n в конец строки, иначе последнюю ссылку никогда ловить не будет с таким окончанием (?=\s).
     
    А если включить флаг обработки по строками типа (?m) (вместо /gi /mi, хотя у меня и так работает), и использовать (?=\s|$)
     
    В шапке "Шпаргалки: от Dave Child" там для какого движка? Там указаны \< \> в PCRE такого нет.

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



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

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

    wikipedia
    github
     
    AZJIO (Пост)

    Цитата:
    А если включить флаг обработки по строками типа (?m), и использовать (?=\s|$)

    Не надо включать флаг m, (?=\s|$) будет достаточно. \s будет подхватывать перенос строки, а $ конец стринга.
     
     
    Добавлено:
    AZJIO (Пост)

    Цитата:
    В шапке "Шпаргалки: от Dave Child" там для какого движка? Там указаны \< \> в PCRE такого нет.

    Похоже на какую-то солянку. Некоторые особенности присущи Perl/PCRE, некоторые Boost с расширениями / GNU.  
    Конкретно \< \> есть в GNU (только ASCII) и Boost (с флагами ECMA / extended / egrep / awk - Unicode).

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 13:14 12-04-2019 | Исправлено: Romul81, 13:15 12-04-2019
    YuS_2



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

    Цитата:
    А может в шапку добавить типа некоторые отличие рег.выр.

    Наверное, это будет лишним... слишком объемным может получиться текст.  
    Да это, собственно, ведь справочные данные, всего лишь. Можно ссылку на книжку, а там кому понадобится, уже сможет воспользоваться...
     

    Цитата:
    иначе последнюю ссылку никогда ловить не будет с таким окончанием (?=\s).

    так ведь, в задаче именно это и требовалось...

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



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

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

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 16:24 12-04-2019
    Romul81



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

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

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

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 16:31 12-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 89 90 91 92 93 94 95 96 97

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru