Вверх ↑
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2012-12-22 16:19:30 ЛС | профиль | цитата
ser_davkin, для начала следует понять, что регулярное выражение может состоять из подгрупп, которые можно создать с помощью скобок, например:
name=(w+), age=(d+)
Данная регулярка найдет вхождения строк вида "name=ser_davkin, age=30", при этом у нас есть две подгруппы, будем называть их соответственно name и age, так вот чтобы "выдернуть" из найденной строки имя и возраст мы можем использовать данные подгруппы. Чтобы получить содержимое подгруппы мы как раз и используем точку Matches, по индексу 0 у нас будет лежать строка "ser_davkin", а по индексу 1 - "30", длинна массива подгрупп соответственно будет равна 2.
  Важно понять, что в Matches не накапливаются результаты поиска всех подстрок в тексте (попытки использования чего мы видим в примерах выше), в этом массиве хранятся только подгруппы для текущей найденной подстроки.
  Если нам нужны вхождения всех подстрок, можно воспользоваться такой схемой:
Add(MainForm,7743276,504,161)
{
Width=1178
Height=639
}
Add(Button,7949013,504,203)
{
Left=295
Top=5
Caption="Open"
link(onClick,10391187:doEvent1,[])
}
Add(StrList,3583572,637,147)
{
FileName="test.txt"
Strings=#6:Level_|11:Бла,бла,бла|11:Блу,блу,блу|4:end_|6:Level_|13:Хоп, хоп, хоп|13:Хуп, хуп, хуп|13:Хап, хап, хап|4:end_|6:Level_|13:Поп, поп, поп|13:Пуп, пуп, пуп|13:Пап, пап, пап|4:end_|6:Level_|13:Лоп, лоп, лоп|13:Луп, луп, луп|13:Лап, лап, лап|4:end_|
}
Add(RE_Search,1960316,637,210)
{
Expression="Level_.*?end_"
Point(Matches)
link(onMatch,3329315:doAdd,[])
link(onNotFound,9078604:doStop,[(681,223)(681,257)(575,257)(575,230)])
link(SourceStr,3583572:Text,[])
}
Add(Memo,3329315,714,210)
{
Left=200
Top=45
Width=805
Height=535
ScrollBars=3
}
Add(Hub,10391187,553,203)
{
OutCount=3
link(onEvent1,3329315:doClear,[(686,209)(686,223)])
link(onEvent2,1960316:doExec,[])
link(onEvent3,9078604:doRepeat,[])
}
Add(Repeat,9078604,588,217)
{
Op1=Integer(0)
Op2=Integer(0)
link(onRepeat,1960316:doExecNext,[])
}

37.45.76.40 писал(а):
а он не пустой, а бесконечный (повесит программу если убрать ограничитель)

Это небольшой бажок, сейчас поправлю.
37.45.76.40 писал(а):
И почему пустой массив выдает количество = -1?

Не понял, где он это выдает?
карма: 10
0