Как смоделировать lookbehind в регулярном выражении VBA?
Я пытаюсь построить шаблон регулярных выражений, который вернется False
если строка начинается с определенных символов или содержит несловесные символы, но потому что VBA RegExp
объект не поддерживает вид сзади, я нахожу это трудным. Единственные префиксы символов слова, которые должны потерпеть неудачу, являются B_, B-, b_, b-.
Это мой тестовый код:
Sub testregex()
Dim re As New RegExp
re.pattern = "^[^Bb][^_-]\w+$"
Debug.Print re.Test("a24")
Debug.Print re.Test("a")
Debug.Print re.Test("B_")
Debug.Print re.Test(" a1")
End Sub
Я хочу это вернуть:
True
True
False
False
но вместо этого он возвращает
True
False
False
True
Проблема в том, что шаблон ищет персонажа, которого нет в [Bb]
сопровождаемый персонажем, которого нет в [-_]
сопровождаемый последовательностью символов слова, но я хочу только один или несколько символов слова, так что если есть 2 или более символов, то первые два не [Bb][-_]
,
3 ответа
Попробуйте сопоставить это выражение:
^([Bb][\-_]\w*)|(\w*[^\w]+\w*)$
... который будет соответствовать "B_", "b_", "B-" и "b-" или любому, что не является символом слова. Считайте успешное совпадение "неудачей" и допустите только несоответствия.
Вы можете получить свои спички с
regEx.Pattern = "^[^ bB][^_ -]*\w*$"
regEx.MultiLine = True
Debug.Print regEx.Test("a24")
Debug.Print regEx.Test("a")
Debug.Print regEx.Test("B_")
Debug.Print regEx.Test(" a1")
Выход:
True
True
False
False