purebasic.info

PureBasic forum
Текущее время: Вс ноя 19, 2017 9:53 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
СообщениеДобавлено: Пт июн 20, 2014 7:08 am 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 163
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
В 5.11 если убрать относящиеся к модулям, компилится.
В 5.21 - нет. Возможно, это из-за неполноценной версии, которая ходила на просторах инета.

Но в любом случае алгоритм обламывается на русских буквах, так как смещение вычисляется не правильно: pb_pcre_exec работает с utf8, смещения возвращает в байтах, а PB в юникоде и смещение <> позиция символа. Тут надо бы перевести строку из юникода в utf8 и работать с ней как с бинарной строкой (на худой конец как с ansi). Но как?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 25, 2014 8:51 pm 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 163
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Получился такой вот вариант для юникода.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
EnableExplicit
 
ImportC ""
        ;pb_pcre_exec(*pcre, *extra, subject.p-utf8, length, startoffset, options, *ovector, ovecsize)
        pb_pcre_exec(*pcre, *extra, *subject, length, startoffset, options, *ovector, ovecsize)
EndImport
 
Procedure.i RegexCreate( Pattern.s, IgnoreCase.l=#True )
        If IgnoreCase : IgnoreCase = #PB_RegularExpression_NoCase : EndIf
        ProcedureReturn CreateRegularExpression(#PB_Any,Pattern,IgnoreCase)
EndProcedure
 
Procedure.s RegexReplace( Regex.i, Subject.s, Replacement.s )
        Protected Dim ovec.i(30) ;, MaximumReference.i=9
        Protected GroupCount.i, GroupNumber.i, GroupBuffer.i, GroupBegin.i, GroupEnd.i, GroupString.s
        Protected MatchBegin.i, MatchEnd.i, MatchBuffer.i, MatchString.s
        Protected Result.s, Replacing.s
        Protected SubjectLength.i=StringByteLength(Subject,#PB_UTF8), offset.i
        Protected SubjectBuffer=AllocateMemory(SubjectLength+1,#PB_Memory_NoClear)
        Protected q.s=Chr(34)
        PokeS(SubjectBuffer,Subject,-1,#PB_UTF8)
 
        While offset < SubjectLength
                GroupCount = pb_pcre_exec(PeekL(Regex),0,SubjectBuffer,SubjectLength,offset,0,ovec(),ArraySize(ovec()))
                If GroupCount > 0 ; если не нашли = -1; если нашли 1 - совпадение; >1 - группы
                        Replacing = Replacement
                        MatchBegin = ovec(0)
                        MatchEnd = ovec(1)
                        MatchString = PeekS(SubjectBuffer+MatchBegin,MatchEnd-MatchBegin,#PB_UTF8)
                        If MatchBegin > offset
                                ; часть строки между началом и первым совпадением или между двумя совпадениями
                                Result + PeekS(SubjectBuffer+offset,MatchBegin-offset,#PB_UTF8)
                        EndIf
                        Debug "Match: "+Str(MatchBegin)+","+Str(MatchEnd)+" "+q+MatchString+q+" Left: "+q+PeekS(SubjectBuffer+offset,MatchBegin-offset,#PB_UTF8)+q+" Groups: "+Str(GroupCount)
                        Replacing = ReplaceString(Replacing,"\0",MatchString)
                        For GroupNumber = 1 To GroupCount-1 ; извлекаем группы и заменяем backref
                                GroupBegin = ovec(GroupNumber*2)
                                GroupEnd = ovec(GroupNumber*2+1)
                                ;If GroupEnd > GroupBegin ; ???
                                        GroupString = PeekS(SubjectBuffer+GroupBegin,GroupEnd-GroupBegin,#PB_UTF8)
                                        Replacing = ReplaceString(Replacing,"\"+Str(GroupNumber),GroupString)
                                ;EndIf
                                Debug "Group: "+Str(GroupBegin)+","+Str(GroupEnd)+" "+q+GroupString+q
                        Next
                        Result + Replacing
                        offset = MatchEnd
                Else ; больше ничего не найдено или вообще ничего не найдено, остаток строки в Result
                        Result + PeekS(SubjectBuffer+offset,SubjectLength-offset,#PB_UTF8)
                        Break
                EndIf
        Wend
        Debug "Subject: "+q+Subject+q
        Debug "Result:  "+q+Result+q
        FreeMemory(SubjectBuffer)
        ProcedureReturn Result
EndProcedure
 
Define.i rex = RegexCreate( "(..)(\d)(\d)(..)" )
RegexReplace( rex, "жумтых12поцы34ыахбул56пролд78йцукг", "<\4-\3\2-\1>" )
;RegexReplace( rex, "qwerty12uiop34asdfgh56jklzx78cvbnm", "<\4-\3\2-\1>" )
 



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт сен 04, 2015 2:39 am 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 163
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Коллеги, вот собрал варианты функций замены с использованием регулярных выражений, аж 4 варианта получилось.
RegexReplace
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
 
; Для юникода! Сохранять в UTF8!
 
EnableExplicit
 
ImportC ""
        ;pb_pcre_exec(*pcre, *extra, subject.p-utf8, length, startoffset, options, *ovector, ovecsize)
        pb_pcre_exec(*pcre, *extra, *subject, length, startoffset, options, *ovector, ovecsize)
EndImport
 
;==========================================================================================================================
Procedure.s RegexReplace1( Regex, Subject.s, Replacement.s )
        Protected Dim ovec(30) ; для MaximumReference = 9
        Protected GroupBegin, GroupEnd, GroupCount, GroupNumber, Offset
        Protected Result.s, Replacing.s
        Protected SubjectLength = StringByteLength(Subject,#PB_UTF8)
        Protected SubjectBuffer = AllocateMemory(SubjectLength+1,#PB_Memory_NoClear)
        PokeS(SubjectBuffer,Subject,-1,#PB_UTF8)
        While Offset < SubjectLength ; будем вызывать pb_pcre_exec, пока не закончится строка
                ; -1 - не нашли; 1 - совпадение; >1 - совпадение и группы
                GroupCount = pb_pcre_exec(PeekL(Regex),0,SubjectBuffer,SubjectLength,Offset,0,ovec(),ArraySize(ovec())) - 1
                If GroupCount >= 0
                        Replacing = Replacement
                        For GroupNumber=0 To 9 ; извлекаем группы и заменяем обратные ссылки
                                GroupBegin = ovec(GroupNumber*2)
                                GroupEnd = ovec(GroupNumber*2+1)
                                ; Если группы нет, то в ovec будут нули и PeekS вернёт пустую строку
                                Replacing = ReplaceString(Replacing,"\"+Str(GroupNumber),PeekS(SubjectBuffer+GroupBegin,GroupEnd-GroupBegin,#PB_UTF8))
                        Next
                        ; ovec(0) - начало совпадения, ovec(1) - конец совпадения
                        ; Result + часть строки между началом и первым совпадением или между двумя совпадениями + результат подстановки групп
                        Result + PeekS(SubjectBuffer+Offset,ovec(0)-Offset,#PB_UTF8) + Replacing
                        Offset = ovec(1)
                Else ; больше ничего не найдено или вообще ничего не найдено
                        ; Result + остаток строки
                        Result + PeekS(SubjectBuffer+Offset,SubjectLength-Offset,#PB_UTF8)
                        Break
                EndIf
        Wend
        FreeMemory(SubjectBuffer)
        ProcedureReturn Result
EndProcedure
 
;==========================================================================================================================
Procedure.s RegexReplace2( Regex, Subject.s, Replacement.s )
        Protected GroupNumber, GroupCount, MatchPos, Offset=1
        Protected Replacing.s, Result.s
        If ExamineRegularExpression(Regex,Subject)
                While NextRegularExpressionMatch(Regex)
                        MatchPos = RegularExpressionMatchPosition(Regex)
                        Replacing = ReplaceString(Replacement,"\0",RegularExpressionMatchString(Regex)) ; обратная ссылка \0
                        GroupCount = CountRegularExpressionGroups(Regex)
                        If GroupCount>9 : GroupCount=9 : EndIf ; только обратные ссылки \1 .. \9
                        For GroupNumber=1 To GroupCount
                                Replacing = ReplaceString(Replacing,"\"+Str(GroupNumber),RegularExpressionGroup(Regex,GroupNumber))
                        Next
                        For GroupNumber=GroupCount+1 To 9 ; отсутствующие группы на пустые строки
                                Replacing = ReplaceString(Replacing,"\"+Str(GroupNumber),"")
                        Next
                        ; Result + часть строки между началом и первым совпадением или между двумя совпадениями + результат подстановки групп
                        Result + Mid(Subject,Offset,MatchPos-Offset) + Replacing
                        Offset = MatchPos+RegularExpressionMatchLength(Regex)
                Wend
                ProcedureReturn Result + Mid(Subject,Offset) ; Result + остаток строки
        EndIf
        ProcedureReturn Subject ; без изменений
EndProcedure
 
;==========================================================================================================================
Procedure.s RegexReplace3( Regex, Subject.s, Replacement.s )
        Protected Dim ovec(30) ; для MaximumReference = 9
        Protected Dim Groups.s(9)
        Protected GroupBegin, GroupEnd, GroupCount, GroupNumber, Offset
        Protected RPos, ROffset, RLen=Len(Replacement)
        Protected Result.s, Replacing.s
        Protected SubjectLength = StringByteLength(Subject,#PB_UTF8)
        Protected SubjectBuffer = AllocateMemory(SubjectLength+1,#PB_Memory_NoClear)
        PokeS(SubjectBuffer,Subject,-1,#PB_UTF8)
        While Offset < SubjectLength ; будем вызывать pb_pcre_exec, пока не закончится строка
                ; -1 - не нашли; 1 - совпадение; >1 - совпадение и группы
                GroupCount = pb_pcre_exec(PeekL(Regex),0,SubjectBuffer,SubjectLength,Offset,0,ovec(),ArraySize(ovec())) - 1
                If GroupCount >= 0
                        For GroupNumber=0 To 9
                                ; Извлекаем строку совпадения (\0) и группы (\1..\9).
                                ; Если группы нет, то в ovec будут нули и PeekS вернёт пустую строку
                                GroupBegin = ovec(GroupNumber*2)
                                GroupEnd = ovec(GroupNumber*2+1)
                                Groups(GroupNumber) = PeekS(SubjectBuffer+GroupBegin,GroupEnd-GroupBegin,#PB_UTF8)
                        Next
                        Replacing = ""
                        RPos = 1
                        ROffset = 1
                        While RPos < RLen ; последний символ не обрабатываем
                                Select Mid(Replacement,RPos,2)
                                        Case "\\"
                                                RPos + 2
                                        Case "\0","\1","\2","\3","\4","\5","\6","\7","\8","\9"
                                                GroupNumber = Val(Mid(Replacement,RPos+1,1))
                                                Replacing + Mid(Replacement,ROffset,RPos-ROffset) + Groups(GroupNumber)
                                                RPos + 2
                                                ROffset = RPos
                                        Default
                                                RPos + 1
                                EndSelect
                        Wend
                        ; ovec(0) - начало совпадения, ovec(1) - конец совпадения
                        ; Result + часть строки между началом и первым совпадением или между двумя совпадениями
                        ;        + результат подстановки групп
                        ;        + остаток строки замены
                        Result + PeekS(SubjectBuffer+Offset,ovec(0)-Offset,#PB_UTF8) + Replacing + Mid(Replacement,ROffset)
                        Offset = ovec(1)
                Else ; больше ничего не найдено или вообще ничего не найдено
                        ; Result + остаток строки
                        Result + PeekS(SubjectBuffer+Offset,SubjectLength-Offset,#PB_UTF8)
                        Break
                EndIf
        Wend
        FreeMemory(SubjectBuffer)
        ProcedureReturn Result
EndProcedure
 
;==========================================================================================================================
Procedure.s RegexReplace4( Regex, Subject.s, Replacement.s )
        Protected MatchPos, GroupNumber, GroupCount, Offset=1
        Protected RPos, ROffset, RLen=Len(Replacement)
        Protected Replacing.s, Result.s, Spec.s
        If ExamineRegularExpression(Regex,Subject)
                While NextRegularExpressionMatch(Regex)
                        MatchPos = RegularExpressionMatchPosition(Regex)
                        GroupCount = CountRegularExpressionGroups(Regex)
                        Replacing = ""
                        RPos = 1
                        ROffset = 1
                        While RPos < RLen ; последний символ не обрабатываем
                                Spec = Mid(Replacement,RPos,2)
                                Select Spec
                                        Case "\\"
                                                RPos + 2
                                        Case "\0"
                                                Replacing + Mid(Replacement,ROffset,RPos-ROffset) + RegularExpressionMatchString(Regex)
                                                RPos + 2
                                                ROffset = RPos
                                        Case "\1","\2","\3","\4","\5","\6","\7","\8","\9"
                                                GroupNumber = Val(Mid(Spec,2))
                                                Replacing + Mid(Replacement,ROffset,RPos-ROffset)
                                                If GroupNumber <= GroupCount ; существующая группа, иначе - пусто
                                                        Replacing + RegularExpressionGroup(Regex,GroupNumber)
                                                EndIf
                                                RPos + 2
                                                ROffset = RPos
                                        Default
                                                RPos + 1
                                EndSelect
                        Wend
                        ; Result + часть строки между началом и первым совпадением или между двумя совпадениями
                        ;        + результат подстановки групп
                        ;        + остаток строки замены
                        Result + Mid(Subject,Offset,MatchPos-Offset) + Replacing + Mid(Replacement,ROffset)
                        Offset = MatchPos+RegularExpressionMatchLength(Regex)
                Wend
                ProcedureReturn Result + Mid(Subject,Offset) ; Result + остаток строки
        EndIf
        ProcedureReturn Subject ; без изменений
EndProcedure
 
;==========================================================================================================================
 
Define rex, r.s, s.s
 
r = "([abxy]+)..([abxy]+)"
s = "!----aaa\1bbb----!----xyxyx\2yxyxy----!"
rex = CreateRegularExpression(#PB_Any, r, #PB_RegularExpression_NoCase)
Debug s
Debug RegexReplace1( rex, s, "<\2===\0===\1><\4>" )
Debug RegexReplace2( rex, s, "<\2===\0===\1><\4>" )
Debug RegexReplace3( rex, s, "<\2===\0===\1><\4>" )
Debug RegexReplace4( rex, s, "<\2===\0===\1><\4>" )
 


Что за функции

RegexReplace1 - вариант на базе встроенной pb_pcre_exec. Идея взята с офф. форума, но там кривой вариант (криво работает с национальными символами). Работать должна в старых версиях Пурика, в том числе 5.11. Недостаток - подстановка обратных ссылок через ReplaceString что может вызвать "рекурсивную" вставку левых обратных ссылок и неправильному результату.

RegexReplace2 - с новыми функциями и тем же недостатком использования ReplaceString. Зато коротко.
Интересно, что когда в рабочей программе попробовал заменить первый вариант на второй, размер кода увеличился (правда, немного). К слову об оптимизации.

RegexReplace3 - на базе pb_pcre_exec. С посимвольным сканированием для замены обратных ссылок. Типа, долго. Зато, помимо устранения проблемы, можно экранировать символ \ и можно расширить на другие специальные символы. Должна работать в старых версиях Пурика.

RegexReplace4 - типа RegexReplace3, но на базе новых функций.

С именованными группами я не заморачивался. Количество обратных ссылок ограничил девятью.

Коллеги, гляньте незамылинным взглядом на наличие незамеченных ошибок. Или где с оптимизировать/улучшить можно. Буду признателен.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 26, 2016 4:58 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2227
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 65 раз.
Пункты репутации: 11
Очень удобный сервис:
http://regexr.com/

И вопрос: как "вырезать" с помощью регулярок?

Например, имеем исходные данные:
Код:
1
2
3
4
5
6
Random Text
Car Speed: 132 km/h
Randooooooooooom TXT
Car Speed: 120 km/h
BLA BLA BLA BLA BLA
Car Speed: 145 km/h


Необходимо достать скорости, это подходит:
Код:
1
Car Speed: [0-9]+ km\/h


Но мы получим результат ввиде строк со скоростями и текстом, а как получить результат сразу ввиде чисел? Т.е. такой:
Код:
1
2
3
132
120
145


_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 26, 2016 5:49 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1547
Откуда: Алматы
Благодарил (а): 11 раз.
Поблагодарили: 36 раз.
Пункты репутации: 5
эээ... стрингфилд? between?

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
text$ = "Car Speed: 132 km/h"
 
tmp$ = Between(text$, ": ", " km")
speed = val(tmp$)
Debug speed
 
text$ = Trim(text$)
cycle = CountString(text$, " ")
 
For i = 1 To cycle
  If StringField(text$, i, " ") = "Speed:"
    speed$ = StringField(text$, i+1, " ")
  EndIf
Next
 
Debug speed$ ; повторить с Val
 



а... так это для чего-то другого, не для PB?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 26, 2016 6:10 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2227
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 65 раз.
Пункты репутации: 11
В том то и дело, что я хочу это сделать одним RegExp'ом, а не потом еще поправлять, вырезать строки после регулярок.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 27, 2016 11:58 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 18, 2009 3:41 am
Сообщений: 1126
Благодарил (а): 86 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
qpAHToMAS писал(а):
В том то и дело, что я хочу это сделать одним RegExp'ом, а не потом еще поправлять, вырезать строки после регулярок.

если, конечно, я правильно понял задачу....
...не знаю сработает или нет, попробуй в своем коде это, а вдруХ :) :
(?<=Car Speed:\s)[0-9]+(?=\skm\/h)
UPD:
Код:
1
2
3
4
5
6
7
8
9
Random Text
Car Speed: 132 km/h
Randooooooooooom TXT
Car Speed: 120 km/h
BLA BLA BLA BLA BLA
Car Speed: 145 km/h
Cr Speed: 111 km/h
Car Speed: 222 k/h
333

code
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedure RegularExpressionString(string.s, RegExp.s, Array ArrayResult.s(1))
Protected NbFound.i=0, RegExpID.i
RegExpID=CreateRegularExpression(#PB_Any, RegExp)
 If RegExpID
    NbFound = ExtractRegularExpression(RegExpID, string, ArrayResult())
    FreeRegularExpression(RegExpID)
  Else
    MessageRequester("Information", RegularExpressionError())
  EndIf
;   CloseHandle_(RegExpID)
ProcedureReturn NbFound
EndProcedure
 
Dim ArrayResult.s(0)
 
string.s ="Random Text" + #CRLF$ + "Car Speed: 132 km/h" + #CRLF$ + "Randooooooooooom TXT" + #CRLF$ + "Car Speed: 120 km/h" + #CRLF$ + "BLA BLA BLA BLA BLA" + #CRLF$ + "Car Speed: 145 km/h" + #CRLF$ + "Cr Speed: 111 km/h" + #CRLF$ + "Car Speed: 222 k/h" + #CRLF$ + "333"
RegExp.s ="(?<=Car Speed:\s)[0-9]+(?=\skm\/h)"
 
If RegularExpressionString(string.s, RegExp.s, ArrayResult.s()) > 0
  For x = 0 To ArraySize(ArrayResult())
    Debug ArrayResult(x)
  Next
EndIf


ps: https://regex101.com/


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 27, 2016 12:59 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2227
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 65 раз.
Пункты репутации: 11
Да, то что надо, спасибо!

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 26, 2017 7:40 pm 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 163
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Ахтунг!
Функция pb_pcre_exec после 5.31 стала работать как-то по другому. Мои примеры viewtopic.php?f=1&t=3960&start=45 на основе этой функции работают неправильно с национальными (в том числе русскими) кодировками. Что-то разлабы там намудрили, хотя версия PCRE та же (8.30 2012-02-04). Подозреваю, это как-то связано с полным отказом от поддержки ANSI после 5.31. Надо разбираться. Встроенные функции (и мои примеры на основе их) работают правильно.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 26, 2017 8:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11053
Благодарил (а): 4 раз.
Поблагодарили: 374 раз.
Smitis писал(а):
Функция pb_pcre_exec после 5.31 стала работать как-то по другому.
В чем это выражается? Запустил пример в 5.31 и 5.60. Разницы не заметил.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб май 27, 2017 9:23 pm 
Не в сети
док

Зарегистрирован: Чт ноя 22, 2007 8:03 pm
Сообщений: 163
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Пётр писал(а):
В чем это выражается? Запустил пример в 5.31 и 5.60. Разницы не заметил.

В своём примере меняю "а" строчную на "А" заглавную.
Код:
1
2
3
4
5
6
7
8
r = "а"
s = "Мистер глянул на меня одним глазом, а затем, принюхавшись, укоризненно помахал обрубком хвоста."
rex = CreateRegularExpression(#PB_Any, r, #PB_RegularExpression_NoCase)
Debug s
Debug RegexReplace1( rex, s, "А" )
Debug RegexReplace2( rex, s, "А" )
Debug RegexReplace3( rex, s, "А" )
Debug RegexReplace4( rex, s, "А" )


Результат:
Код:
1
2
3
4
5
Мистер глянул на меня одним глазом, а затем, принюхавшись, укоризненно помахал обрубком хвоста.
Мистер глянул на меня одним А меня одним глазом, а затАзом, а зА заАтем, принюхавшись, уАвшись, укоризненно помахал обрубком хвостАхаАл обрубком хвоста.А.
Мистер глянул нА меня одним глАзом, А зАтем, принюхАвшись, укоризненно помАхАл обрубком хвостА.
Мистер глянул на меня одним А меня одним глазом, а затАзом, а зА заАтем, принюхавшись, уАвшись, укоризненно помахал обрубком хвостАхаАл обрубком хвоста.А.
Мистер глянул нА меня одним глАзом, А зАтем, принюхАвшись, укоризненно помАхАл обрубком хвостА.



PB 5.51
Поменяли UTF-8 на CP-1200? Позже проверю, сейчас нет времени.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5, 6

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB