除了正则表达式之外的一切

时间:2015-01-14 20:25:35

标签: java regex

我正在做一个小项目,我必须用命令读取行。 命令是与模式"\\&[abcd]"匹配的字符串 如果前一个匹配和下一个匹配之间有字符串,我必须根据上一个命令对它进行操作。我使用while (m.find())进行循环,我可以得到与模式匹配的字符串(即命令),但我不确定如何获得与模式不匹配的字符串。用""替换命令并获取整个字符串将是一种方式,但后来我无法对特定的子字符串进行操作。
那么如何根据上一个命令对命令之间的字符串进行操作呢?

代码我在撰写时遇到了问题:

int i=0;
while (m.find()) {
        switch (m.group()) {
        case "&a":
            i+=1;
            break;
        case "&b":
            i+=2;
            break;
        case "&c":
            i=4;
            break;
        ...
        }
    //get non-pattern matching strings and modify it based on previous commands.
}

输入后:$a$bLola$cg

会产生以下输出:LolaLolaLolagggg

编辑:

未设置命令或字符串的数量,可以按任何顺序排列。如果没有字符串,则不会打印任何内容。如果没有命令,将打印字符串而不进行修改 重复答案似乎不适用于此:正则表达式仅捕获字符串(而非命令)不起作用,因为在第一个while(m.find())循环之后{{1}会彻底改变。

输入后:i会输出$a$bLola$cg

1 个答案:

答案 0 :(得分:-1)

这种方法的工作方式是在单个匹配中捕获命令字符串 只要有一个命令,就会解析整个输入 然后每个匹配将给出命令和字符串(分别为组1和2)。

每当你捕获一个字符串时,根据命令和
执行对它的操作 将其附加到新字符串。

这是字符串之前的命令:

 # "(?s)(&[abcd])((?:(?!&[abcd]).)+)?"

 (?s)                          # Dot-all modifier, dot matches any character
 ( & [abcd] )                  # (1), Command, required

 (                             # (2 start), String
      (?:                           # Cluster start
           (?! & [abcd] )                # Lookahead assertion, not a command ahead
           .                             # Assertion passed, grab this character
      )+                            # Cluster end, do 1 to many times
 )?                             # (2 end), optional

这是字符串后面的命令:
随便挑选。

 # "(?s)((?:(?!&[abcd]).)+)?(&[abcd])"

 (?s)                          # Dot-all modifier, dot matches any character
 (                             # (1 start), String
      (?:                           # Cluster start
           (?! & [abcd] )                # Lookahead assertion, not a command ahead
           .                             # Assertion passed, grab this character
      )+                            # Cluster end, do 1 to many times
 )?                            # (1 end), Optional
 ( & [abcd] )                  # (2), Command, Required