#!/usr/bin/python # GNU General Public License (GPL) import cgi, sys, re, time import cgitb; cgitb.enable() logfile=open("webrepy.log", 'a+') print "Content-Type: text/html" # HTML is following print # blank line, end of headers header = """ Python Regular Expression Tester """ end = """ """ print header def getinput(input, regex): print "
" print "
" print "

Some input:
" print "
" print "The regular expression (regex): Syntax Reference
" print "

" print "

" def checkinput(title): input = "" regex = "" form = cgi.FieldStorage() if not (form.has_key("input") and form.has_key("regex")): print "

Please fill in the input and the regex fields.

" else: input = form["input"].value regex = form["regex"].value return input, regex input, regex = checkinput("Input") #getinput(input, regex) def highlight(string, start, end): print #print "

string: " + string + "

" #print "

start: " + `start` + "

" #print "

end: " + `end` + "

" print #print "

" print cgi.escape(string[:start]) + "" + cgi.escape(string[start:end]) + "" + cgi.escape(string[end:]) #print "

" def resplit(input, regex): s = regex.split(input) if s: print "

Split result(s):

"
		print s
		print "
" else: print "

No split results

" def refindall(input, regex): s = regex.findall(input) if s: print "

Findall result(s):

"
		print s
		print "
" else: print "

No findall results

" def refinditer(input, regex): s = regex.finditer(input) if s: print "

Finditer result(s):

"
		for i in s:
			# print i # Things like <_sre.SRE_Match object at 0x81b9558> invalidates my html!
			print "group(): ",
			print i.group()
			print "groups(): ",
			print i.groups()
			highlight(input, i.start(), i.end())
		print "
" else: print "

No finditer results

" def resub(input, repl, regex): s = regex.sub(repl, input) if s: print "

Substitution(repl = 'foo') result(s):

"
		#print "s.group(): ",
		#print s.group()
		#print "s.groups(): ",
		#print s.groups()
		#print "s.start(), s.end(): ",
		#print s.start(), s.end()
		#highlight(input, s.start(), s.end())
		print s
		print "
" else: print "

No substitution results

" def resubn(input, repl, regex): s = regex.subn(repl, input) if s: print "

Subn(repl = 'foo') result(s):

"
		#print "s.group(): ",
		#print s.group()
		#print "s.groups(): ",
		#print s.groups()
		#print "s.start(), s.end(): ",
		#print s.start(), s.end()
		#highlight(input, s.start(), s.end())
		print s
		print "
" else: print "

No subn results

" def research(input, regex): s = regex.search(input) if s: print "

Search result(s):

"
		print "s.group(): ",
		print s.group()
		print "s.groups(): ",
		print s.groups()
		print "s.start(), s.end(): ",
		print s.start(), s.end()
		highlight(input, s.start(), s.end())
		print "
" else: print "

No search results

" def rematch(input, regex): m = regex.match(input) if m: print "

Match result(s):

"
		print "m.group(): ",
		print m.group()
		print "m.groups(): ",
		print m.groups()
		print "m.start(), m.end(): ",
		print m.start(), m.end()
		highlight(input, m.start(), m.end())
		print "
" else: print "

No match results

" if input and regex: try: p = re.compile(regex) good = 1 except re.error, e: print "

Invalid regular expression: " + str(e) + "

" good = 0 if good: rematch(input, p) research(input, p) resplit(input, p) resub(input, 'FOO', p) resubn(input, 'FOO', p) refindall(input, p) refinditer(input, p) logfile.write("[" + time.strftime("%Y-%m-%dT%H:%M:%S+0000", time.gmtime()) + "] " + cgi.os.environ['REQUEST_METHOD'] + " from " + cgi.os.environ['REMOTE_ADDR']) logfile.write(" I:[" + repr(input) + "] R:[" + regex + "]\n") logfile.flush() print """

More relevant regex links

The source code | Python re docs | Python re howto |

""" print "

Python version

%s

" % sys.version print "

Previous 10 attempts

" print "
"
logfile.seek(0)
lastten = logfile.readlines()[-10:]
for i in lastten:
	print cgi.escape(i),

#unique = dict([(x,None) for x in lastten]).keys() # Get unique values from log
#for i in unique:
#	print i,
#logfile.truncate(1024)	# We don't want this bigger than a meg
logfile.close()
print "
" #print "

Cgi test (xhtml uncompliant) splab

" #cgi.test() print end