Hallo zusammen,
hab heut' beim Aufräumen ein verschollen geglaubtes Skript gefunden. Der Code ist wirr aber es scheint, soweit ich das im Moment beurteilen kann, zu funktionieren. Vieleicht findet es ja noch bei jemanden Verwendung.
[Blockierte Grafik: http://h-2.abload.de/img/regexpha2z.png]
- markierte Skriptstellen werden beim Start als zu prüfender String übernommen
- Dateien und Webseiten lassen sich direkt als zu prüfender String importieren
- kleine Bibliothek für reguläre Ausdrücke
- für AutoIt formatierter Export des Regexp, des Quellstrings und des Outputs in die Zwischenablage
SciTE:
"als c:\Programme\AutoIt3\SciTE\RegexpTester\regexp.au3 speichern"
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <GuiRichEdit.au3>
#include <GuiListView.au3>
#include <array.au3>
Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)
#region DeclareVars
Global $guiMain, $bRun, $bLibrary, $bFile, $bWeb, $bExport, $bHelp, $aControls[5], $eOutput
Global $guiLibrary, $lPattern, $bSelect, $bChange, $bNew, $bDel, $bClose, $aIni
Global $guiNewPattern, $iNewPattern, $iNewDescription, $bSaveNew, $Label1, $Label2
Global $guiChangePattern, $iChangeDescription, $iChangePattern, $bSaveChange, $label3, $Label4
Global $guiLoadWebpage, $iUrl, $bLoad
Global $guiChangePattern, $bAbbort
Global $aFlag[5] = [0, 1, 2, 3, 4]
Global $aError[5]
Global $temp
Global $outputBkColor = 0x000000
Global $outputFontColor = 0xffffff
#endregion DeclareVars
Global $ini = @ScriptDir & "\data.ini"
#region guiLibrary
$guiLibrary = GUICreate("Bibliothek", 539, 438, 254, 124, BitOR($WS_CAPTION, $WS_GROUP), Default, $guiMain)
$lPattern = GUICtrlCreateListView("", 8, 8, 426, 422)
$bSelect = GUICtrlCreateButton("auswählen", 440, 8, 91, 25)
$bChange = GUICtrlCreateButton("ändern", 440, 40, 91, 25)
$bNew = GUICtrlCreateButton("neu", 440, 72, 91, 25)
$bDel = GUICtrlCreateButton("löschen", 440, 104, 91, 25)
$bClose = GUICtrlCreateButton("schließen", 440, 154, 91, 25)
GUISetState(@SW_HIDE)
#endregion guiLibrary
#region guiMain
$guiMain = GUICreate("", 794, 515)
$aControls[1] = GUICtrlCreateInput("", 8, 8, 520, 21)
$aControls[2] = GUICtrlCreateCombo("", 536, 8, 45, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
$aControls[3] = GUICtrlCreateInput("", 584, 8, 41, 21)
$bRun = GUICtrlCreateButton("", 630, 8, 25, 25, $BS_ICON)
$bLibrary = GUICtrlCreateButton("", 655, 8, 25, 25, $BS_ICON)
$bFile = GUICtrlCreateButton("", 680, 8, 25, 25, $BS_ICON)
$bWeb = GUICtrlCreateButton("", 705, 8, 25, 25, $BS_ICON)
$bExport = GUICtrlCreateButton("", 730, 8, 25, 25, $BS_ICON)
$bHelp = GUICtrlCreateButton("", 760, 8, 25, 25, $BS_ICON)
$aControls[4] = GUICtrlCreateEdit("", 8, 38, 777, 210)
$eOutput = GUICtrlCreateEdit("### Output ###", 8, 255, 777, 245, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
GUISetState(@SW_SHOW)
#endregion guiMain
#region Events
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
GUICtrlSetOnEvent($bRun, "_run")
GUICtrlSetOnEvent($bLibrary, "_showLibrary")
GUICtrlSetOnEvent($bSelect, "_selectPattern")
GUICtrlSetOnEvent($bNew, "_newPattern")
GUICtrlSetOnEvent($bChange, "_changePattern")
GUICtrlSetOnEvent($bDel, "_deletePattern")
GUICtrlSetOnEvent($bClose, "_closeLibrary")
GUICtrlSetOnEvent($bFile, "_loadFile")
GUICtrlSetOnEvent($bWeb, "_loadWeb")
GUICtrlSetOnEvent($bHelp, "_openHelp")
GUICtrlSetOnEvent($bExport, "_export")
#endregion Events
#region set Controls
GUICtrlSetData($aControls[1], "(.+)")
GUICtrlSetTip($aControls[1], "Pattern")
For $element In $aFlag
GUICtrlSetData($aControls[2], $element, $aFlag[0])
Next
GUICtrlSetTip($aControls[2], "Flag")
GUICtrlSetData($aControls[3], "1")
GUICtrlSetTip($aControls[3], "Offset")
If IsArray($CMDLINE) And $CMDLINE[0] = 1 And $CMDLINE[1] <> "" Then
GUICtrlSetData($aControls[4], $CMDLINE[1])
EndIf
GUICtrlSetImage($bRun, @SystemDir & "\shell32.dll", 246, 0)
GUICtrlSetTip($bRun, "ausführen")
GUICtrlSetImage($bFile, @SystemDir & "\shell32.dll", 2, 0)
GUICtrlSetTip($bFile, "Datei laden")
GUICtrlSetImage($bWeb, @SystemDir & "\shell32.dll", 15, 0)
GUICtrlSetTip($bWeb, "Webseite laden")
GUICtrlSetImage($bLibrary, @SystemDir & "\shell32.dll", 173, 0)
GUICtrlSetTip($bLibrary, "Bibliothek öffnen")
GUICtrlSetImage($bExport, @SystemDir & "\shell32.dll", 16750, 0)
GUICtrlSetTip($bExport, "in Zwischenablage exportieren")
GUICtrlSetImage($bHelp, @SystemDir & "\shell32.dll", 24, 0)
GUICtrlSetTip($bHelp, "Onlinehilfe")
GUICtrlSetBkColor($eOutput, $outputBkColor)
GUICtrlSetColor($eOutput, $outputFontColor)
_GUICtrlListView_InsertColumn($lPattern, 0, "Beschreibung", 220)
_GUICtrlListView_InsertColumn($lPattern, 1, "Pattern", 200)
#endregion set Controls
While 1
Sleep(100)
WEnd
Func _run()
Local $errorMessage
Local $outputMessage = "### Output ###"
Local $result
Local $sError, $error, $extended
Local $aResult, $aMatch
Local $pattern = GUICtrlRead($aControls[1])
Local $flag = GUICtrlRead($aControls[2])
Local $offset = GUICtrlRead($aControls[3])
Local $string = GUICtrlRead($aControls[4])
For $i = 0 To 4
$aError[$i] = ""
Next
If $pattern = "" Then
$aError[1] = "- kein Pattern angegeben"
$aError[0] += 1
EndIf
If $flag = "" Then
$aError[2] = "- kein Flag gewählt"
$aError[0] += 1
EndIf
If $offset = "" Or $offset <= 0 Then
$aError[3] = "- kein gültiger Offset angegeben"
$aError[0] += 1
EndIf
If $string = "" Then
$aError[4] = "- ohne String gibt's auch nichts zum durchsuchen"
$aError[0] += 1
EndIf
If $aError[0] > 0 Then
For $i = 1 To 4 Step 1
If $aError[$i] <> "" Then
$errorMessage &= $aError[$i] & @CRLF
GUICtrlSetBkColor($aControls[$i], 0xF5A9A9)
Else
GUICtrlSetBkColor($aControls[$i], Default)
EndIf
Next
GUICtrlSetData($eOutput, $outputMessage & @CRLF & $errorMessage)
Else
If $flag = 0 Then
$result = StringRegExp($string, $pattern, $flag, $offset)
$sError = _setErrorDescribtion(@error, @extended, $pattern)
If $result = 0 Then
$outputMessage &= @CRLF & "False"
ElseIf $result = 1 Then
$outputMessage &= @CRLF & "True"
EndIf
GUICtrlSetData($eOutput, $outputMessage)
_resetErrorColors()
Else
$aResult = StringRegExp($string, $pattern, $flag, $offset)
$sError = _setErrorDescribtion(@error, @extended, $pattern)
If $flag < 4 And $flag > 0 Then
For $i = 0 To UBound($aResult) - 1
$outputMessage &= @CRLF & "[" & $i & "] " & $aResult[$i]
Next
GUICtrlSetData($eOutput, $outputMessage & @CRLF & @CRLF & $sError)
ElseIf $flag = 4 Then
$sError = _setErrorDescribtion(@error, @extended, $pattern)
For $i = 0 To UBound($aResult) - 1
$aMatch = $aResult[$i]
$outputMessage &= @CRLF & "[" & $i & "]" & @CRLF
For $j = 0 To UBound($aMatch) - 1
$outputMessage &= " -> [" & $j & ']' & $aMatch[$j] & @CRLF
Next
Next
GUICtrlSetData($eOutput, $outputMessage & @CRLF & @CRLF & $sError)
_resetErrorColors()
EndIf
EndIf
EndIf
EndFunc ;==>_run
Func _setErrorDescribtion($error, $extended, $pattern)
Local $sError
If $error = 0 Then
$sError = ""
ElseIf $error = 1 Then
$sError = "@error: " & $error & " -> keine Übereinstimmung"
ElseIf $error = 2 Then
$sError = "@error: " & $error & " -> fehlerhafter Pattern" & @CRLF & "@extended: " & $extended & " -> " & StringLeft($pattern, $extended - 1) & "^ERROR"
EndIf
Return $sError
EndFunc ;==>_setErrorDescribtion
Func _resetErrorColors()
For $i = 1 To 4
GUICtrlSetBkColor($aControls[$i], Default)
Next
EndFunc ;==>_resetErrorColors
Func _showLibrary()
GUISetState(@SW_SHOW, $guiLibrary)
_listPatternLibrary()
EndFunc ;==>_showLibrary
Func _selectPattern()
Local $selected
Local $get = _GUICtrlListView_GetSelectedIndices($lPattern, True)
$selected = _GUICtrlListView_GetItemText($lPattern, $get[1], 1)
GUICtrlSetData($aControls[1], $selected)
GUISetState(@SW_HIDE, $guiLibrary)
EndFunc ;==>_selectPattern
Func _newPattern()
$guiNewPattern = GUICreate("Form1", 520, 61, -1, -1, BitOR($WS_CAPTION, $WS_GROUP), Default, $guiLibrary)
$iNewDescription = GUICtrlCreateInput("", 88, 8, 329, 21)
$Label1 = GUICtrlCreateLabel("Beschreibung:", 8, 12, 72, 17)
$iNewPattern = GUICtrlCreateInput("", 88, 32, 329, 21)
GUICtrlSetData(-1, GUICtrlRead($aControls[1]))
$Label2 = GUICtrlCreateLabel("Pattern:", 8, 36, 41, 17)
$bSaveNew = GUICtrlCreateButton("speichern", 432, 30, 75, 23)
GUICtrlSetOnEvent(-1, "_checkNewPattern")
$bAbbort = GUICtrlCreateButton("abbrechen", 432, 8, 75, 23)
GUICtrlSetOnEvent(-1, "_closeNew")
GUISetState(@SW_SHOW)
EndFunc ;==>_newPattern
Func _changePattern()
Local $getSelected = _GUICtrlListView_GetSelectedIndices($lPattern, True)
If UBound($getSelected) = 1 Then
MsgBox(64, "", "Kein Eintrag gewählt")
Else
$guiChangePattern = GUICreate("Form1", 520, 61, 254, 124, BitOR($WS_CAPTION, $WS_GROUP), Default, $guiLibrary)
$iChangeDescription = GUICtrlCreateInput("Input1", 88, 8, 329, 21)
$label3 = GUICtrlCreateLabel("Beschreibung:", 8, 12, 72, 17)
$iChangePattern = GUICtrlCreateInput("Input2", 88, 32, 329, 21)
$Label4 = GUICtrlCreateLabel("Pattern:", 8, 36, 41, 17)
$bAbbort = GUICtrlCreateButton("abbrechen", 432, 8, 75, 23)
$bSaveChange = GUICtrlCreateButton("ändern", 432, 30, 75, 23)
GUICtrlSetOnEvent(-1, "_saveChangedPattern")
GUICtrlSetOnEvent($bAbbort, "_closeChange")
GUISetState(@SW_SHOW)
GUICtrlSetData($iChangeDescription, _GUICtrlListView_GetItemText($lPattern, $getSelected[1]))
GUICtrlSetData($iChangePattern, _GUICtrlListView_GetItemText($lPattern, $getSelected[1], 1))
$temp = _GUICtrlListView_GetItemText($lPattern, $getSelected[1])
EndIf
EndFunc ;==>_changePattern
Func _checkNewPattern()
If GUICtrlRead($iNewPattern) <> "" And GUICtrlRead($iNewDescription) <> "" Then
Local $a = IniRead($ini, "library", GUICtrlRead($iNewDescription), "")
If $a <> "" Then
MsgBox(64, "", "Ein Eintrag mit dieser Beschreibung" & @CRLF & "existiert bereits")
Else
_saveNewPattern()
EndIf
Else
MsgBox(64, "", "Bitte alle Felder ausfüllen")
EndIf
EndFunc ;==>_checkNewPattern
Func _saveNewPattern()
IniWrite($ini, "library", GUICtrlRead($iNewDescription), GUICtrlRead($iNewPattern))
GUIDelete($guiNewPattern)
_listPatternLibrary()
EndFunc ;==>_saveNewPattern
Func _saveChangedPattern()
If GUICtrlRead($iChangeDescription) <> $temp Then
IniDelete($ini, "library", $temp)
EndIf
IniWrite($ini, "library", GUICtrlRead($iChangeDescription), GUICtrlRead($iChangePattern))
GUIDelete($guiChangePattern)
_listPatternLibrary()
EndFunc ;==>_saveChangedPattern
Func _deletePattern()
Local $selected
Local $get = _GUICtrlListView_GetSelectedIndices($lPattern, True)
$selected = _GUICtrlListView_GetItemText($lPattern, $get[1])
IniDelete($ini, "library", $selected)
_listPatternLibrary()
EndFunc ;==>_deletePattern
Func _listPatternLibrary()
Local $aIni
$aIni = IniReadSection($ini, "library")
If IsArray($aIni) Then
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lPattern))
_GUICtrlListView_BeginUpdate($lPattern)
For $i = 1 To $aIni[0][0]
_GUICtrlListView_AddItem($lPattern, $aIni[$i][0], 0)
_GUICtrlListView_AddSubItem($lPattern, $i - 1, $aIni[$i][1], 1)
Next
_GUICtrlListView_EndUpdate($lPattern)
EndIf
EndFunc ;==>_listPatternLibrary
Func _loadFile()
Local $file = FileOpenDialog("", @DesktopCommonDir, "Alle Dateien (*.*)", 3, "", $guiMain)
GUICtrlSetData($aControls[4], FileRead($file))
EndFunc ;==>_loadFile
Func _loadWeb()
$guiLoadWebpage = GUICreate("", 440, 40, -1, -1, BitOR($WS_CAPTION, $WS_GROUP), Default, $guiMain)
$iUrl = GUICtrlCreateInput("", 8, 9, 265, 21)
$bLoad = GUICtrlCreateButton("laden", 280, 8, 75, 23)
GUICtrlSetOnEvent(-1, "_getSourceFromWeb")
$bAbbort = GUICtrlCreateButton("abbrechen", 355, 8, 75, 23)
GUICtrlSetOnEvent(-1, "_closeWeb")
GUISetState(@SW_SHOW)
EndFunc ;==>_loadWeb
Func _getSourceFromWeb()
Local $sSource
Local $sURL = GUICtrlRead($iUrl)
If StringLeft($sURL, 7) <> "http://" Then
$sURL = "http://" & $sURL
EndIf
GUICtrlSetData($aControls[4], BinaryToString(InetRead($sURL, 1)))
GUIDelete($guiLoadWebpage)
EndFunc ;==>_getSourceFromWeb
Func _openHelp()
ShellExecute("http://translation.autoit.de/onlinehilfe/functions/StringRegExp.htm")
EndFunc ;==>_openHelp
Func _export()
Local $exportInclude = '#include <array.au3>'
Local $exportEcho
Local $exportPattern = GUICtrlRead($aControls[1])
Local $exportFlag = GUICtrlRead($aControls[2])
Local $exportOffset = GUICtrlRead($aControls[3])
Local $exportSource = GUICtrlRead($aControls[4])
Local $exportOutput = GUICtrlRead($eOutput)
Local $patternTemplate, $sourceTemplate, $sourceArray, $outputArray, $completeTemplate, $outputTemplate
$sourceArray = StringSplit($exportSource, @CRLF, 1)
For $i = 1 To $sourceArray[0]
If $i <> $sourceArray[0] Then
$sourceTemplate &= "'" & $sourceArray[$i] & "' & @crlf & _" & @CRLF
Else
$sourceTemplate &= "'" & $sourceArray[$i] & "'"
EndIf
Next
If $exportFlag = 0 Then
$exportInclude = ""
$exportEcho = 'MsgBox(64, "", $Result)'
$patternTemplate = '$Result = StringRegExp($string, "' & $exportPattern & '", ' & $exportFlag & ', ' & $exportOffset & ')'
Else
$patternTemplate = '$aResult = StringRegExp($string, "' & $exportPattern & '", ' & $exportFlag & ', ' & $exportOffset & ')'
If $exportFlag > 0 And $exportFlag < 4 Then
$exportInclude = '#include <array.au3>'
$exportEcho = '_ArrayDisplay($aResult)'
Else
$exportInclude = ''
$exportEcho = ''
EndIf
EndIf
$outputArray = StringSplit($exportOutput, @CRLF, 1)
$outputTemplate = '#cs ### Output ###' & @CRLF
For $i = 1 To $outputArray[0]
If StringInStr($outputArray[$i], "[") Or StringInStr($outputArray[$i], "True") Or StringInStr($outputArray[$i], "False") Then
$outputTemplate &= $outputArray[$i]
EndIf
Next
$outputTemplate &= @CRLF & '#ce'
ClipPut($exportInclude & @CRLF & '$string = ' & $sourceTemplate & @CRLF & @CRLF & $patternTemplate & @CRLF & $exportEcho & @CRLF & @CRLF & $outputTemplate)
EndFunc ;==>_export
Func _closeLibrary()
GUISetState(@SW_HIDE, $guiLibrary)
EndFunc ;==>_closeLibrary
Func _closeChange()
GUIDelete($guiChangePattern)
EndFunc ;==>_closeChange
Func _closeNew()
GUIDelete($guiNewPattern)
EndFunc ;==>_closeNew
Func _closeWeb()
GUIDelete($guiLoadWebpage)
EndFunc ;==>_closeWeb
Func _exit()
Exit
EndFunc ;==>_exit
"SciTE -> Options -> Open User Options File"
PS: Ich hatte zum Testen von AutoIt-Regexp mal ein standelone Tool (nicht RegexBuddy). Weiss leider den Namen nichtmehr. Wenn da also jemand eine Idee hat ...
Notepad++:
- falls noch nicht vorhanden, das Plugin NppExec über Erweiterungen->Plugin Manager installieren
- folgendes ans Ende von @UserProfileDir\AppData\Roaming\Notepad++\plugins\config\npes_saved.txt einfügen.
Datei erstellen fall's nicht vorhanden.Spoiler anzeigen
Die regexp.au3 muss kompiliert werden. Der Pfad zur regexp.exe kann natürlich angepasst werden.
Notepad++ neu starten. - über Erweiterungen->NppExec->Advanced Options in der Combobox Associated script -Regexp Tester- auswählen und mit Add/Modify hinzufügen. Notepad++ neu starten.
- Der Eintrag ist dann unter Makro zu finden.
Mehr zum Thema Notepad++ und AutoIt gibt's HIER