На днях стал знакомиться с регулярками. На одном сайте при чтении не смог все понять. Есть код
Код
Sub fdsg()
Dim re, Item, s As String
s = "-word1 -word2 -word3 -word4 -word5"
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\s\-([a-z0-9]+)\s"
re.Global = True
For Each Item In re.Execute(s)
Debug.Print Item.Value
Next
End Sub
Я так читаю Pattern. Пробел, тире, (латиница в нижнем регистре и цифры) одно или более вхождений, пробел. Но в коллекции Matches получается только два значения
-word2 -word4, а я думаю, что должно быть 3 те -word3 тоже должно быть. Объясните пожалуйста балбесу, чего я не понимаю.
Да нет, все верно. Пробел в начале и в конце имеют только два значения по факту. Проверьте так: Берете строку "-word1 -word2 -word3 -word4 -word5". какое будет первое совпадение шаблона? - " -word2 ". После его нахождения оно изымается из строки. Получаем: "-word1-word3 -word4 -word5". И в итоге у нас в оставшейся строке остается только одно совпадение по шаблону: " -word4 ".
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Оказывается чтобы понять, надо было сходить пообедать. Теперь понял. Ответ конечно у Дмитрий Щербакова. Msi2102 RAN Вам тоже спасибо за отклик. Вечерком ваши паттерны изучу, а сейчас надо идти работать. Тема закрыта
Может проще использовать любой не пробельный символ. Или я не прав? Код:
Код
Sub fdsg()
Dim re, Item, s As String
s = "-word1 -word2 -word3 -word4 -word5"
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\S+"
re.Global = True
For Each Item In re.Execute(s)
Debug.Print Item.Value
Next
End Sub