Regular Expression Test Panel
ikonen
The conversion is primitive and only looks for doubled slashes ("\\") in the Igor version and single slashes in the interpreted version (I looked for a built in operation functions that could do this conversion, like when one enters text for an annotation and Igor builds a command with proper escape coding, but I couldn't find anything), but that should suffice for normal use. Apparently you can use the actual tab character in a regular expression to look for a tab character in a string, but I think the standard method is to use \t (which has to be entered as \\t in an Igor string literal in order to become \t in a PCRE in order to look for a tab character. As far as I know, it's only the need to double up slashes in Igor code string literals that causes the difference. Confusing? No doubt. That's why I wrote this snippet. It's also well explained in the Regular Expressions section of Programming.ihf
Note also that SetVariable controls don't convert escape strings: Entering \t in the PCRE field really does result in the slash and t characters being sent to the regular expression engine, not a tab character.
#pragma rtGlobals=1 // Use modern global access method.
Window Regexp_Panel() : Panel
PauseUpdate; Silent 1 // building window...
NewPanel /W=(50,66,634,411) as "Regular Expression Tester"
SetVariable setvar_teststring,pos={1,2},size={447,16},proc=SetVarProc_RegexpTester,title="Test String"
SetVariable setvar_teststring,value= _STR:"Thursday, May 7, 2009"
SetVariable setvar_PCREpattern,pos={3,28},size={444,16},proc=SetVarProc_RegexpTester,title="PCRE pattern"
SetVariable setvar_PCREpattern,value= _STR:"([[:alpha:]]+), ([[:alpha:]]+) ([[:digit:]]+), ([[:digit:]]+)"
SetVariable setvar_sub0,pos={17,81},size={209,16},title="sub0"
SetVariable setvar_sub0,value= _STR:"Thursday",noedit= 1
SetVariable setvar_sub1,pos={19,103},size={208,16},title="sub1"
SetVariable setvar_sub1,value= _STR:"May",noedit= 1
SetVariable setvar_sub2,pos={20,125},size={198,16},title="sub2"
SetVariable setvar_sub2,value= _STR:"7",noedit= 1
SetVariable setvar_sub3,pos={21,150},size={191,16},title="sub3"
SetVariable setvar_sub3,value= _STR:"2009",noedit= 1
SetVariable setvar_sub4,pos={20,172},size={192,16},title="sub4"
SetVariable setvar_sub4,value= _STR:"",noedit= 1
SetVariable setvar_sub5,pos={22,196},size={190,16},title="sub5"
SetVariable setvar_sub5,value= _STR:"",noedit= 1
SetVariable setvar_S_value,pos={11,226},size={406,16},title="S_Value"
SetVariable setvar_S_value,value= _STR:"Thursday, May 7, 2009",noedit= 1
SetVariable setvar_V_Flag,pos={17,255},size={88,16},title="V_Flag"
SetVariable setvar_V_Flag,value= _NUM:4,noedit= 1
CheckBox check_error,pos={11,284},size={134,14},title="Regular Expression Error"
CheckBox check_error,value= 0,side= 1
SetVariable setvar_IgorCodePattern,pos={5,51},size={441,16},proc=SetVarProc_RegexpTester,title="Igor /E pattern"
SetVariable setvar_IgorCodePattern,value= _STR:"([[:alpha:]]+), ([[:alpha:]]+) ([[:digit:]]+), ([[:digit:]]+)"
EndMacro
Function UpdateREPanel(panelname)
string panelname
ControlInfo /W=$panelname setvar_teststring
string teststring = S_Value
ControlInfo /W=$panelname setvar_PCREpattern
string regexp = S_Value
string sub0, sub1, sub2, sub3, sub4, sub5
try
SplitString /E=regexp teststring, sub0, sub1, sub2, sub3, sub4, sub5 ; AbortOnRTE
CheckBox check_error win=$panelName, value = 0
catch
CheckBox check_error win=$panelName, value = 1
endtry
SetVariable setvar_sub0 win=$panelName, value = _STR:(sub0)
SetVariable setvar_sub1 win=$panelName, value = _STR:(sub1)
SetVariable setvar_sub2 win=$panelName, value = _STR:(sub2)
SetVariable setvar_sub3 win=$panelName, value = _STR:(sub3)
SetVariable setvar_sub4 win=$panelName, value = _STR:(sub4)
SetVariable setvar_sub5 win=$panelName, value = _STR:(sub5)
SetVariable setvar_S_Value win=$panelName, value = _STR:(S_Value)
SetVariable setvar_V_Flag win=$panelName, value = _NUM:(V_Flag)
End
Function SetVarProc_RegexpTester(sva) : SetVariableControl
STRUCT WMSetVariableAction &sva
switch( sva.eventCode )
case 1: // mouse up
case 2: // Enter key
case 3: // Live update
strswitch(sva.ctrlName)
case "setvar_PCREpattern":
SetVariable setvar_IgorCodePattern win=$sva.win, value = _STR:(ReverseProcessIgorString(sva.sval))
break
case "setvar_IgorCodePattern":
SetVariable setvar_PCREpattern win=$sva.win, value = _STR:(ProcessIgorString(sva.sval))
break
case "setvar_teststring":
// print sva.sval
break
EndSwitch
UpdateREPanel(sva.win)
break
case -1: // control being killed
break
endswitch
return 0
End
Function /S ReverseProcessIgorString(stringin)
string stringin
string stringout = ReplaceString("\\",stringin,"\\\\")
return stringout
End
Function /S ProcessIgorString(stringin)
string stringin
string stringout = ReplaceString("\\\\",stringin,"\\")
return stringout
End
Window Regexp_Panel() : Panel
PauseUpdate; Silent 1 // building window...
NewPanel /W=(50,66,634,411) as "Regular Expression Tester"
SetVariable setvar_teststring,pos={1,2},size={447,16},proc=SetVarProc_RegexpTester,title="Test String"
SetVariable setvar_teststring,value= _STR:"Thursday, May 7, 2009"
SetVariable setvar_PCREpattern,pos={3,28},size={444,16},proc=SetVarProc_RegexpTester,title="PCRE pattern"
SetVariable setvar_PCREpattern,value= _STR:"([[:alpha:]]+), ([[:alpha:]]+) ([[:digit:]]+), ([[:digit:]]+)"
SetVariable setvar_sub0,pos={17,81},size={209,16},title="sub0"
SetVariable setvar_sub0,value= _STR:"Thursday",noedit= 1
SetVariable setvar_sub1,pos={19,103},size={208,16},title="sub1"
SetVariable setvar_sub1,value= _STR:"May",noedit= 1
SetVariable setvar_sub2,pos={20,125},size={198,16},title="sub2"
SetVariable setvar_sub2,value= _STR:"7",noedit= 1
SetVariable setvar_sub3,pos={21,150},size={191,16},title="sub3"
SetVariable setvar_sub3,value= _STR:"2009",noedit= 1
SetVariable setvar_sub4,pos={20,172},size={192,16},title="sub4"
SetVariable setvar_sub4,value= _STR:"",noedit= 1
SetVariable setvar_sub5,pos={22,196},size={190,16},title="sub5"
SetVariable setvar_sub5,value= _STR:"",noedit= 1
SetVariable setvar_S_value,pos={11,226},size={406,16},title="S_Value"
SetVariable setvar_S_value,value= _STR:"Thursday, May 7, 2009",noedit= 1
SetVariable setvar_V_Flag,pos={17,255},size={88,16},title="V_Flag"
SetVariable setvar_V_Flag,value= _NUM:4,noedit= 1
CheckBox check_error,pos={11,284},size={134,14},title="Regular Expression Error"
CheckBox check_error,value= 0,side= 1
SetVariable setvar_IgorCodePattern,pos={5,51},size={441,16},proc=SetVarProc_RegexpTester,title="Igor /E pattern"
SetVariable setvar_IgorCodePattern,value= _STR:"([[:alpha:]]+), ([[:alpha:]]+) ([[:digit:]]+), ([[:digit:]]+)"
EndMacro
Function UpdateREPanel(panelname)
string panelname
ControlInfo /W=$panelname setvar_teststring
string teststring = S_Value
ControlInfo /W=$panelname setvar_PCREpattern
string regexp = S_Value
string sub0, sub1, sub2, sub3, sub4, sub5
try
SplitString /E=regexp teststring, sub0, sub1, sub2, sub3, sub4, sub5 ; AbortOnRTE
CheckBox check_error win=$panelName, value = 0
catch
CheckBox check_error win=$panelName, value = 1
endtry
SetVariable setvar_sub0 win=$panelName, value = _STR:(sub0)
SetVariable setvar_sub1 win=$panelName, value = _STR:(sub1)
SetVariable setvar_sub2 win=$panelName, value = _STR:(sub2)
SetVariable setvar_sub3 win=$panelName, value = _STR:(sub3)
SetVariable setvar_sub4 win=$panelName, value = _STR:(sub4)
SetVariable setvar_sub5 win=$panelName, value = _STR:(sub5)
SetVariable setvar_S_Value win=$panelName, value = _STR:(S_Value)
SetVariable setvar_V_Flag win=$panelName, value = _NUM:(V_Flag)
End
Function SetVarProc_RegexpTester(sva) : SetVariableControl
STRUCT WMSetVariableAction &sva
switch( sva.eventCode )
case 1: // mouse up
case 2: // Enter key
case 3: // Live update
strswitch(sva.ctrlName)
case "setvar_PCREpattern":
SetVariable setvar_IgorCodePattern win=$sva.win, value = _STR:(ReverseProcessIgorString(sva.sval))
break
case "setvar_IgorCodePattern":
SetVariable setvar_PCREpattern win=$sva.win, value = _STR:(ProcessIgorString(sva.sval))
break
case "setvar_teststring":
// print sva.sval
break
EndSwitch
UpdateREPanel(sva.win)
break
case -1: // control being killed
break
endswitch
return 0
End
Function /S ReverseProcessIgorString(stringin)
string stringin
string stringout = ReplaceString("\\",stringin,"\\\\")
return stringout
End
Function /S ProcessIgorString(stringin)
string stringin
string stringout = ReplaceString("\\\\",stringin,"\\")
return stringout
End
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More