gpt4 book ai didi

java - 匹配 conditional variable names? 的正则表达式模式

转载 作者:行者123 更新时间:2023-11-29 09:06:20 24 4
gpt4 key购买 nike

我需要获取特定 jsp 中所有情况的条件变量名称我正在逐行阅读 jsp 并搜索特定模式,例如一行说它检查两种类型的 cond 以找到匹配项

       <c:if condition="Event ='Confirmation'">
<c:if condition="Event1 = 'Confirmation' or Event2 = 'Action'or Event3 = 'Check'" .....>

Desired Result 是所有条件变量的名称 - Event,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++;

}
}

最佳答案

如果我很好地理解了您的要求,这可能会奏效:

("|\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+) "or 后跟一个或多个空格或 and 后跟一个或多个空格。(这里假设每个表达式部分或变量名称前面是"or 后跟一个或多个空格或 and 后跟一个或多个空格)

!?(\w+?)一个可选的 ! 后跟一个或多个单词字符

(\[\d+\]|\..*?)?可选部分,由方括号中的数字后跟零个或多个字符的点组成

(!?=|>=?|<=?)以下任何关系运算符:=,!=,>,<,>=,<=

$2将给出变量名称。

这里的第二个捕获组是 (\w+?)检索变量名称和第三个捕获组检索任何后缀(如果存在)(例如:[2] in Event[2])。

对于包含条件 Event.indexOf(2)=something 的输入, $2给出 Event仅有的。如果你希望它是 Event.indexOf(2)使用 $2$3 .

关于java - 匹配 <c :if > conditional variable names? 的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853330/

24 4 0