Если вы ищете маршрут регулярных выражений, то вы можете сделать что-то вроде этого:
Dim line As String, arrStr, i As Long
line = "This is a test"
With New RegExp
.Pattern = "\S+"
.Global = True
If .test(line) Then
With .Execute(line)
ReDim arrStr(.Count - 1)
For i = 0 To .Count - 1
arrStr(i) = .Item(i)
Next
End With
End If
End With
ВАЖНО: Вам нужно будет создать ссылку на:
Microsoft VBScript Regular Expressions 5.5
в разделе Инструменты> Ссылки
В противном случае вы можете увидеть Позднее связывание ниже
У вашей первоначальной реализации исходного шаблона \^S*\$
были некоторые проблемы:
S*
фактически соответствовал буквальному верхнему регистру S, а не символу пробела, который вы искали - потому что он не был экранирован. - Даже если бы он был экранирован, вы бы сопоставили каждую строку, которую использовали, из-за вашего квантификатора:
*
означает совпадение ноль или больше \S
.Вы, вероятно, искали квантификатор +
( один или более). - Вы были хороши для того, чтобы сделать его жадным (не используя
*?
), так как вы хотели потреблять какнасколько это возможно.
Используемый мной шаблон: (\S+)
помещен в группу захвата (...)
, которая будет охватывать все случаи \S+
(все символы, которые НЕ являются пробелами, +
один или несколько раз.
Я также использовал .Global
, поэтому вы продолжите сопоставление после первого совпадения.
Как только высобрав все свои слова, вы можете затем перебрать коллекцию совпадений и поместить их в массив.
Позднее связывание:
Dim line As String, arrStr, i As Long
line = "This is a test"
With CreateObject("VBScript.RegExp")
.Pattern = "\S+"
.Global = True
If .test(line) Then
With .Execute(line)
ReDim arrStr(.Count - 1)
For i = 0 To .Count - 1
arrStr(i) = .Item(i)
Next
End With
End If
End With
Разные заметки
Я бы посоветовал просто использовать Split()
, но вы заявили, что были случаи, когда более чем один последовательный пробел мог быть проблемой. Если бы это было не так, вам бы вообще не понадобилось регулярное выражение,что-то вроде:
arrStr = Split(line)
Было бы разделить на каждый случайпространство