nilem, вообще-то, насколько я уже "просвещён", метод Execute, примененный к объекту RegExp, создаёт объект MatchCollection - коллекцию найденных подстрок - объектов Match. Поэтому, в своём коде[vba]
Код
With .Execute(s) For i = 0 To .Count - 1 MsgBox .Item(i) Next i End With
[/vba] ты скорее всего перебираешь объекты Match и выводишь в MsgBox их свойства по умолчанию - Value А SubMatch - это одно из свойств каждого Match … Ну, по крайней мере, это следует из объектной модели:
nilem, вообще-то, насколько я уже "просвещён", метод Execute, примененный к объекту RegExp, создаёт объект MatchCollection - коллекцию найденных подстрок - объектов Match. Поэтому, в своём коде[vba]
Код
With .Execute(s) For i = 0 To .Count - 1 MsgBox .Item(i) Next i End With
[/vba] ты скорее всего перебираешь объекты Match и выводишь в MsgBox их свойства по умолчанию - Value А SubMatch - это одно из свойств каждого Match … Ну, по крайней мере, это следует из объектной модели: Alex_ST
Для того, чтобы задействовать это свойство, нужен особый шаблон - с дополнительными скобками Например, (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) Эти скобки в общем, не нужны, и применены исключительно для возможности задействовать SubMatches Для строки 100.200.300.400 поиск по шаблону даст один Match - целиком всю строку Но поскольку шаблон содержал скобки, для этого единственного Match появится коллекция SubMatches в количестве равном числу скобок: 100; 200; 300; и 400 Если бы вхождений было больше 1, для каждого Match появилась бы соответствующая коллекция Видать, пора писать еще 1 функцию, которая будет возвращать SubMatches - это сильный инструмент!
Есть первый сырой результат по SubMatches!
Для того, чтобы задействовать это свойство, нужен особый шаблон - с дополнительными скобками Например, (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) Эти скобки в общем, не нужны, и применены исключительно для возможности задействовать SubMatches Для строки 100.200.300.400 поиск по шаблону даст один Match - целиком всю строку Но поскольку шаблон содержал скобки, для этого единственного Match появится коллекция SubMatches в количестве равном числу скобок: 100; 200; 300; и 400 Если бы вхождений было больше 1, для каждого Match появилась бы соответствующая коллекция Видать, пора писать еще 1 функцию, которая будет возвращать SubMatches - это сильный инструмент!v__step
С уважением, Владимир
Сообщение отредактировал v__step - Четверг, 24.11.2011, 13:38
Народ, кто там разобрался хорошо с SubMatches? Способны просто, "на пальцах", объяснить что такое SubMatches ?
Я практически закончил свой файл-подсказку по RegExp , но остались не описанными объекты SubMatches … Сейчас просто некогда лезть в литературу и самостоятельно разбираться. Я здесь прикладываю только один лист, где описаны свойства и методы. Посмотрите, пожалуйста, не наврал ли где-нибудь? Особое внимание - на примеры в тексте (я их даже не проверял и даже не просматривал, а просто копировал из аглицкого описания). Надо потом будет там и комментарии перевести.
Времени нет. На работе нужно срочно переносить свои данные со старого компа под ХРюшей на новый на Семёрке
Народ, кто там разобрался хорошо с SubMatches? Способны просто, "на пальцах", объяснить что такое SubMatches ?
Я практически закончил свой файл-подсказку по RegExp , но остались не описанными объекты SubMatches … Сейчас просто некогда лезть в литературу и самостоятельно разбираться. Я здесь прикладываю только один лист, где описаны свойства и методы. Посмотрите, пожалуйста, не наврал ли где-нибудь? Особое внимание - на примеры в тексте (я их даже не проверял и даже не просматривал, а просто копировал из аглицкого описания). Надо потом будет там и комментарии перевести.
Времени нет. На работе нужно срочно переносить свои данные со старого компа под ХРюшей на новый на Семёрке Alex_ST
Лёш, принцип работы SubMatches см. пост 23 Я подсуетился и уже приложил к посту 24 книгу с новой функцией, обрабатывающей SubMatches Она работает и подтверждает и то, что написано в посте 23 Могу сегодня соответственно подправить твой файл (пост 25) Комментарии к формулам я наполовину перевел На выходные обязательно добью
Лёш, принцип работы SubMatches см. пост 23 Я подсуетился и уже приложил к посту 24 книгу с новой функцией, обрабатывающей SubMatches Она работает и подтверждает и то, что написано в посте 23 Могу сегодня соответственно подправить твой файл (пост 25) Комментарии к формулам я наполовину перевел На выходные обязательно добьюv__step
С уважением, Владимир
Сообщение отредактировал v__step - Пятница, 25.11.2011, 14:31
Например, (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) Эти скобки в общем, не нужны, и применены исключительно для возможности задействовать SubMatches Для строки 100.200.300.400 поиск по шаблону даст один Match - целиком всю строку Но поскольку шаблон содержал скобки, для этого единственного Match появится коллекция SubMatches в количестве равном числу скобок: 100; 200; 300; и 400 Если бы вхождений было больше 1, для каждого Match появилась бы соответствующая коллекция
Блин! Ну ведь просил же объяснить ПРОСТО! В ДВУХ-ТРЕХ СЛОВАХ! Извини, конечно, но для меня, только-только осваивающего RgExp, что (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}), что \d{1,3} - однофигственно!
Quote (v__step)
Например, (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) Эти скобки в общем, не нужны, и применены исключительно для возможности задействовать SubMatches Для строки 100.200.300.400 поиск по шаблону даст один Match - целиком всю строку Но поскольку шаблон содержал скобки, для этого единственного Match появится коллекция SubMatches в количестве равном числу скобок: 100; 200; 300; и 400 Если бы вхождений было больше 1, для каждого Match появилась бы соответствующая коллекция
Блин! Ну ведь просил же объяснить ПРОСТО! В ДВУХ-ТРЕХ СЛОВАХ! Извини, конечно, но для меня, только-только осваивающего RgExp, что (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}), что \d{1,3} - однофигственно!Alex_ST
Спокойно, сейчас разберемся Пример не мой и первый попавшийся, поэтому не самый простой но... В шаблоне записана вот такая просьба к RegEx: (любое число, состоящее из 3-х цифр)точка(любое число, состоящее из 3-х цифр)точка(любое число, состоящее из 3-х цифр)точка(любое число, состоящее из 3-х цифр) А чтобы посмотреть, что из этого получится, надо открыть последний тестер из поста 24 - там этот пример как раз и заряжен (я сдублировал в этот пост)
Пробую упростить: Строка: "мне ни черта не понятно" Шаблон: "(мне )(ни )(черта )(не )" Вбиваем в тестер там, где пример с SubMatches, и смотрим результат Тестер гораздо красноречивее всех выкладок (живой, однако)
А вот если убрать скобки (они использовались специально для создания SubMatches, то никаких SubMatches не появится
Спокойно, сейчас разберемся Пример не мой и первый попавшийся, поэтому не самый простой но... В шаблоне записана вот такая просьба к RegEx: (любое число, состоящее из 3-х цифр)точка(любое число, состоящее из 3-х цифр)точка(любое число, состоящее из 3-х цифр)точка(любое число, состоящее из 3-х цифр) А чтобы посмотреть, что из этого получится, надо открыть последний тестер из поста 24 - там этот пример как раз и заряжен (я сдублировал в этот пост)
Пробую упростить: Строка: "мне ни черта не понятно" Шаблон: "(мне )(ни )(черта )(не )" Вбиваем в тестер там, где пример с SubMatches, и смотрим результат Тестер гораздо красноречивее всех выкладок (живой, однако)
А вот если убрать скобки (они использовались специально для создания SubMatches, то никаких SubMatches не появитсяv__step
На ближайшие несколько дней со временем будет очень плохо На отдельном листе добавил описание SubMatches Не надо зацикливаться на SubMatches (подвыражениях) - это частный вопрос Подвыражения в скобках используются в основном "на месте" - непосредственно в шаблонах, а их разбор в VBA - дополнительная, редко используемая функция Комментарии к функциям перевести не успел, но это надо делать в последнюю очередь - в этих функциях нет ничего принципиально нового Придется править примеры VBA - они составлялись в какой-то дремучей версии VB
Желательно сократить теоретические разделы в пользу примеров Поэтому Добавил 3 новых листа с живыми примерами (на 1 листе это разместить невозможно) Один из листов посвящен нашумевшим, но не очень интересным SubMatches Добавил функцию выделения результата (при выделенной ячейке с текстом надо нажать F12 - см. замечания в заголовках) Это очень помогает, т.к. важно видеть - где именно расположены вхождения
На ближайшие несколько дней со временем будет очень плохо На отдельном листе добавил описание SubMatches Не надо зацикливаться на SubMatches (подвыражениях) - это частный вопрос Подвыражения в скобках используются в основном "на месте" - непосредственно в шаблонах, а их разбор в VBA - дополнительная, редко используемая функция Комментарии к функциям перевести не успел, но это надо делать в последнюю очередь - в этих функциях нет ничего принципиально нового Придется править примеры VBA - они составлялись в какой-то дремучей версии VB
Желательно сократить теоретические разделы в пользу примеров Поэтому Добавил 3 новых листа с живыми примерами (на 1 листе это разместить невозможно) Один из листов посвящен нашумевшим, но не очень интересным SubMatches Добавил функцию выделения результата (при выделенной ячейке с текстом надо нажать F12 - см. замечания в заголовках) Это очень помогает, т.к. важно видеть - где именно расположены вхожденияv__step
Ура! Командировку отменили, так что вечером дома продолжу Несколько доработок: Теперь при каждом запуске книги ссылка на библиотеку VBScript_RegExp_55 будет в случае повреждения восстановлена Если библиотеки нет, будет попытка установить VBScript_RegExp_10 Если и это не сработает, процедура выдаст сообщение В последнем случае не поможет и позднее связывание
Пополнил и немного откорректировал примеры Для функции, возвращающей SubMatches, ввел аргумент - № обрабатываемого вхождения и перестал обрабатывать все вхождения сразу - так наглядней
На третий день зоркий сокол заметил: SubMatches - это давние знакомые - подвыражения, которые широко используются непосредственно в регулярных выражениях (в ссылках назад, при заменах) Программно SubMatches использует у себя David Brett (та книга, на которую мы ссылались втроем) при обработке ссылок на ячейки
Ура! Командировку отменили, так что вечером дома продолжу Несколько доработок: Теперь при каждом запуске книги ссылка на библиотеку VBScript_RegExp_55 будет в случае повреждения восстановлена Если библиотеки нет, будет попытка установить VBScript_RegExp_10 Если и это не сработает, процедура выдаст сообщение В последнем случае не поможет и позднее связывание
Пополнил и немного откорректировал примеры Для функции, возвращающей SubMatches, ввел аргумент - № обрабатываемого вхождения и перестал обрабатывать все вхождения сразу - так наглядней
На третий день зоркий сокол заметил: SubMatches - это давние знакомые - подвыражения, которые широко используются непосредственно в регулярных выражениях (в ссылках назад, при заменах) Программно SubMatches использует у себя David Brett (та книга, на которую мы ссылались втроем) при обработке ссылок на ячейкиv__step
Володя, я посмотрел твой последний файл. 1. Увидел, что ты поработал с описанием метасимволов - СПАСИБО за помощь. 2. Понял, что мой последний файл из сообщения № 25 с русским описанием объекта RegExp ты скорее всего вообще не посмотрел и поэтому в своём примере ты используешь мой исходный англоязычный вариант. 3. Листы-тестеры - это здорово! Надо разбираться в составлении сложных паттернов...
4. Долго не разбирался, но так ничего и не понял про SubMatches ... Это коллекции, являющиеся одним из свойств каждого из объектов Match что ли? А что является Item'ами этой коллекции? Ты утверждаешь, что это подстроки... Но ведь и Match.Value - это тоже подстроки, соответствующие заданному Pattern Что тогда такое подстрока подстроки? И что является Pattern'ом для выбора этих подстрок из подстроки... В общем я совсем запутался в словах. А простым языком, "на пальцах" никто объяснить не может.
Володя, я посмотрел твой последний файл. 1. Увидел, что ты поработал с описанием метасимволов - СПАСИБО за помощь. 2. Понял, что мой последний файл из сообщения № 25 с русским описанием объекта RegExp ты скорее всего вообще не посмотрел и поэтому в своём примере ты используешь мой исходный англоязычный вариант. 3. Листы-тестеры - это здорово! Надо разбираться в составлении сложных паттернов...
4. Долго не разбирался, но так ничего и не понял про SubMatches ... Это коллекции, являющиеся одним из свойств каждого из объектов Match что ли? А что является Item'ами этой коллекции? Ты утверждаешь, что это подстроки... Но ведь и Match.Value - это тоже подстроки, соответствующие заданному Pattern Что тогда такое подстрока подстроки? И что является Pattern'ом для выбора этих подстрок из подстроки... В общем я совсем запутался в словах. А простым языком, "на пальцах" никто объяснить не может.Alex_ST
На ближайшее время планы такие: - для прекращения борьбы идей (позднее или ранне связывание), хочу сделать 2 независимых модуля с разными типами связывания - хочу сделать динамическую справку (на листе с описанием метасимволов при выделении ячейки сразу будет отображаться несколько соответствующих примеров из других листов) - есть желание переписать почти все примеры кода (сейчас там много лишнего и непонятного) - надо перевести комментарии к функциям Patrick Matthews (помню) - придется позаботиться о размере книги. Она сильно разбухла и при добавлении листа с описаниями объектов даже в зазипованном виде превышает ограничения по присоединяемым файлам Возможно, все-таки книгу придется бить на две...
На ближайшее время планы такие: - для прекращения борьбы идей (позднее или ранне связывание), хочу сделать 2 независимых модуля с разными типами связывания - хочу сделать динамическую справку (на листе с описанием метасимволов при выделении ячейки сразу будет отображаться несколько соответствующих примеров из других листов) - есть желание переписать почти все примеры кода (сейчас там много лишнего и непонятного) - надо перевести комментарии к функциям Patrick Matthews (помню) - придется позаботиться о размере книги. Она сильно разбухла и при добавлении листа с описаниями объектов даже в зазипованном виде превышает ограничения по присоединяемым файлам Возможно, все-таки книгу придется бить на две...v__step
С уважением, Владимир
Сообщение отредактировал v__step - Среда, 30.11.2011, 22:27
То, что заключено в скобки - каждая пара скобок - ПодШаблон для ПодВыражения Лёш, без примеров как без бутылки - я же добавил функцию и лист - открываем, пробуем, экспериментируем Без подвыражений в RegExp ни шагу - мимо не пройдешь, поэтому разобраться придется...
К посту 29 приложен твой русскоязычный лист уже с правкой в отношении SubMatch
Quote (Alex_ST)
Что тогда такое подстрока подстроки?
Да, подстрока подстроки
Quote (Alex_ST)
что является Pattern'ом для выбора этих подстрок
То, что заключено в скобки - каждая пара скобок - ПодШаблон для ПодВыражения Лёш, без примеров как без бутылки - я же добавил функцию и лист - открываем, пробуем, экспериментируем Без подвыражений в RegExp ни шагу - мимо не пройдешь, поэтому разобраться придется...
К посту 29 приложен твой русскоязычный лист уже с правкой в отношении SubMatchv__step
Да, файлы из поста №29 я не посмотрел Решил, что в №30 ты выложил то же самое, но подправленное. Внёс в свой файл. Убрал англоязычный лист (чтобы меньше весило). Начал разбираться в метасимволах и нашёл у тебя дубль: \n Соответствует символу перевода строки (LF) \n n — положительное число. Соответствует n-ной запомненной подстроке. Вычисляется путем подсчета левых круглых скобок. Если левых скобок до этого символа меньше, чем n, то эквивалентно \0n ???
Да, файлы из поста №29 я не посмотрел Решил, что в №30 ты выложил то же самое, но подправленное. Внёс в свой файл. Убрал англоязычный лист (чтобы меньше весило). Начал разбираться в метасимволах и нашёл у тебя дубль: \n Соответствует символу перевода строки (LF) \n n — положительное число. Соответствует n-ной запомненной подстроке. Вычисляется путем подсчета левых круглых скобок. Если левых скобок до этого символа меньше, чем n, то эквивалентно \0n ???Alex_ST
Речь идет об использовании ссылок на подвыражения непосредственно в шаблоне (это т.н. ссылка назад) Да, при этом обязательно используются подвыражения - сначала они создаются, а потом на них ссылаются так: \1 - ссылка на 1-е подвыражение; \2 - ссылка на 2-е подвыражение и т.д. Например, шаблон (qwe)(asd)\2 содержит два подвыражения и одну ссылку назад на второе подвыражение Этому шаблону соответствует строка qweasdasd
Кто же автор этой путаницы?! Разве это нормально - подавать серьезный и сложный материал в одной строке? Изучать RegExp по непроверенным источникам = получить комплекс неполноценности.
Все, что связано с подвыражениями (кроме использования свойства SubMatches в коде) - ссылки назад, замены по шаблону и т.д. очень хорошо подано в книге Форты Кое-что уже есть и в нашей книге. Потихоньку наведем порядок, но не нахрапом!
Сейчас я пытаюсь хоть как-то упорядочить данные на листе Метасимволы (неправильное название - там есть много чего кроме метасимволов) Многие строки перенес вниз (не убил) - те, что спорные и непроверенные
Quote (Alex_ST)
\0n ???
Речь идет об использовании ссылок на подвыражения непосредственно в шаблоне (это т.н. ссылка назад) Да, при этом обязательно используются подвыражения - сначала они создаются, а потом на них ссылаются так: \1 - ссылка на 1-е подвыражение; \2 - ссылка на 2-е подвыражение и т.д. Например, шаблон (qwe)(asd)\2 содержит два подвыражения и одну ссылку назад на второе подвыражение Этому шаблону соответствует строка qweasdasd
Кто же автор этой путаницы?! Разве это нормально - подавать серьезный и сложный материал в одной строке? Изучать RegExp по непроверенным источникам = получить комплекс неполноценности.
Все, что связано с подвыражениями (кроме использования свойства SubMatches в коде) - ссылки назад, замены по шаблону и т.д. очень хорошо подано в книге Форты Кое-что уже есть и в нашей книге. Потихоньку наведем порядок, но не нахрапом!
Сейчас я пытаюсь хоть как-то упорядочить данные на листе Метасимволы (неправильное название - там есть много чего кроме метасимволов) Многие строки перенес вниз (не убил) - те, что спорные и непроверенныеv__step
С уважением, Владимир
Сообщение отредактировал v__step - Среда, 30.11.2011, 22:26
Текущий рабочий файл Очень много вынужденных изменений на листе с описанием метасимволов и на листах с "живыми примерами" Все складывается естественно: накопилось критическое число сбойных ситуаций, от них просто рябит в глазах, поэтому я сгруппировал их ниже основного текста На листе с описаниями, в основном, привел теримны в соответствие с Фортой и Фриддлом
Лёш, желательно было бы получить от тебя последний вариант листа с VBA-текстовкой, чтобы попробовать написать другие демо-процедуры
Текущий рабочий файл Очень много вынужденных изменений на листе с описанием метасимволов и на листах с "живыми примерами" Все складывается естественно: накопилось критическое число сбойных ситуаций, от них просто рябит в глазах, поэтому я сгруппировал их ниже основного текста На листе с описаниями, в основном, привел теримны в соответствие с Фортой и Фриддлом
Лёш, желательно было бы получить от тебя последний вариант листа с VBA-текстовкой, чтобы попробовать написать другие демо-процедурыv__step
Привет, Володя! У меня на работе завал образовался из-за моего простоя по причине переноса всего накопленного за долгие годы на новый комп, на котором стоит Win7 вместо любимой ХРюши на старом... "Семёркин" интерфейс не нравится абсолютно... Пришлось её полностью "перелицовывать" чтобы выглядела хотя бы как ХРюша... Получилось очень похоже. Правда, некоторые программы не пошли Так что разбираться с твоим последним примером было некогда... А мой последний файл почему-то вдруг "ожирел" до такой степени, что даже в архиве не лезет на форум (провести "фитнесс" даже не пробовал-было некогда) Пришлось выложить на файлообменник: Объект RegExp 02_12_11.xls Заранее предупреждаю: лист с метасимволами я пока под твой крайний вариант не правил, а только слил старое из двух источников и отсортировал по возрастанию чтобы описания встали рядом и бОльшую часть уже объединил. Осталось только несколько символов с задвоением описаний.
Привет, Володя! У меня на работе завал образовался из-за моего простоя по причине переноса всего накопленного за долгие годы на новый комп, на котором стоит Win7 вместо любимой ХРюши на старом... "Семёркин" интерфейс не нравится абсолютно... Пришлось её полностью "перелицовывать" чтобы выглядела хотя бы как ХРюша... Получилось очень похоже. Правда, некоторые программы не пошли Так что разбираться с твоим последним примером было некогда... А мой последний файл почему-то вдруг "ожирел" до такой степени, что даже в архиве не лезет на форум (провести "фитнесс" даже не пробовал-было некогда) Пришлось выложить на файлообменник: Объект RegExp 02_12_11.xls Заранее предупреждаю: лист с метасимволами я пока под твой крайний вариант не правил, а только слил старое из двух источников и отсортировал по возрастанию чтобы описания встали рядом и бОльшую часть уже объединил. Осталось только несколько символов с задвоением описаний.Alex_ST
Лёша, привет! Ты вышел на связь очень вовремя - твой лист пригодится - сегодня есть редкая возможность поработать! Весь вторник буду отсутствовать - еду в командировку в Киев
Дело идет к разделению материала на 2 файла, и это нормально Фитнес не помогает (я пробовал). Очень много места занимают рисунки
Будет очень много переделок, в том числе на листе с метасимволами, ничего не поделаешь, все по-честному - выстрадано Пока что набираем гору мусора. Упорядочение, критика, конструктив - все потом Контрольный срок текущего рабочего варианта - понедельник
Скоро будем финишировать, т.к. эта тема уходит в бесконечность, а времени в обрез
Лёша, привет! Ты вышел на связь очень вовремя - твой лист пригодится - сегодня есть редкая возможность поработать! Весь вторник буду отсутствовать - еду в командировку в Киев
Дело идет к разделению материала на 2 файла, и это нормально Фитнес не помогает (я пробовал). Очень много места занимают рисунки
Будет очень много переделок, в том числе на листе с метасимволами, ничего не поделаешь, все по-честному - выстрадано Пока что набираем гору мусора. Упорядочение, критика, конструктив - все потом Контрольный срок текущего рабочего варианта - понедельник
Скоро будем финишировать, т.к. эта тема уходит в бесконечность, а времени в обрез v__step
С уважением, Владимир
Сообщение отредактировал v__step - Воскресенье, 04.12.2011, 13:40
Володя, привет! Вообще-то я не пробовал удалять рисунки и взвешивать после этого файл... Ведь картинки-то эти - обычные скриншоты, да к тому же ещё и обрезанные. Поэтому весить они должны совсем чуть-чуть. Я к стати, ещё пока верстал файл, обратил внимание, что он заметно распух после ввода группы и структуры... Неужели эта ерунда столько весит? Правда, я её несколько раз переделывал. Может, следы редактирования уровней вложенности где-то остались? Завтра на работе в перерыве поэкспериментирую: уберу всю карсоту и постепенно начну её вводить. Посмотрю, что вызывает ожирение. Пригодится для продолжения темы фитнеса.
Володя, привет! Вообще-то я не пробовал удалять рисунки и взвешивать после этого файл... Ведь картинки-то эти - обычные скриншоты, да к тому же ещё и обрезанные. Поэтому весить они должны совсем чуть-чуть. Я к стати, ещё пока верстал файл, обратил внимание, что он заметно распух после ввода группы и структуры... Неужели эта ерунда столько весит? Правда, я её несколько раз переделывал. Может, следы редактирования уровней вложенности где-то остались? Завтра на работе в перерыве поэкспериментирую: уберу всю карсоту и постепенно начну её вводить. Посмотрю, что вызывает ожирение. Пригодится для продолжения темы фитнеса.Alex_ST