Страницы: 1
RSS
Специфический символ в регулярном выражении, символ с кодом 63, в шаблоне регулярного выражения, вызывает ошибку
 
Здравия желаю, уважаемые жители планеты Эксель.
Пытаюсь начать использовать в макросах регулярные выражения и столкнулся с такой ошибкой:

когда в шаблоне пытаюсь использовать символ с кодом 63 (Chr(63)). Для своей задачи я нашёл обходной путь (такой символ один в ячейке, потому исключал из обработки ячейки с длиной в один символ), но нерешённый вопрос не даёт покоя. Потому у меня вопрос, как можно использовать такие символы в регулярных выражениях?
Функция для примера:
Код
Function jjj(s As String) As String
    Set objRegExp = CreateObject("VBScript.RegExp")
'    objRegExp.Pattern = "(?:(^(--|" & Chr(63) & ")|(-|\+))$)"
    objRegExp.Pattern = "(?:(^(--)|(-|\+))$)"
    jjj = objRegExp.Replace(s, "")
End Function
В задаче, если в ячейке "--" или символ 63, то игнорируем эти ячейки, если в конце содержимого ячеек "+" или "-" - то убираем из содержимого эти символы.
Прошу быть снисходительными к моим попыткам формирования регулярных выражений. Для отладки регулярных выражений использовал данный ресурс. На нём регулярка из закомментированной строки отработала как надо.
Выражаю всем свою глубокую благодарность не взирая на результат. :)
Изменено: JayBhagavan - 19.09.2015 08:58:41 (не отображалось изображение)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Здравствуйте.
Так задачу выполняет ?
Два равносильных патерна.
Код
 objRegExp.Pattern = "(?:(^(--|\" & Chr(63) & ")|(-|\+))$)"
 objRegExp.Pattern = "(?:(^(--|\?")|(-|\+))$)"
 
Насколько я понял, в ячейке у Вас Юникодовский символ с кодом 9642. Так, вроде, работает
Код
 objRegExp.Pattern = "(?:(^(--|\" & ChrW(9642) & ")|(-|\+))$)"

 
Doober, здравствуйте. Спасибо за Ваше участие в данной теме. Насколько я понял, то вs имели ввиду:
Код
(?:(^(--|.?)|(-|\+))$)
Да, под конкретно мою задачу сработает, но всё же я был бы рад разобраться именно с этим "▪" символом через регулярное выражение. Спасибо.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Доброе время суток
Если нужно использовать символы юникода, то лучше, наверное, задавать его через \un метасимволы.
Успехов.
 
МВТ, спасибо за Ваш интерес и предоставленное решение. Да, работает. Земной Вам поклон от меня. _/\_
Андрей VG, и Вам земной поклон _/\_ за Ваш интерес и предоставленную ссылку. Разобрался. :)
Код
objRegExp.Pattern = "(?:(^(--|\u25AA)|(-|\+))$)"

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Наверх