Рейтинг:
2
OriginalGriff
Тро добавит к предложению Пита Леоу: "привет" не совпадает просто с "привет" и "привет?" это не просто совпадение hello с пробелом после него. Он также соответствует
"hello there"
"hello-there"
"why-hello!"
И все остальное, что содержит буквы "привет"в этой последовательности.
Если вы хотите точно соответствовать "привет" или " Привет ", то вы хотите:
^hello\s?$
Если вы хотите работать с регулярными выражениями, то получите копию
Экспрессо[
^]- это бесплатно, и он проверяет, тестирует и генерирует регулярные выражения. Чертовски полезно, и я жалею, что не написал его!
User 13204940
Это не тот шаблон, на котором я хочу остановиться, но у меня есть код:
Частная суб updateCodeSyntaxHighlighting()
Dim ключевые слова как новое регулярное выражение ("\bhello\b|\bthere\b")
Dim selPos As Integer = codeEditorBox.Объект selectionstart
Dim selPos2 As Integer = codeEditorBox.GetFirstCharIndexOfCurrentLine
Если не codeEditorBox.Text = "" Тогда
codeEditorBox.Выберите (0, codeEditorBox.Линий(codeEditorBox.GetLineFromCharIndex(селпос)).Длина)
codeEditorBox.Объект selectionstart = selPos2
codeEditorBox.SelectionColor = codeEditorBox.Цвет
codeEditorBox.Объект selectionstart = селпос
Конец, Если
Для каждого ключевого слова соответствует как совпадение в ключевых словах.Играм(codeEditorBox.Текст)
codeEditorBox.Выберите (keywordMatch.Индекс, совпадение ключевых слов.Длина)
codeEditorBox.SelectionColor = Цвет.FromArgb(64, 255, 64)
codeEditorBox.Объект selectionstart = селпос
codeEditorBox.SelectionColor = codeEditorBox.Цвет
Следующий
codeEditorBox.SelectionLength = 0
Конец Подводной Лодки
который вызывается в событии TextChanged.
Если я наберу "xhello", а затем поставлю пробел после" x", совпадение не будет найдено. Я не могу понять, что я делаю не так
OriginalGriff
Быстрый тест с "x hello", и он отлично подходит.
Я бы изменил регулярное выражение, чтобы сделать его более читабельным:
\b (привет / там)\b
но и то и другое приведет к одинаковым результатам.
Что происходит при отладке кода? Что это показывает, что происходит?
User 13204940
"x hello" работает нормально, но проблема в том, что я набираю "xhello" и потом ставлю пробел. Это не делает "привет" зеленым.
OriginalGriff
Это, вероятно, потому, что вы не вызываете метод! Что показывает отладчик?
User 13204940
Ошибок не бывает. Этот метод вызывается в событии textchanged. Когда я вхожу в это пространство, он должен запустить метод, увидеть, что есть "x hello", а затем соответствовать "hello". Дело в том, что это не так.
Он работает с "x hello", но не с "xhello", а затем помещает пробел внутрь
OriginalGriff
А что показывает отладчик?
Вы поставили точку останова в верхней части метода и прошли через нее, чтобы точно выяснить, что происходит, или вы предполагаете, что "нет ошибок" в компиляции означает, что отладчик ничего не покажет?
User 13204940
Хорошо, я решил эту проблему, нужно:
codeEditorBox.Объект selectionstart = keywordMatch.Индекс + совпадение ключевых слов.Длина
вместо
codeEditorBox.Объект selectionstart = селпос
Поскольку предполагалось, что каретка находится в конце строки, она не выбирала правильный диапазон, когда это было не так
Рейтинг:
0
User 13204940
Используя Debuggex я придумал:
(((?=.+?)((["])|([ .]))|\3)привет\4 / \(Привет\))(?!(.+?))|\1(?=([. ]+?))
Однако это все еще не идеально, но уже на пути туда.
Что должно быть разрешено:
привет
космос тогда привет
тогда здравствуй космос
затем пространство привет, то пространство
(привет)
"привет"
.привет
привет.
что угодно тогда привет
привет тогда что угодно
Нет:
привет
xhello
xhellox