Страницы: 1
RSS
Регулярные выражения, вхождение всех подстрок в строку
 
Добрый день, подсмотрел макрос по регуляркам на сайте. Как вывести все найденные подстроки а не только первую? Метод Value не работает, в чем проблема не пойму.
 
RegExpExtract = matches.Item(1) даст второе значение
А вообще надо делать цикл по matches
 
Kuzmich, а метода, который возвращает сразу все нахождения нет?
 
есть:
Set RegExpExtract = matches
Изменено: Ігор Гончаренко - 25.06.2020 15:53:10
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Complite error:
или это произошел тонкий троллинг - я не  понимаю
Изменено: bananabrain - 25.06.2020 16:16:06
 
Код
Public Function RegExpExtract(Text As String, Pattern As String)
    On Error GoTo ErrHandl
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Pattern = Pattern
    RegEx.Global = True
    If RegEx.Test(Text) Then
        Set matches = RegEx.Execute(Text)
        Set RegExpExtract = matches
        Exit Function
    End If
ErrHandl:
    RegExpExtract = CVErr(xlErrValue)
End Function
 
Sub AllMatches()
  Dim m
  Set m = RegExpExtract([a2], [e1])
  Stop
End Sub

выполните AllMatches, когда остановится смотрите в окне Locals содержимое переменной m - там все, что вам нужно, разбирайте
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,разобрался, спасибо
 
bananabrain,
Для вашего примера
Код
Sub iNomer()
Dim mo As Object
Dim n As Integer
Dim i As Long
Dim j As Integer
   Range("B1:C2").ClearContents
 With CreateObject("VBScript.RegExp")
   .Global = True
   .Pattern = "\d{5}"
  For i = 1 To 2
     If .test(Cells(i, "A")) Then
       Set mo = .Execute(Cells(i, "A"))
           j = 2
         For n = 0 To mo.Count - 1
           Cells(i, j) = Val(mo(n))
           j = j + 1
         Next
    End If
   Next
 End With
End Sub
Страницы: 1
Наверх