java - ReGex patten to match <c:if > conditional variable names? -
i need conditional variable name cases in particular jsp reading jsp line line , searching particular pattern line checking 2 type of cond finds match
<c:if condition="event ='confirmation'"> <c:if condition="event1 = 'confirmation' or event2 = 'action'or event3 = 'check'" .....>
desired result name of cond variable - event,event1,event2,event3 have written parser satisfying first case not able find variable names sec case.need pattern satisfy both of them.
string stringsearch = "<c:if"; while ((line = bf.readline()) != null) { // increment count , find index of word linecount++; int indexfound = line.indexof(stringsearch); if (indexfound > -1) { pattern pattern = pattern .compile(test=\"([\\!\\(]*)(.*?)([\\=\\)\\s\\.\\>\\[\\(]+?)); matcher matcher = pattern.matcher(line); if (matcher.find()) { str = matcher.group(1); hset.add(str); counter++; } }
if understood requirement well, may work :
("|\s+)!?(\w+?)\s*=\s*'.*?'
$2
give each status variable name.
what is:
("|\s+)
" or one or more spaces
!?
optional !
(\w+?)
1 or more word character (letter, digit or underscore) (([a-za-z]\w*)
more correct)
\s*=\s*
= preceded , followed 0 or more spaces
'.*?'
0 or more characters within ' , '
second capture grouping (\w+?) retrieving variable name
add required escaping \
edit: additional conditions specified, next may suffice:
("|or\s+|and\s+)!?(\w+?)(\[\d+\]|\..*?)?\s*(!?=|>=?|<=?)\s*.*?
("|or\s+|and\s+)
" or or followed 1 or more spaces or and followed 1 or more spaces. (here, assumed each look part or variable name preceded " or or followed 1 or more spaces or and followed 1 or more spaces)
!?(\w+?)
optional ! followed 1 or more word character
(\[\d+\]|\..*?)?
optional part constituting a number enclosed in square brackets or a dot followed 0 or more characters
(!?=|>=?|<=?)
of next relational operators : =,!=,>,<,>=,<=
$2
give variable name.
here sec capture grouping (\w+?)
retrieving variable name , 3rd capture grouping retrieves suffix if nowadays (eg:[2]
in event[2]
).
for input containing status event.indexof(2)=something
, $2
gives event
only. if want event.indexof(2)
utilize $2$3
.
java regex jsp
No comments:
Post a Comment