Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] В помощь по функциям StringRegExp и StringRegExpReplace

Ответить
Настройки темы
[решено] В помощь по функциям StringRegExp и StringRegExpReplace

Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: beve
Дата: 19-02-2009
В регулярных выражениях я пока новичок, и для изучения именно на применении их в 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 файл и потом запустить...

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:59, 18-02-2009

 

Аватара для semiono

Ветеран


Сообщения: 838
Благодарности: 33

Профиль | Отправить PM | Цитировать


Помгите, только не ругайтесь! Как вообще это работает, ибо я ничего не понимаю...

Код: Выделить весь код
$x = RegRead("HKLM\Software\ax","")
$y = StringRegExpReplace($x,"{x}","")
RegWrite("HKLM\Software\ax","","REG_SZ",$y)
Exit
Почему ничего не происходит? Собсно я хочу для себя зделать примерчик, чтоб поизучать экспрессии наглядно.
Например, убрать из строки "1111-1111-111-11111-0" всё знаки "-", и заодно другие паттерны прощупать...
В примерах неужели нельзя без While итп. конструкций обойтись итак нифига не понятно!
Вот у мну пример простой, как и нужно, только что-то не работает. Может в $y флаги чтоль возвращает,
а как тогда со строкой работать? И в чём разница StringRegExpReplace vs StringRegExp - только первая чтоли
диструктивно работает?

ПС. Ничего себе примерчег для новичков, который тут надо мной - это уже целая утилита, но не пример!

А ну всё допилил! [resheno]
Код: Выделить весь код
MsgBox(0, "", StringRegExpReplace("-987654321-2-3-4-5-6-7-8-9---", "[^0-9]", ""))

-------
Полезное сообщение


Последний раз редактировалось semiono, 19-02-2009 в 11:47.


Отправлено: 10:51, 19-02-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата semiono:
убрать из строки "1111-1111-111-11111-0" всё знаки "-" »
Код: Выделить весь код
MsgBox(0, "", StringRegExpReplace("-987654321-2-3-4-5-6-7-8-9---", "-", ""))
Цитата semiono:
И в чём разница StringRegExpReplace vs StringRegExp - только первая чтоли
диструктивно работает? »
как и следует из названия StringRegExpReplace - заменяет, StringRegExp только "парсит", но интеллекта у последней побольше:
Код: Выделить весь код
#include <array.au3>

$a = StringRegExp("-987654321-2-3-4-5-6-7-8-9---", "[0-9]+", 3)
_ArrayDisplay($a, "$a")
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:49, 19-02-2009 | #3


Аватара для semiono

Ветеран


Сообщения: 838
Благодарности: 33

Профиль | Отправить PM | Цитировать


От того что парсит, толку мало для стратегических задач
Но наверно с логическими построениями может и быть толк реальный, наверно... не только информационый!

-------
Полезное сообщение


Отправлено: 20:56, 19-02-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] В помощь по функциям StringRegExp и StringRegExpReplace

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] StringRegExp не работает? %) Freesty1er AutoIt 4 26-01-2022 09:26
[решено] Нужна помощь с StringRegExpReplace ( "test", "PATTERN-ом", "\1"). ikif AutoIt 6 28-07-2009 20:06
[решено] Ищу русскую справку по AutoIT по функциям IEx ZeroCrash AutoIt 19 01-07-2009 10:57
[решено] И снова stringRegExpReplace... Twix1124 AutoIt 6 01-06-2009 03:49
[решено] Хелп с StringRegExpReplace xSpaiderx AutoIt 8 31-03-2009 23:16




 
Переход