Регулярное выражение для поиска строки определённой длины в любой строке
Нужно выбрать строку точно из 5 цифр в произвольной строке, например, в этих строках будет выдано 12345
12345
12345бла
бла*12345
бла-12345+бла
в этих строках подходящей последовательности нет
бл0а9876
987654
бла+0987654321-бла
У меня есть решение, но я хочу ещё варианты. Мой вариант (?:\D|^)(\d{5})(?:\D|$) и выбрать первую группу. FLAVOR=ECMAScript, точнее, VBScript
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
(?:\D|^)(\d{5})(?!\d)
Подробности
(?:\D|^)- любой символ, кроме цифры (\D), или (|) начало строки (^)(\d{5})- захватывающая подмаска №1: пять любых цифр из набора символов ASCII(?!\d)- блок предварительного просмотра вперёд, который требует отсутствия цифры сразу после текущей позиции в строке (т.е. после пяти цифр не должно быть другой цифры).
Вам нужно только значение захватывающей подмаски, т.е. в VBScript нужно получить значение match.SubMatches(0).
Пример кода на VBScript:
Dim regEx As Object, Matches As Object, m As Object
Dim str As String
Dim coll As Collection
Set coll = New Collection
str = "12345 12345бла бла*12345 бла-12345+бла |||| бл0а9876 987654 бла+0987654321-бла"
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "(?:\D|^)(\d{5})(?!\d)"
regEx.Global = True
Set Matches = regEx.Execute(str)
If Matches.count > 0 Then
For Each m In Matches
coll.Add(m.SubMatches(0))
Wscript.Echo(m.SubMatches(0))
Next m
Else
Wscript.Echo("Совпадений не найдено.")
End If
If coll.count > 0 Then Wscript.Echo("Кол-во совпадений: " & coll.count)
Результат:
12345
12345
12345
12345
Кол-во совпадений: 4