Что нового

[Данные, строки] Скрипт проверки регулярных выражений

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Вот программа проверки регулярных выражений. В справке сказано что
Код:
$aCompare = StringRegExp($sText, $sPattern, 1)

Будет возвращать массив, не и он почему то не возвращается.... Вернее только один элемент...

Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <IE.au3>
#include <String.au3>

_IEErrorHandlerRegister ()
$oIE = _IECreateEmbedded ()

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 405, 192, 114)
	$Label1 = GUICtrlCreateLabel("Регулярное выражение:", 8, 8, 127, 17)
	$Input1 = GUICtrlCreateInput("", 136, 8, 481, 21)
	$Edit1 = GUICtrlCreateEdit("", 8, 56, 609, 153, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
	$Label2 = GUICtrlCreateLabel("Текст для поиска", 8, 32, 94, 17)
	$GUIActiveX = GUICtrlCreateObj($oIE, 8, 240, 609, 153)
	$Label3 = GUICtrlCreateLabel("Нашлось:", 16, 216, 53, 17)
	GUISetState(@SW_SHOW)
GUIRegisterMsg(0x0111, "Work")
#EndRegion ### END Koda GUI section ###

Func Work()
	If StringLen(GUICtrlRead($Input1)) >= 1 And StringLen(GUICtrlRead($Edit1)) >= 1 Then
		$sText = GUICtrlRead($Edit1)
		$sPattern = GUICtrlRead($Input1)
		$aCompare = StringRegExp($sText, $sPattern, 1)
		
		If UBound($aCompare) > 0 Then
			$iFind = 1
			$sVisibleTxt = ""
			For $i = 0 To UBound($aCompare) - 1
	 			$sAddToVisibleText = StringRegExpReplace($sText, $sPattern, "<FONT COLOR=RED>" & $aCompare[$i] & "</FONT>")
				If $sVisibleTxt = "" Then
					$sVisibleTxt = $sAddToVisibleText
				Else
					_StringInsert($sVisibleTxt, $sAddToVisibleText, -(StringLen($sVisibleTxt))/2)
					_StringInsert($sVisibleTxt, "
", -(StringLen($sVisibleTxt))/2)
				EndIf
			Next
			_StringInsert($sVisibleTxt, "
" & UBound($aCompare), -(StringLen($sVisibleTxt))/2)
			$sVisibleTxt = StringReplace($sVisibleTxt, @CRLF, "
")
		Else
			$iFind = 0
		EndIf
		
		If $iFind = 1 Then
			$File = FileOpen(@ScriptDir & "/" & "tmp.html", 2)
			FileWrite($File, $sVisibleTxt)
			FileClose($File)
		Else
			$File = FileOpen(@ScriptDir & "/" & "tmp.html", 2)
			FileWrite($File, $sText)
			FileClose($File)
		EndIf
		_IENavigate($oIE, @ScriptDir & "/" & "tmp.html")
	EndIf
EndFunc

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
В справке сказано что
Код:
$aCompare = StringRegExp($sText, $sPattern, 1)
Будет возвращать массив
Это где такое написанно? перепутал параметры.
Да, там написано что возвращает массив, но это массив совпадений, и если присмотреться в Remarks, то можно убедиться что с флагом 1 возвращается всего один элемент с первым найденным совпадением. Нужен флаг 3.

P.S
Я бы не стал так каждый раз писать в файл, лучше вообще не использовать IE, это можно сделать с RichEdit элементом.
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Решил проблему несколько дргуим образом. Кому интересно: http://www.autoit.svargan.ru/video-urok-po-autoit-8-programmirovanie-utility-dlya-proverki-regulyarnyx-vyrazhenij/
 
Верх