我需要获取特定jsp中所有情况的条件变量名称 我正在逐行读取jsp并搜索特定模式,比如一行说它检查两种类型的cond,它找到匹配
<c:if condition="Event ='Confirmation'">
<c:if condition="Event1 = 'Confirmation' or Event2 = 'Action'or Event3 = 'Check'" .....>
所需结果是所有cond变量的名称 - 事件,Event1,Event2,Event3 我编写的解析器只满足第一种情况但无法找到变量第二种情况的名称。需要一种模式来满足它们。
String stringSearch = "<c:if";
while ((line = bf.readLine()) != null) {
// Increment the count and find the index of the 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++;
}
}
答案 0 :(得分:0)
如果我理解你的要求,这可能有效:
("|\s+)!?(\w+?)\s*=\s*'.*?'
$2
将为每个条件赋予变量名称。
它的作用是:
("|\s+)
“或一个或多个空格
!?
可选!
(\w+?)
一个或多个单词字符(字母,数字或下划线)(([A-Za-z]\w*)
会更正确)
\s*=\s*
= 前后加零或多个空格
'.*?'
'和'
第二个捕获组是(\ w +?)检索变量名称
为\
编辑:对于您指定的其他条件,以下内容可能就足够了:
("|or\s+|and\s+)!?(\w+?)(\[\d+\]|\..*?)?\s*(!?=|>=?|<=?)\s*.*?
("|or\s+|and\s+)
“或或后跟一个或多个空格或和后跟一个或多个空格。 (这里,假设每个表达式部分或变量名称前面都有“或或后跟一个或多个空格或和后跟一个或多个空格)
!?(\w+?)
可选的!后跟一个或多个单词字符
(\[\d+\]|\..*?)?
一个可选部分构成用方括号括起来的数字或一个点后跟零个或多个字符
(!?=|>=?|<=?)
以下任何关系运算符:=,!=,&gt;,&lt;,&gt; =,&lt; =
$2
将提供变量名称。
此处第二个捕获组是(\w+?)
检索变量名称,第三个捕获组检索任何后缀(如果存在)(例如:[2]
中的Event[2]
)。
对于包含条件Event.indexOf(2)=something
的输入,$2
仅提供Event
。如果您希望Event.indexOf(2)
使用$2$3
。
答案 1 :(得分:0)
这可能符合您的需求:
"(\\w+)\\s*=\\s*(?!\")"
这意味着:
Every word followed by a = that isn't followed by a "
例如:
String s = "<c:if condition=\"Event ='Confirmation'\"><c:if condition=\"Event1 = 'Confirmation' or Event2 = 'Action'or Event3 = 'Check'\" .....>";
Pattern p = Pattern.compile("(\\w+)\\s*=\\s*(?!\")");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
打印:
Event
Event1
Event2
Event3