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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 98 99 100

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

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
    AkulaBig

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

    Цитата:
    Поэтому пока непонятно, в чем именно задача и даже

    Задача найти НЕ ASCII символ.

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 05:54 29-08-2025
    www_world

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

    Цитата:
    Задача найти НЕ ASCII символ.

    [^\x00-\x7F]
    a если еще и русский алфавит нужно отбросить (то есть всего отбрасываем 128+33*2=194 символа из 256 символов ANSI), то
    [^\x00-\x7Fа-яё]
    или
    [^\x00-\x7F\xA8\xB8\xC0-\xFF]
    (для не-юникод программ)

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 06:06 29-08-2025 | Исправлено: www_world, 07:04 29-08-2025
    AkulaBig

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Вот это правильно:

    Цитата:
    [^\x00-\x7Fа-яё]

    А вот это неправильно почему-то:
    [^\x00-\x7F\xA8\xB8\xC0-\xFF]
    Результат тот-же, что и у меня.
    Может я неправильно объяснил? Мне надо в ASCII имени файла найти юникодные символы. То-есть смешанные символы. Насколько я понимаю, выражение [^\x00-\x7Fа-яё] соответствует моей задаче?

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 07:15 29-08-2025
    www_world

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

    Цитата:
    А вот это неправильно почему-то:
    [^\x00-\x7F\xA8\xB8\xC0-\xFF]  


    Цитата:
    (для не-юникод программ)

    Вам сначала нужно найти такую программу. Раньше их было навалом. Многие авторы делали обе версии своих программ - юникод и не-юникод.
    Для юникод программ нужно использовать юникод представление символов (то есть двухбайтовое) в случае с кириллицей, типа \x0000 или \u0000 и тд в зависимости от конкретного синтаксиса регэкспов.

    Цитата:
    Мне надо в ASCII имени файла найти юникодные символы.  

    Такого не бывает в природе

    Цитата:
    То-есть смешанные символы.  

    Смешанные символы не имеют отношения к ASCII. Просто потому, что они из юникод кодировки и оные символы существуют для разных языков (включая кириллические), а не только для романских.

    Цитата:
    Насколько я понимаю, выражение [^\x00-\x7Fа-яё] соответствует моей задаче?

    Абсолютно не соответствует.
    Пример регэкспа для поиска русских суррогатных пар.

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 07:50 29-08-2025 | Исправлено: www_world, 08:04 29-08-2025
    AkulaBig

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

    Цитата:
    Абсолютно не соответствует.

    Мне не надо суррогатные символы искать. Мне достаточно, что это не ASCII-символы.

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 08:39 29-08-2025
    www_world

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AkulaBig
    Кириллица (вся, а не только русский алфавит), все символы романскх языков (4 таблицы символов), кроме английского алфавита и тд (всего более 100 таблиц символов) - находятся за пределами таблицы ASCII.
    ASCII - это фактически набор символов DOS + управляющие символы (первые 20 из таблицы), фактически бесполезные для текста. То есть, всего около 106 символов.
    Но я рад, что теперь вы решили все свои проблемы и сможете находить файлы, например, с угловыми кавычками в имени. Без регэкспа для этого не обойтись.
     
    Однако даже мне нужны типа французкие буквы, для которых не oбязательны не только суррогатные пары, но и юникод (они все находятся в 8-битовой таблице кодировок вместе с английским алфавитом).

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 09:20 29-08-2025 | Исправлено: www_world, 09:21 29-08-2025
    AkulaBig

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

    Цитата:
    Кириллица ... находятся за пределами таблицы ASCII.

    Я курсе, что входит в таблицу ASCII.

    Цитата:
    Однако даже мне нужны типа французкие буквы

    На данный момент меня вполне устраивает решение вопроса. Так что спасибо за помощь.
     
    Добавлено:
    www_world
    А вот уже проблемка возникла после тестирования. Смешанные файлы не тот алгоритм. Получается любой файл, где в имени присутствует и латиница и кириллица, выделяется. Это не совсем то, что нужно. А можно по словам разбор делать, а не по символам?

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 09:50 29-08-2025
    www_world

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

    Цитата:
    Смешанные файлы не тот алгоритм.

    Разумеется. Ибо вы искали любые символы, кроме сиволов DOS и русского алфавита.

    Цитата:
    Получается любой файл, где в имени присутствует и латиница и кириллица, выделяется.

    для выражения
    Цитата:
    [^\x00-\x7Fа-яё]

    это мягко говоря не так.

    Цитата:
    А можно по словам разбор делать, а не по символам?

    слово может состоять из одного символа.

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 16:22 29-08-2025 | Исправлено: www_world, 16:23 29-08-2025
    AkulaBig

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

    Цитата:
    для выражения
    [^\x00-\x7Fа-яё]
    это мягко говоря не так.

    Это правило у меня называется Name has non-ASCII characters и отлично работает. Обнаружил еще один файл с символами non-ASCII:
    17_«КК»_2010_–_ОВ.СО.1.doc
    Конечно это не совсем то, что надо. То-есть не Юникод. Но правилу соответствует. Так что пока пусть остается.
    Сейчас я говорю про смешанные символы, правило для которых сделал по туториалу yozhic.
    Правило Name has mixed characters вот такое:
    ([a-z][а-яё]|[а-яё][a-z])
    Ну то-есть простейший набор символов. И теперь все имена, где присутствуют одновременно кириллица и латиница, подсвечиваются.

    Цитата:
    слово может состоять из одного символа.

    Да. И даже если попытаться искать только схожие по написанию символы типа "C", "С",... похоже фиг сделаешь правило. Наверное просто удалю эту подсветку.

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 16:44 29-08-2025 | Исправлено: AkulaBig, 16:46 29-08-2025
    www_world

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

    Цитата:
    правило для которых сделал по туториалу yozhic ... ([a-z][а-яё]|[а-яё][a-z])

    тогда все вопросы - к нему

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 17:19 29-08-2025
    AkulaBig

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Он просто как пример настройки плагина PCREsearch привел.

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 17:23 29-08-2025
    www_world

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AkulaBig
    Мне без разницы. Все вопросы и отзывы по работе конкретных регэкспов - к их авторам.

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 17:51 29-08-2025
    AkulaBig

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Тут хами не хами, а вопрос навряд-ли решаемый.

    Всего записей: 6798 | Зарегистр. 11-03-2003 | Отправлено: 19:18 29-08-2025
    drPeps

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите составить такой RegExp: есть html-код, замусоренный атрибутами тэгов типа:
     
    data-role="commentFeed"
    data-ipstooltip=""
    data-ipshover=""
    data-ipshover-target="https://бла-бла-бла"
    … итп
     
    Мне эти атрибуты не нужны, они только мешаются перед глазами. Задача: найти все строки, начинающиеся с "data-", после которых идёт всё, что угодно (+) знак "=" (+) что-то между кавычек (или просто пустые кавычки), т.е. общий шаблон должен быть таким:
     
    data-X="X"
     
    где X означает всё, что угодно (любая последовательность символов). Захватываться должна вся эта строка, то есть: [data-X="X"] (символы [] обозначают захваченное).

    Всего записей: 188 | Зарегистр. 16-12-2004 | Отправлено: 23:30 05-09-2025
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    drPeps
    data-[^=]+="[^"]*"

    Всего записей: 1407 | Зарегистр. 17-01-2011 | Отправлено: 00:54 06-09-2025
    drPeps

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to Jonmey
    Да, работает, спасибо большое!

    Всего записей: 188 | Зарегистр. 16-12-2004 | Отправлено: 10:56 06-09-2025 | Исправлено: drPeps, 10:57 06-09-2025
    www_world

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

    Цитата:
    Мне это не осилить. Как название Вечерняя Москва, 1937, № 210 (4141), 13 сентября - Коллектив авторов  13.09.1937 (6306156) (здесь уже другое расположение информации) привести к названию Вечерняя Москва 1937-210? Под какую формулу (шаблон) надо подвести (заменить это на то)?

    Начните с самого простого пути - при составлении используйте по максимуму исходные строки (точнее, их части) в том виде, котором они и есть. Речь идет о тех частях строк, которые неизменны.
    Например ваша строки вида
    Вечерняя Москва, 1937, № 210 (4141), 13 сентября - Коллектив авторов  13.09.1937 (6306156)
    вероятно имеют неизменными выделенное зеленым, включая пробелы
    Вечерняя Москва, 1937, № 210 (4141), 13 сентября - Коллектив авторов  13.09.1937 (6306156)
    Выделенное красным у вас изменяется.
    Выделенное зеленым пишем в регэкспе в неизменном виде, а выделенное красным - регэксп-выражениями.
    При этом, вы можете заметить, что для составления целевого конечного названия не используется часть исходного названия после цифры 210.
    Итак, пишем регэксп. поскольку мы разбираем строку с самого начала, то ставим знак домика ^, а далее неизменную часть строки до первой изменяемой (год выпуска - это цифры следующие подряд, которые обозначим регэкспом \d+ [одна и более цифр подряд]):
    ^Вечерняя Москва, \d+
    Эти цифры нам потом потребуются в новом названии, поэтому сделаем из них группу
    ^Вечерняя Москва, (\d+)
    добавляем следующую неизменную часть строк и далее снова следует некий изменяющийся цифровой номер, который нам также потребуется в новом названии - и который мы обозначим тем же способом как и предыдущий (\d+)
    ^Вечерняя Москва, (\d+), № (\d+)
    Все что идет в строках дальше не используется в новых названиях, а потому интересует нас мало и мы можем весь остаток строки обозначить как .* (возможны любые символы). В конце регэкспа поставим регэксп конца строки $ (то есть, ограничим поиск одной полной строкой до самого ее конца.
    ^Вечерняя Москва, (\d+), № (\d+).*$
    Регэксп поиска составлен.
    Теперь составляем строку замены. Тут проще. Заменяем на строку
    Вечерняя Москва $1-$2
    Вечерняя Москва -неизменная часть в новых названиях - поэтому пишем ее как есть.
    $1  - первая группа цифр в скобках в регэкспе поиска (\d+)
    $2  - вторая группа цифр в скобках в регэкспе поиска (\d+)
    И все.

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 05:38 01-01-2026 | Исправлено: www_world, 05:44 01-01-2026
    www_world

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

    Цитата:
    Не подскажете, как переделать название (одна из группы газет)
     Антракт, [еженедельная газета], (год 4-й) , 1867, № 20, 21 мая  21.05.1867 (6152186)   в  
    Антракт 1867-20 ?

    Все то же самое, что и в предыдущем случае
     
    Антракт, [еженедельная газета], (год 4-й) , 1867, № 20, 21 мая  21.05.1867 (6152186)
    зеленое - неизменная часть строки, которую мы можем использовать как есть в строке замен.
    красное - изменяемая часть строки, нужная нам, ее нужно заменить регэкспами (от regular expression - регулярное выражение - строка поиска позволяющая искать строки или их части по определенным признакам, эта строка содержит как минимум либо один символ являющийся абстрактным представлением текстового или бинарного символа и/или их комбинаций, либо условие относительно взаимного расположения таковых; то есть, попросту - регэксп - текстовый/символьный шаблон, трафарет, составленный по особым правилам, по которому ищут/распознают символы/строки/куски текста с целью удаления/замены/перемещения  и тд.Регэксп - единица вашего текстового контента - например строка - как минимум, часть которой представлена с пом. абстрактных символов).
    Поскольку каждая ваша строка имеет уникальный (встречается 1 раз в каждой строке) символ №, это позволяет упростить целевой регэксп, не перечисляя все его куски (чтобы однозначно идентифицировать нужные вам группы цифр).
    Чтобы не писать в явном виде в строке замен первую неизменную часть сткоки (название газеты), в строке поиска сделаем из нее группу (не забываем домик вначале, поскольку анализируем все строки строго с начала каждой)
    ^(Антракт)
    далее, до нужного нам первого номера (1867) идет фигня нам ненужная (синее) - так и обозначаем ее .* (может быть любой набор символов) и за ним группа нужных нам цифр (\d+). В силу того, что исользую самый простейший синтаксис (специально для объяснения), то после .* нужно добавить пробел (как в исходной строке, чтобы повысить избирательность для первой группы цифр (мы ее задали произвольной длины - от одной цифры и более), а регэксп .* является жадным и старается захватить как больше символов, если у него есть выбор и без указанного пробела он захватит и цифры нашего номера, оставив лишь одну последнюю.
    ^(Антракт).* (\d+)
    Альтернативой является прямое указание числа цифр в этой группе (если число цифр неизменно во всех строках)
    ^(Антракт).*(\d{4})
    А вот далее наш репер - символ № да еще и в окружении пробелов и запятой, что делает этот кусок еще более уникальным. Добавляем его в регэксп в явном виде. А сразу после него вторая нужная нам группа цифр
    ^(Антракт).* (\d+), № (\d+)
    Все что дальше - нам не интересно .* и не забываем конец строки $
    ^(Антракт).* (\d+), № (\d+).*$
    или
    ^(Антракт).*(\d{4}), № (\d+).*$
    Регэксп строки поиска готов. Он имеет три группы (каждая в круглых скобках).
    Соответственно строка замен
    $1 $2-$3
    Вот и все.
     
    __________________________
    И да, вот например, регэксп, работающий на всех трех приведенных вами примерах

    Цитата:
    Антракт, [еженедельная газета], (год 4-й) , 1867, № 20, 21 мая  21.05.1867 (6152186)
    Вечерняя Москва, 1937, № 210 (4141), 13 сентября - Коллектив авторов  13.09.1937 (6306156)
    Вечерняя Москва, 1 апреля, 1973, № 77 (15035) - Коллектив авторов  01.04.1973 (6302240)

    Найти
    ^([^,]+).*(\d{4}), № (\d+).*$
    Заменить на
    $1 $2-$3
    __________________
    Если вы приведете более длинный список названий, то возможно удастся составить один регэксп и для них всех.

    Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 21:26 01-01-2026 | Исправлено: www_world, 22:00 01-01-2026
    kamenkapenza



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world, большое спасибо! Буду разбираться, пытаться осмыслить. Я в этом плане очень и очень тупой.  
     

    Всего записей: 730 | Зарегистр. 23-05-2021 | Отправлено: 12:59 02-01-2026 | Исправлено: kamenkapenza, 12:59 02-01-2026
    kamenkapenza



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Архитектурно-художественный еженедельник (№ 1) - Коллектив авторов  01.04.1915 (6257204) превратить в  
     Архитектурно-художественный еженедельник 1915-01. Похоже, что тут как то надо дать понять ЭВМ, что тут 3 слова, не так как было с "Антрактом" (1 слово) и "Вечерней Москвой (2 слова)
    К сожалению эта формула не помогла, вообще ничего не поменялось. Очень жаль, что нет нужной в этом деле  программы (скрипта), никакой гениальный программист не придумал. Суть программы: написал в ней название файла до, потом желаемое название, и она выдала бы формулу регулярного выражения для текущей задачи, которое можно было бы вставлять в Тотал коммандер для переименования (группового переименования)

    Всего записей: 730 | Зарегистр. 23-05-2021 | Отправлено: 22:26 02-01-2026 | Исправлено: kamenkapenza, 22:26 02-01-2026
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 98 99 100

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


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

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

    LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

    Рейтинг.ru

    Рейтинг.ru