beve
18-02-2009, 23:59
В регулярных выражениях я пока новичок, и для изучения именно на применении их в Autoit-овских функциях StringRegExp и StringRegExpReplace я набросал для себя програмку где два окна(переключение между окнами идет по кнопке соответствующей): одно на функцию StringRegExp, второе - на функцию StringRegExpReplace. Поля ввода соответствуют описанию в справке Autoit:
StringRegExp ( "test", "pattern" [, flag ] [, offset ] ] )
StringRegExpReplace ( "test", "pattern", "replace", [ count ] )
Конечно ничего особенного, но может кому из новичков пригодится.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
;Создание окна для функции StringRegExpReplace
$hForm = GUICreate("StringRegExpReplace( Test, Pattern, Replace, [count])", 662, 521, 233, 157,$WS_SIZEBOX)
GUISetBkColor(0x00E0FFFF) ; will change background color
$Edit_test=GUICtrlCreateEdit("", 0, 69, 661, 205, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
$Edit_rezultat=GUICtrlCreateEdit("", 0, 297, 661, 113, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
$Ok_button=GUICtrlCreateButton("Произвести поиск ", 0, 464, 661, 27)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT)
$Button_pereklyuchenie = GUICtrlCreateButton("StringRegExp >>", 560, 48, 100, 20,0)
$Button_Clean = GUICtrlCreateButton("Очистить", 584, 275, 76, 20,0)
$Label1 = GUICtrlCreateLabel("Pattern (Искомый образец (шаблон) )", 0, 416, 240, 15)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$Label2 = GUICtrlCreateLabel("Результат поиска/замены", 2, 276, 148, 21)
GUICtrlSetFont(-1, 9, 400, 2, "Comic Sans MS")
GUICtrlSetColor(-1, 0x000080)
$Label3 = GUICtrlCreateLabel("Test (Исходный текст)", 1, 48, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$Label4 = GUICtrlCreateLabel("Replace (Текст замены)", 1, 1, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$Label5 = GUICtrlCreateLabel("Count", 624, 1, 521, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$input_replase=GUICtrlCreateInput("\1", 0, 15, 621, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$input_count=GUICtrlCreateInput("0", 624, 15, 35, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$input_pattern=GUICtrlCreateInput("", 0, 432, 661, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
;Создание окна для функции StringRegExp
$2hForm = GUICreate("StringRegExp (Test, Pattern, [flag],[ offset])", 662, 521, 233, 157,$WS_SIZEBOX)
GUISetBkColor(0x00E0FFFF) ; will change background color
$2Edit_test=GUICtrlCreateEdit("", 0, 69, 661, 205, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
$2Edit_rezultat=GUICtrlCreateEdit("", 0, 297, 661, 113, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
$2Ok_button=GUICtrlCreateButton("Произвести поиск ", 0, 464, 661, 27)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT)
$2Button_pereklyuchenie = GUICtrlCreateButton("StringRegExpReplace >>", 535, 48, 125, 20,0)
$2Button_Clean = GUICtrlCreateButton("Очистить", 584, 275, 76, 20,0)
$2Label1 = GUICtrlCreateLabel("Pattern (Искомый образец (шаблон) )", 0, 416, 240, 15)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2Label2 = GUICtrlCreateLabel("Результат поиска", 2, 276, 148, 21)
GUICtrlSetFont(-1, 9, 400, 2, "Comic Sans MS")
GUICtrlSetColor(-1, 0x000080)
$2Label3 = GUICtrlCreateLabel("Test (Исходный текст)", 1, 48, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2Label4 = GUICtrlCreateLabel("Flag", 1, 1, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2Label5 = GUICtrlCreateLabel("Offset", 624, 1, 521, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2input_flag=GUICtrlCreateInput("3", 0, 15, 621, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$2input_offset=GUICtrlCreateInput("1", 624, 15, 35, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$2input_pattern=GUICtrlCreateInput("", 0, 432, 661, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
GUISetState(@SW_SHOW,$hForm)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Ok_button ;окно функции StringRegExpReplace
_onbuttonOk()
Case $2Ok_button ;окно функции StringRegExp
_onbuttonOk2()
Case $Button_Clean ;очистить поле ввода текста
GUICtrlSetData($Edit_test,"")
Case $2Button_Clean ;очистить поле ввода текста
GUICtrlSetData($2Edit_test,"")
Case $Button_pereklyuchenie
_Setokno() ;переключение на второе окно и соответственно к функци StringRegExp
Case $2Button_pereklyuchenie
_Setokno2() ;возвращение к первому окну и соответственно к функции StringRegExpReplace
EndSwitch
WEnd
;функция при нажатии на кнопку Произвести поиск в окне функции StringRegExpReplace
Func _onbuttonOk()
$get_count = GUICtrlRead($input_count)
$array_rezultat = StringRegExpReplace((GUICtrlRead($Edit_test)), (GUICtrlRead($input_pattern)),(GUICtrlRead($input_replase)), $get_count)
If @error = 0 Then
$get_count = @extended
EndIf
GUICtrlSetData($Edit_rezultat,$array_rezultat)
EndFunc
;функция при нажатии на кнопку Произвести поиск в окне функции StringRegExp
Func _onbuttonOk2()
$nOffset = GUICtrlRead($2input_offset)
$nflag=GUICtrlRead($2input_flag)
Switch $nflag
Case 0
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
EndIf
if $2array_rezultat=1 then
GUICtrlSetData($2Edit_rezultat, "Есть совпадение")
else
GUICtrlSetData($2Edit_rezultat, "Совпадений нету")
endif
Case 1
Local $ar[100],$i=0
While 1
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
Else
ExitLoop
EndIf
$ar[$i]=$2array_rezultat[0]
$i=$i+1
WEnd
$sAr_to_string=_ArrayToString($ar, @CRLF, 0, $i-1)
GUICtrlSetData($2Edit_rezultat, $sAr_to_string)
Case 3
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
EndIf
$sAr_to_string=_ArrayToString($2array_rezultat, @CRLF, 0, UBound($2array_rezultat) - 1)
GUICtrlSetData($2Edit_rezultat,$sAr_to_string)
Case 4
Local $ar[100],$k=0
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
EndIf
for $i = 0 to UBound($2array_rezultat) - 1
$match = $2array_rezultat[$i]
for $j = 0 to UBound($match) - 1
$ar[$k]=$match[$j]
$k=$k+1
Next
Next
$sAr_to_string=_ArrayToString($ar, @CRLF, 0, $k-1)
GUICtrlSetData($2Edit_rezultat,$sAr_to_string)
EndSwitch
EndFunc ;_onbuttonOk2()
;переключение на второе окно и соответственно к функци StringRegExp
Func _Setokno()
GUISetState(@SW_HIDE,$hForm)
GUISetState(@SW_SHOW,$2hForm)
;GUICtrlSetData($2Button_pereklyuchenie,"StringRegExpReplace >>")
EndFunc
;переключение на первое окно и соответственно к функци StringRegExpReplace
Func _Setokno2()
GUISetState(@SW_HIDE,$2hForm)
GUISetState(@SW_SHOW,$hForm)
EndFunc
Жалко Раскрашенный код поместить сюда не удалось, ибо немного длинный, ну что есть, то есть.
Добавлено:
Скрипт нужно запустить в SciTe или откомпилировать в exe файл и потом запустить...
StringRegExp ( "test", "pattern" [, flag ] [, offset ] ] )
StringRegExpReplace ( "test", "pattern", "replace", [ count ] )
Конечно ничего особенного, но может кому из новичков пригодится.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
;Создание окна для функции StringRegExpReplace
$hForm = GUICreate("StringRegExpReplace( Test, Pattern, Replace, [count])", 662, 521, 233, 157,$WS_SIZEBOX)
GUISetBkColor(0x00E0FFFF) ; will change background color
$Edit_test=GUICtrlCreateEdit("", 0, 69, 661, 205, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
$Edit_rezultat=GUICtrlCreateEdit("", 0, 297, 661, 113, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
$Ok_button=GUICtrlCreateButton("Произвести поиск ", 0, 464, 661, 27)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT)
$Button_pereklyuchenie = GUICtrlCreateButton("StringRegExp >>", 560, 48, 100, 20,0)
$Button_Clean = GUICtrlCreateButton("Очистить", 584, 275, 76, 20,0)
$Label1 = GUICtrlCreateLabel("Pattern (Искомый образец (шаблон) )", 0, 416, 240, 15)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$Label2 = GUICtrlCreateLabel("Результат поиска/замены", 2, 276, 148, 21)
GUICtrlSetFont(-1, 9, 400, 2, "Comic Sans MS")
GUICtrlSetColor(-1, 0x000080)
$Label3 = GUICtrlCreateLabel("Test (Исходный текст)", 1, 48, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$Label4 = GUICtrlCreateLabel("Replace (Текст замены)", 1, 1, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$Label5 = GUICtrlCreateLabel("Count", 624, 1, 521, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$input_replase=GUICtrlCreateInput("\1", 0, 15, 621, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$input_count=GUICtrlCreateInput("0", 624, 15, 35, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$input_pattern=GUICtrlCreateInput("", 0, 432, 661, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
;Создание окна для функции StringRegExp
$2hForm = GUICreate("StringRegExp (Test, Pattern, [flag],[ offset])", 662, 521, 233, 157,$WS_SIZEBOX)
GUISetBkColor(0x00E0FFFF) ; will change background color
$2Edit_test=GUICtrlCreateEdit("", 0, 69, 661, 205, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
$2Edit_rezultat=GUICtrlCreateEdit("", 0, 297, 661, 113, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
$2Ok_button=GUICtrlCreateButton("Произвести поиск ", 0, 464, 661, 27)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT)
$2Button_pereklyuchenie = GUICtrlCreateButton("StringRegExpReplace >>", 535, 48, 125, 20,0)
$2Button_Clean = GUICtrlCreateButton("Очистить", 584, 275, 76, 20,0)
$2Label1 = GUICtrlCreateLabel("Pattern (Искомый образец (шаблон) )", 0, 416, 240, 15)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2Label2 = GUICtrlCreateLabel("Результат поиска", 2, 276, 148, 21)
GUICtrlSetFont(-1, 9, 400, 2, "Comic Sans MS")
GUICtrlSetColor(-1, 0x000080)
$2Label3 = GUICtrlCreateLabel("Test (Исходный текст)", 1, 48, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2Label4 = GUICtrlCreateLabel("Flag", 1, 1, 357, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2Label5 = GUICtrlCreateLabel("Offset", 624, 1, 521, 21)
GUICtrlSetFont(-1, 9, 400, 2)
GUICtrlSetColor(-1, 0x000080)
$2input_flag=GUICtrlCreateInput("3", 0, 15, 621, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$2input_offset=GUICtrlCreateInput("1", 624, 15, 35, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
$2input_pattern=GUICtrlCreateInput("", 0, 432, 661, 32)
GUICtrlSetFont(-1, 14, 0, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x0000FF)
GUISetState(@SW_SHOW,$hForm)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Ok_button ;окно функции StringRegExpReplace
_onbuttonOk()
Case $2Ok_button ;окно функции StringRegExp
_onbuttonOk2()
Case $Button_Clean ;очистить поле ввода текста
GUICtrlSetData($Edit_test,"")
Case $2Button_Clean ;очистить поле ввода текста
GUICtrlSetData($2Edit_test,"")
Case $Button_pereklyuchenie
_Setokno() ;переключение на второе окно и соответственно к функци StringRegExp
Case $2Button_pereklyuchenie
_Setokno2() ;возвращение к первому окну и соответственно к функции StringRegExpReplace
EndSwitch
WEnd
;функция при нажатии на кнопку Произвести поиск в окне функции StringRegExpReplace
Func _onbuttonOk()
$get_count = GUICtrlRead($input_count)
$array_rezultat = StringRegExpReplace((GUICtrlRead($Edit_test)), (GUICtrlRead($input_pattern)),(GUICtrlRead($input_replase)), $get_count)
If @error = 0 Then
$get_count = @extended
EndIf
GUICtrlSetData($Edit_rezultat,$array_rezultat)
EndFunc
;функция при нажатии на кнопку Произвести поиск в окне функции StringRegExp
Func _onbuttonOk2()
$nOffset = GUICtrlRead($2input_offset)
$nflag=GUICtrlRead($2input_flag)
Switch $nflag
Case 0
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
EndIf
if $2array_rezultat=1 then
GUICtrlSetData($2Edit_rezultat, "Есть совпадение")
else
GUICtrlSetData($2Edit_rezultat, "Совпадений нету")
endif
Case 1
Local $ar[100],$i=0
While 1
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
Else
ExitLoop
EndIf
$ar[$i]=$2array_rezultat[0]
$i=$i+1
WEnd
$sAr_to_string=_ArrayToString($ar, @CRLF, 0, $i-1)
GUICtrlSetData($2Edit_rezultat, $sAr_to_string)
Case 3
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
EndIf
$sAr_to_string=_ArrayToString($2array_rezultat, @CRLF, 0, UBound($2array_rezultat) - 1)
GUICtrlSetData($2Edit_rezultat,$sAr_to_string)
Case 4
Local $ar[100],$k=0
$2array_rezultat = StringRegExp((GUICtrlRead($2Edit_test)), (GUICtrlRead($2input_pattern)),$nflag, $nOffset)
If @error = 0 Then
$nOffset = @extended
EndIf
for $i = 0 to UBound($2array_rezultat) - 1
$match = $2array_rezultat[$i]
for $j = 0 to UBound($match) - 1
$ar[$k]=$match[$j]
$k=$k+1
Next
Next
$sAr_to_string=_ArrayToString($ar, @CRLF, 0, $k-1)
GUICtrlSetData($2Edit_rezultat,$sAr_to_string)
EndSwitch
EndFunc ;_onbuttonOk2()
;переключение на второе окно и соответственно к функци StringRegExp
Func _Setokno()
GUISetState(@SW_HIDE,$hForm)
GUISetState(@SW_SHOW,$2hForm)
;GUICtrlSetData($2Button_pereklyuchenie,"StringRegExpReplace >>")
EndFunc
;переключение на первое окно и соответственно к функци StringRegExpReplace
Func _Setokno2()
GUISetState(@SW_HIDE,$2hForm)
GUISetState(@SW_SHOW,$hForm)
EndFunc
Жалко Раскрашенный код поместить сюда не удалось, ибо немного длинный, ну что есть, то есть.
Добавлено:
Скрипт нужно запустить в SciTe или откомпилировать в exe файл и потом запустить...