1

Тема: RegExp: Поиск только первого вхождения регулярного выражения

Имеем строку:

02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03 89 02 00 00 91 1B 00 00 03

Регулярное выражение:

00 00 (\d{2})((\s\S{2}){0,})\s03\w?

Первая "скобка" находит 91

Вторая должна находить "1B 00 00", т.е. останавливаться на первом найденном "03", но фактически останавливается на последнем "03".

Как с помощью регулярного выражения добиться, чтобы данные второй скобки останавливалась на первом найденном 03.

Задача должна решаться только(!) с помощью регулярных выражений.

2

Re: RegExp: Поиск только первого вхождения регулярного выражения

plr, язык?

3

Re: RegExp: Поиск только первого вхождения регулярного выражения

alexii:
>> plr, язык?

А разве от этого что-то меняется?
Предвижу ваш ответ - "от языка зависит очень многое"

У RegExp свой язык (как и ООЯП COM-интерфейсов) и в контексте WSH отличается лишь доп. стартовым слэшем у JS.

4

Re: RegExp: Поиск только первого вхождения регулярного выражения

контексте WSH отличается лишь доп. стартовым слэшем у JS

Ваша фраза не понятна. Как контекст WSH влияет на количество слешей у JS?

JScript, JavaScript


// создание регулярного выражения
// с помощью инициализатора объекта
var re1 = /00 00 (\w+).+?(\w+ 00 00) 03/;

// с использованием конструктора RegExp
var re2 = new RegExp('00 00 (\\w+).+?(\\w+ 00 00) 03');

VBScript

Set re2 = New RegExp
re2.Pattern = "00 00 (\\w+).+?(\\w+ 00 00) 03"
( 2 * b ) || ! ( 2 * b )

5

Re: RegExp: Поиск только первого вхождения регулярного выражения

plr
Регулярное выражение должно выглядеть так:

00 00 (\d{2})((\s\S{2}){0,}?)\s03\w?

(после {0,} добавляется знак вопроса, тогда {0,} будет "не жадным")