purebasic.info
http://purebasic.info/phpBB3ex/

Обучение регулярным выражениям в PB
http://purebasic.info/phpBB3ex/viewtopic.php?f=6&t=954
Страница 3 из 6

Автор:  qpAHToMAS [ Пн мар 04, 2013 9:15 pm ]
Заголовок сообщения: 

Никита Однороб, нужно по настоящему шарить, что бы всё было точно на сколько это возможно.
Если уверен в себе. то добро пожаловать в ICQ (в профиле). Ну, или E-Mail, IRC.

Автор:  qpAHToMAS [ Вт мар 05, 2013 11:57 pm ]
Заголовок сообщения: 

Вопрос по поводу "вырезания". Например, ищу цифру в таком тексте:
Цитата:
TEXT TEXT LEFT 4 RIGHT TEXT TEXT

Я могу сделать так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EnableExplicit
 
#regexp = 0
 
If CreateRegularExpression(#regexp, "\QLEFT \E[0-9]\Q RIGHT\E")
  Dim result.s(0)
  Define found.i = ExtractRegularExpression(#regexp, "TEXT TEXT LEFT 4 RIGHT TEXT TEXT", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug result(counter)
  Next
Else
  Debug RegularExpressionError()
EndIf


И на выходе получу найденную строку "LEFT 4 RIGHT", могу ли я теперь "вырезать" лишь цифру? Т.е. что бы получить просто "4" без "LEFT" и без "RIGHT". Разумеется, вырезать через регулярные выражения, а не через работу со строками в PB.

Автор:  MrF [ Ср мар 06, 2013 12:48 am ]
Заголовок сообщения: 

(\d{1,9})
add
Или можно так (?<=() LEFT.)(\d{1,9})(?=().RIGHT)

Автор:  Никита Однороб [ Ср мар 06, 2013 10:50 am ]
Заголовок сообщения: 

qpAHToMAS писал(а):
И на выходе получу найденную строку "LEFT 4 RIGHT", могу ли я теперь "вырезать" лишь цифру?
А зачем? Вот код, с первого раза достаёт цифру:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EnableExplicit 
 
#regexp = 0
 
If CreateRegularExpression(#regexp, "[0-9]")
  Dim result.s(0)
  Define found.i = ExtractRegularExpression(#regexp, "TEXT TEXT LEFT 4 RIGHT TEXT TEXT", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug result(counter)
  Next
Else
  Debug RegularExpressionError()
EndIf


Автор:  MrF [ Ср мар 06, 2013 10:58 am ]
Заголовок сообщения: 

Никита Однороб
Вот достань из этого текста только четверку
Код:
1
2
3
TEXT TEXT 3LEFT 3 RIGHT3 TEXT TEXT
TEXT TEXT 4LEFT 4 RIGHT4 TEXT TEXT
TEXT TEXT 5LEFT 5 RIGHT5 TEXT TEXT


:D

Автор:  Никита Однороб [ Ср мар 06, 2013 11:02 am ]
Заголовок сообщения: 

MrF писал(а):
Вот достань из этого текста только четверку
А фигушки, достал :D
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EnableExplicit 
 
#regexp = 0
 
If CreateRegularExpression(#regexp, "[ ][0-9][ ]")
  Dim result.s(00)
  Define found.i = ExtractRegularExpression(#regexp, "TEXT TEXT 4LEFT 4 RIGHT4 TEXT TEXT ", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug Trim(result(counter))
  Next
Else
  Debug RegularExpressionError()
EndIf



Ещё будешь тестировать по регуляркам? :D :D

Автор:  MrF [ Ср мар 06, 2013 11:18 am ]
Заголовок сообщения: 

Из всего текста, а не из второй строки. Хитрец :D

Автор:  qpAHToMAS [ Ср мар 06, 2013 11:19 am ]
Заголовок сообщения: 

MrF писал(а):
(\d{1,9})

Это походу не то.

MrF писал(а):
Или можно так (?<=() LEFT.)(\d{1,9})(?=().RIGHT)

Позже проверю.

Никита Однороб писал(а):
А зачем? Вот код, с первого раза достаёт цифру:

Никита Однороб писал(а):
А фигушки, достал Very Happy

Цифр может быть сотня, надо именно ту, которая между "LEFT " и " RIGHT".

Автор:  Никита Однороб [ Ср мар 06, 2013 11:21 am ]
Заголовок сообщения: 

qpAHToMAS писал(а):
Цифр может быть сотня, надо именно ту, которая между "LEFT " и " RIGHT"
Вот пример:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EnableExplicit 
 
#regexp = 0
 
If CreateRegularExpression(#regexp, "[ ][0-9]+[ ]")
  Dim result.s(00)
  Define found.i = ExtractRegularExpression(#regexp, "22TEXT 44TEXT232 58LEFT 42 RIGHT4534 23TEXT 2TEXT 45455", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug Trim(result(counter))
  Next
Else
  Debug RegularExpressionError()
EndIf

Цифр много, а достаёт именно 42 (между LEFT и RIGHT)

Автор:  Никита Однороб [ Ср мар 06, 2013 11:23 am ]
Заголовок сообщения: 

MrF писал(а):
Из всего текста, а не из второй строки. Хитрец :D
Я из второй строки доставал :D

Автор:  lakomet [ Ср мар 06, 2013 11:26 am ]
Заголовок сообщения: 

Никита Однороб писал(а):
Цифр много, а достаёт именно 42 (между LEFT и RIGHT)

Да? А так чЁ дАстаёт?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EnableExplicit 
 
#regexp = 0
 
If CreateRegularExpression(#regexp, "[ ][0-9]+[ ]")
  Dim result.s(00)
  Define found.i = ExtractRegularExpression(#regexp, "22TEXT 44 TEXT232 58LEFT 42 RIGHT4534 23TEXT 2TEXT 45455", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug Trim(result(counter))
  Next
Else
  Debug RegularExpressionError()
EndIf


Автор:  qpAHToMAS [ Ср мар 06, 2013 11:26 am ]
Заголовок сообщения: 

Никита Однороб писал(а):
Цифр много, а достаёт именно 42 (между LEFT и RIGHT)

:?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
EnableExplicit
#regexp = 0
If CreateRegularExpression(#regexp, "[ ][0-9]+[ ]")
  Dim result.s(00)
  Define found.i = ExtractRegularExpression(#regexp, "22 TEXT 44 TEXT232 58 LEFT 42 RIGHT 4534 23 TEXT 2 TEXT 45455", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug Trim(result(counter))
  Next
Else
  Debug RegularExpressionError()
EndIf


Автор:  MrF [ Ср мар 06, 2013 11:28 am ]
Заголовок сообщения: 

qpAHToMAS писал(а):
Это походу не то.

Это если из короткого текста "LEFT 4 RIGHT" выдергивать.

Никита Однороб
Нет, твой пример достает только те цифры у которых пробелы по бокам. В этой строке "22 TEXT 44 TEXT232 58 LEFT 42 RIGHT 45 34 23 TEXT 2 TEXT 45455 " он все найдет.

Автор:  lakomet [ Ср мар 06, 2013 11:31 am ]
Заголовок сообщения: 

qpAHToMAS
Пробуй
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
EnableExplicit 
 
#regexp = 0
 
If CreateRegularExpression(#regexp, "(?<=LEFT)\s[0-9]+\s(?=RIGHT)")
  Dim result.s(00)
  Define found.i = ExtractRegularExpression(#regexp, "22TEXT 44 TEXT232 58LEFT 42 RIGHT4534 23TEXT 2TEXT 45455", result())
  Define counter.i
  For counter = 0 To found - 1
    Debug Trim(result(counter))
  Next
Else
  Debug RegularExpressionError()
EndIf


Автор:  Никита Однороб [ Ср мар 06, 2013 11:37 am ]
Заголовок сообщения: 

Код lakomet'а робит. :)

Страница 3 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/