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

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



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

    Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 17:34 14-03-2020 | Исправлено: Xant1k, 09:53 28-06-2020
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Find:
    http://(.*)
    Replace with:
    https://\1

    Всего записей: 1553 | Зарегистр. 01-11-2004 | Отправлено: 19:56 14-03-2020
    Xant1k



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

    Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 21:13 14-03-2020 | Исправлено: Xant1k, 09:53 28-06-2020
    iglezz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Xant1k
    http://forum.ru-board.com/(.*) --> http://forum.ru-board.com/\1

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 21:29 14-03-2020
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Xant1k написал(а)
    Цитата:
    Помогите составить регулярку для редиректа


    Цитата:
     изменить протокол с https на http при открытии ссылок.

    А для чего это нужно? Если бы к примеру спрашивали для .htaccess  я бы понял (кстата если воспользоваться поиском, то для него куча сайтов выдаст с такой регуляркой), а так в чём проблема просто без всякой регулярки заменить даже в обычном блокноте?
    Цитата:
    Find:  http://(.*)  Replace with:  https://\1

    тут местами они перепутаны.

    ----------
    Раздачи и акции

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 00:02 15-03-2020
    inapht

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как указать чтобы искало нужное мне число в строках имеющих заданный текст 'inv_grid_x'?

    Код:
     
    ищу такие строки с нужным мне числом. Например 5 или 27
    inv_grid_x               = 27  
    или
    inv_grid_x=5  
     

    Проблема в том что там могут быть пробы и длинный пробел.
     
    Добавлено:
    inv_grid_x(.*)=(.*)5
    Такое выражение вроде бы находит все нужные строки с числом 5, но попадаются и лишние с числами 15, 55 и тп.
    Как сделать чтобы искало конкретное число?

    Всего записей: 1614 | Зарегистр. 07-08-2007 | Отправлено: 12:03 15-03-2020 | Исправлено: inapht, 12:22 15-03-2020
    YuS_2



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

    Цитата:
    Как указать чтобы искало нужное мне число в строках имеющих заданный текст 'inv_grid_x'?  


    Код:
    inv_grid_x[^=]*=[^\d\n]*(\b5\b|\b27\b)[^\d\n]*$

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:51 15-03-2020
    inapht

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    не, вот такое работает inv_grid_x(.*)=(.*)\bчисло\s
    \s - срабатывает не только на пробелы, но и на переход строки?

    Всего записей: 1614 | Зарегистр. 07-08-2007 | Отправлено: 18:06 15-03-2020
    YuS 2



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

    Цитата:
    не

    Вы бы вместо "многословного" отрицания, задачу лучше описали бы правильнее/подробнее... а потом уже про регулярки можно поговорить.
    Если искать надо было строки, содержащие определенное число, то зачем нужен ещё и перевод строки?  
    И т.д.
     

    Цитата:
    \s - срабатывает не только на пробелы, но и на переход строки?

    \s - можно записать так: [ \f\n\r\t\v]

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:58 15-03-2020
    Jonmey

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

    Цитата:
    вот такое работает inv_grid_x(.*)=(.*)\bчисло\s

    например такое
    inv_grid_x([^\d\n\r\w=]*+)?=[ ]*число\1*+
    работает почти в 6 раз быстрее вашего.

    Всего записей: 1365 | Зарегистр. 17-01-2011 | Отправлено: 00:58 16-03-2020
    EmBroidery

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Коллеги, просветите.
    Я бы хотел после дробного значения в дюймах вставлять в скобках его значение в миллиметрах, используя для этого lookbehind в JS:
    (?<=(\d+)\/?(\d*)")
    Числитель попадает в первую захваченную группу, знаменатель во вторую.
    И это без проблем отрабатывает в случаях 1/2, 3, 4/5 и т.п.
    Но при двузначном целом значении (например 12), в первую группу попадает не 12, а 1. Соответственно, во вторую - двойка.
    Возможно это как-то связано с обратным порядком во время поиска.  
    Знаю как решить эту задачу другими способами. Но в целях обучения, хотелось бы разобраться именно в данном примере.

    Всего записей: 20 | Зарегистр. 31-03-2010 | Отправлено: 09:52 25-03-2020
    YuS 2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EmBroidery (пост)
    Цитата:
    Я бы хотел после дробного значения в дюймах вставлять в скобках его значение в миллиметрах, используя для этого lookbehind в JS

    Начать надо с указания приложения в котором это происходит. Собственно, у меня работает и с целыми числами, например, в javascript (Chrome)...
    В некоторых версиях JS (javascript или JScript ?) просмотр назад не работает.
    Непонятно, зачем значение разбивать на две группы? Можно сделать так:

    Код:
    что: (\d+/?\d*")
    чем: $1(X мм)

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 10:35 25-03-2020
    Mavrikii

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

    Цитата:
    Но при двузначном целом значении (например 12), в первую группу попадает не 12, а 1. Соответственно, во вторую - двойка.

    ничего не путаете? нормально работает, либо показывайте пример
     
    YuS 2

    Цитата:
    Непонятно, зачем значение разбивать на две группы?

    скорее всего коллбеком обрабатывает (вычисляет) и хочет меньше возиться ))

    Всего записей: 15431 | Зарегистр. 20-09-2014 | Отправлено: 10:42 25-03-2020 | Исправлено: Mavrikii, 10:44 25-03-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EmBroidery
    У вас же слэш виртуальный - может быть может не быть. Отсюда и возможен вариант что каждая из двух подряд идущих цифр принадлежит к разным группам
    (\d)(\d)

    Всего записей: 1365 | Зарегистр. 17-01-2011 | Отправлено: 10:46 25-03-2020
    YuS 2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii (пост)
    Цитата:
    скорее всего коллбеком обрабатывает (вычисляет)

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

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:30 25-03-2020
    EmBroidery

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS 2
    в Chrome и Node, которые поддерживают lookbehind
     
    Mavrikii
    вот пример функции:
     
    const convert = str => str.replace(/(?<=(\d+)\/?(\d*)")/g, (_, gr1, gr2) => ` (${gr1 / (gr2 || 1) * 2.54} mm)`);
    console.log(convert(`1"`)); -> 1" (2.54 mm)
    console.log(convert(`1/2"`)); -> 1/2" (1.27 mm)
    console.log(convert(`3/4"`)); -> 3/4" (1.905 mm)
    console.log(convert(`10"`)); -> 10" (Infinity mm)
    console.log(convert(`12"`)); -> 12" (1.27 mm)
     
    два последних вызова выглядят удручающе
     
    RegexBuddy показывает именно такое распределение по группам, как я описывал выше.
    Но при lookahead (?=(\d+)\/?(\d*)")  у RegexBuddy с группами всё в порядке.
     
    И при таком вызове функции проблем не наблюдается:
     
    const convert = str => str.replace(/(?=(\d+)\/?(\d*)")/, (_, gr1, gr2) => `(${gr1 / (gr2 || 1) * 2.54} mm) `);
    console.log(convert(`1"`)); -> (2.54 mm) 1"
    console.log(convert(`1/2"`)); -> (1.27 mm) 1/2"
    console.log(convert(`3/4"`)); -> (1.905 mm) 3/4"
    console.log(convert(`10"`)); -> (25.4 mm) 10"
    console.log(convert(`12"`)); -> (30.48 mm) 12"

    Всего записей: 20 | Зарегистр. 31-03-2010 | Отправлено: 11:36 25-03-2020 | Исправлено: EmBroidery, 13:02 25-03-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EmBroidery
    Можете попробовать это
    (?<=((\d+)\/(\d*)|(\d+))")

    Всего записей: 1365 | Зарегистр. 17-01-2011 | Отправлено: 12:44 25-03-2020
    EmBroidery

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    В таком случае, при 1/2" числитель попадает во вторую группу, знаменатель в третью.
    А при целочисленном значении 12", оно уже в четвёртой.
    Согласитесь, не самый лучший вариант
     
    Мне любопытно было разобраться именно с неожиданным для меня распределением по группам, в случае  
    (?<=(\d+)\/?(\d*)")

    Всего записей: 20 | Зарегистр. 31-03-2010 | Отправлено: 12:56 25-03-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EmBroidery
    Да, я заметил.
    Можно поробовать так
    (?<=((\d+)(/(\d*))?"))
    (переменными соответственно будут $2 и $4)

    Всего записей: 1365 | Зарегистр. 17-01-2011 | Отправлено: 13:22 25-03-2020
    EmBroidery

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    Да, это вариант обойти проблему, спасибо.
     
    Но хотелось бы также понять, почему предсказуемое группирование при
    (?=(\d+)\/?(\d*)")
    становится не таким предсказуемым при
    (?<=(\d+)\/?(\d*)")
     
    Не судите строго, я лишь недавно приступил к изучению регулярных выражений

    Всего записей: 20 | Зарегистр. 31-03-2010 | Отправлено: 14:08 25-03-2020
    Открыть новую тему     Написать ответ в эту тему

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