Во втором случае, это (?:\d{3}) можно заменить на это \d\d\d.
Quote (v__step)
или \d{3}
Я об этом, т.е. (?!^)(?=\d{3}+$)
Quote (v__step)
В этом шаблоне мне страшно понравилось начало (?!^)
Спасибо. А меня оно смущает, несмотря на то, что я его придумал) А смысл самой реги ясен? Т.е. почему "меняем" только пробел? До недавнего времени, я и не знал, что реги на такое способны)
Quote (nerv)
Во втором случае, это (?:\d{3}) можно заменить на это \d\d\d.
Quote (v__step)
или \d{3}
Я об этом, т.е. (?!^)(?=\d{3}+$)
Quote (v__step)
В этом шаблоне мне страшно понравилось начало (?!^)
Спасибо. А меня оно смущает, несмотря на то, что я его придумал) А смысл самой реги ясен? Т.е. почему "меняем" только пробел? До недавнего времени, я и не знал, что реги на такое способны)nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Сначала выполняется Execute, сразу после этого появляются уважаемые Matches, т.е. Execute обновляет коллекцию Matches Саш, в тестере куча VBA функций - там все это есть
Quote (nerv)
Насчет нечеткого поиска, мне мысль тож сегодня в голову с утра пришла)
Иначе и не могло быть - решение на поверхности. Мне очень приятно, что ты независимо дошел до того же Тем более стоит попробовать (двойной интерес). Пусть будет даже медленней, красота требует жертв
Quote (v__step)
А отдельно нету? Что-то вроде .Matches?
Сначала выполняется Execute, сразу после этого появляются уважаемые Matches, т.е. Execute обновляет коллекцию Matches Саш, в тестере куча VBA функций - там все это есть
Quote (nerv)
Насчет нечеткого поиска, мне мысль тож сегодня в голову с утра пришла)
Иначе и не могло быть - решение на поверхности. Мне очень приятно, что ты независимо дошел до того же Тем более стоит попробовать (двойной интерес). Пусть будет даже медленней, красота требует жертв v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 13:29
Кажется, да. Эта штука, конечно, требует доводки (например, "3333 барана" она не потянет). Как демонстрационная - на 5+ Саш, мне, к сожалению, надо прерваться до вечера - работа...
Quote (v__step)
А смысл самой реги ясен
Кажется, да. Эта штука, конечно, требует доводки (например, "3333 барана" она не потянет). Как демонстрационная - на 5+ Саш, мне, к сожалению, надо прерваться до вечера - работа...v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 13:20
Сначала выполняется Execute, сразу после этого появляются уважаемые Matches
Сейчас один код попробовал, проверил. Выглядит так (см. ниже). Жаль что Execute при глобальном ключе сразу извлекает все совпадения. В js по другому. Там Match извлекает всю коллекцию, а Exec по одному элементу. [vba]
Code
Sub io() Dim x As String x = "1234567890" ' string With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\d" Set j = .Execute(x) End With End Sub
[/vba]
Quote (v__step)
Саш, мне, к сожалению, надо прерваться до вечера - работа...
Думаю, что тебе не стоит оправдаться Сам сейчас сижу на работе отчеты принимаю
Quote (v__step)
Пусть будет даже медленней, красота требует жертв
Зато возможностей больше)
Quote (v__step)
Эта штука, конечно, требует доводки (например, "3333 барана" она не потянет)
Сначала выполняется Execute, сразу после этого появляются уважаемые Matches
Сейчас один код попробовал, проверил. Выглядит так (см. ниже). Жаль что Execute при глобальном ключе сразу извлекает все совпадения. В js по другому. Там Match извлекает всю коллекцию, а Exec по одному элементу. [vba]
Code
Sub io() Dim x As String x = "1234567890" ' string With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\d" Set j = .Execute(x) End With End Sub
[/vba]
Quote (v__step)
Саш, мне, к сожалению, надо прерваться до вечера - работа...
Думаю, что тебе не стоит оправдаться Сам сейчас сижу на работе отчеты принимаю
Quote (v__step)
Пусть будет даже медленней, красота требует жертв
Зато возможностей больше)
Quote (v__step)
Эта штука, конечно, требует доводки (например, "3333 барана" она не потянет)
Правильно. Теперь пользуйся коллекцией Matches, которая содержится в переменной j (каждый элемент коллекции имеет свойства FirstIndex, Length, SubMatches, Value. Последнее - это строка Делай с этими строками все, что хочешь! Саш, ты попробуй тестер - увидишь все Мачос и даже СабМачос прямо в ячейках рабочего листа Когда надо проверить шаблоны, я из него не вылажу. На листе "Замены" твой RegExp проверяется аж бегом. Кроме того, в модулях VBA есть примеры работы с объектной моделью от простых до достаточно сложных, а поскольку там уже есть ссылка на библиотеку VBScript5.5, очень удобно разбирать переменные в окнах отладчика (хотя коллекцию Matches в строках ты не получишь У Лёши почти готово описание объектной модели VBScript для VBA (это был 1-й лист тестера, сейчас он в доработке)
Quote (nerv)
Set j = .Execute(x)
Правильно. Теперь пользуйся коллекцией Matches, которая содержится в переменной j (каждый элемент коллекции имеет свойства FirstIndex, Length, SubMatches, Value. Последнее - это строка Делай с этими строками все, что хочешь! Саш, ты попробуй тестер - увидишь все Мачос и даже СабМачос прямо в ячейках рабочего листа Когда надо проверить шаблоны, я из него не вылажу. На листе "Замены" твой RegExp проверяется аж бегом. Кроме того, в модулях VBA есть примеры работы с объектной моделью от простых до достаточно сложных, а поскольку там уже есть ссылка на библиотеку VBScript5.5, очень удобно разбирать переменные в окнах отладчика (хотя коллекцию Matches в строках ты не получишь У Лёши почти готово описание объектной модели VBScript для VBA (это был 1-й лист тестера, сейчас он в доработке)v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 14:50
За ссылку спасибо! Один из фрагментов текстов из Фриддла: (?<=...) - ретроспективная проверка - в VBScript такого нет -только просмотр вперед (терминология Форты) , чем ты с успехом воспользовался (?=...)
За ссылку спасибо! Один из фрагментов текстов из Фриддла: (?<=...) - ретроспективная проверка - в VBScript такого нет -только просмотр вперед (терминология Форты) , чем ты с успехом воспользовался (?=...)v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 14:00
Вот завтра выйду на работу и во время обеда пощупаю за все места ваши реги А сегодня не смогу - вчера вечером отправил-таки родню по домам в Вологду и Череповец, а сегодня надо жене помочь квартиру в порядок наконец привести
Вот завтра выйду на работу и во время обеда пощупаю за все места ваши реги А сегодня не смогу - вчера вечером отправил-таки родню по домам в Вологду и Череповец, а сегодня надо жене помочь квартиру в порядок наконец привести Alex_ST
(?!^)(?=(\d\d\d)+(?!\d)) сработало, а (\d)(?=(\d\d\d)+(?!\d)) - нет. Я такое: (\d) уже давно попробовал, и по факту сбоя, оценил красоту (?!^)
Quote (nerv)
привязка к началу строки
Конечно, но прекрасно работает и посередине строки (по крайней мере, в тестере) (?!\d) это, насколько я понял, негативный просмотр вперед, вложенный в позитивный просмотр вперед - ух ты, хотя теперь понимаю - почему бы и нет... (?!^) работает нелогично: это должно быть найденное, но не включенное в результат начало строки, но результат-то отвязан от начала строки... Мне кажется, ты обхитрил RegExp!
А давай, попробуем по-Фридлу, но без (?!^) , вот так: (?=(\d\d\d)+(?!\d)) или так: (?=(\d{3})+(\D|$))
Quote (nerv)
от Фридла
(?!^)(?=(\d\d\d)+(?!\d)) сработало, а (\d)(?=(\d\d\d)+(?!\d)) - нет. Я такое: (\d) уже давно попробовал, и по факту сбоя, оценил красоту (?!^)
Quote (nerv)
привязка к началу строки
Конечно, но прекрасно работает и посередине строки (по крайней мере, в тестере) (?!\d) это, насколько я понял, негативный просмотр вперед, вложенный в позитивный просмотр вперед - ух ты, хотя теперь понимаю - почему бы и нет... (?!^) работает нелогично: это должно быть найденное, но не включенное в результат начало строки, но результат-то отвязан от начала строки... Мне кажется, ты обхитрил RegExp!
А давай, попробуем по-Фридлу, но без (?!^) , вот так: (?=(\d\d\d)+(?!\d)) или так: (?=(\d{3})+(\D|$)) v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 19:33
А давай, попробуем по-Фридлу, но без (?!^) , вот так: (?=(\d\d\d)+(?!\d)) или так: (?=(\d{3})+(\D|$))
Вот почему так нельзя [vba]
Code
Sub io() Dim x As String x = "123456789" ' string With CreateObject("VBScript.RegExp") .Global = True .Pattern = "(?=(?:\d{3})+$)" ' (?!^)(?=(?:\d{3})+$) x = .Replace(x, " ") End With MsgBox "!" & x End Sub
[/vba]
Quote (nerv)
(?!^)(?=(\d\d\d)+(?!\d)) сработало, а (\d)(?=(\d\d\d)+(?!\d)) - нет.
Все работает. [vba]
Code
Sub io() Dim x As String x = "1234567890" ' string With CreateObject("VBScript.RegExp") .Global = True .Pattern = "(\d)(?=(\d\d\d)+(?!\d))" ' (?!^)(?=(?:\d{3})+$) Set j = .Execute(x) x = .Replace(x, "$1 ") End With MsgBox "!" & x End Sub
[/vba]
p.s.: так долго потому, что вырубился спать
Quote (v__step)
А давай, попробуем по-Фридлу, но без (?!^) , вот так: (?=(\d\d\d)+(?!\d)) или так: (?=(\d{3})+(\D|$))
Вот почему так нельзя [vba]
Code
Sub io() Dim x As String x = "123456789" ' string With CreateObject("VBScript.RegExp") .Global = True .Pattern = "(?=(?:\d{3})+$)" ' (?!^)(?=(?:\d{3})+$) x = .Replace(x, " ") End With MsgBox "!" & x End Sub
[/vba]
Quote (nerv)
(?!^)(?=(\d\d\d)+(?!\d)) сработало, а (\d)(?=(\d\d\d)+(?!\d)) - нет.
Все работает. [vba]
Code
Sub io() Dim x As String x = "1234567890" ' string With CreateObject("VBScript.RegExp") .Global = True .Pattern = "(\d)(?=(\d\d\d)+(?!\d))" ' (?!^)(?=(?:\d{3})+$) Set j = .Execute(x) x = .Replace(x, "$1 ") End With MsgBox "!" & x End Sub
Саша, если бы я не протестировал, не писал бы - бери шаблоны из цитаты полностью (это я по поводу самых последних) А чистый Фридловский, действительно, сработал (видать, я скопировал не аккуратно)
Саша, если бы я не протестировал, не писал бы - бери шаблоны из цитаты полностью (это я по поводу самых последних) А чистый Фридловский, действительно, сработал (видать, я скопировал не аккуратно)v__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 19:41
Я смотрел и в тестере, и в locals, и во всплывающей подсказке - нет пробела спереди Он был раньше, но после изменений в "хвосте" шаблона он исчез На твоем месте я писал бы то же (много параллелей в наших "соображалках"), но ты проверь - это интересно
Я смотрел и в тестере, и в locals, и во всплывающей подсказке - нет пробела спереди Он был раньше, но после изменений в "хвосте" шаблона он исчез На твоем месте я писал бы то же (много параллелей в наших "соображалках"), но ты проверь - это интересноv__step
С уважением, Владимир
Сообщение отредактировал v__step - Понедельник, 09.01.2012, 20:20