正则表达式在字符串行中多次出现

时间:2018-07-04 19:53:30

标签: regex substring

我必须匹配用户定义的%variable%格式的某些子字符串。

在文本中,可能会错误地出现这种情况:

abcd`%variabl%e%`abcd`%variable%`abcd

像这样的简单正则表达式%[^%]+%匹配错误的值:

%variabl%
%abcd%

我只想获取%variable%,而忽略%variabl%e%和其他无效匹配项。

PS:同一行中可能有%variable1%和%variable2%这样的情况,我必须将它们都匹配。

总有办法做到这一点而不增加正则表达式的复杂性。

1 个答案:

答案 0 :(得分:0)

由于您在问题中标记了substring,因此这是使用indexOf()substring()的非正则表达式方法

public class MyClass {
    public static void main(String args[]) {
        String data = "abcd%variabl%e%abcd%variable%abcd";

        int firstIndex = data.indexOf("%");
        int nextIndex = data.indexOf("%", firstIndex + 1);

        while (nextIndex > -1) {
            System.out.println(data.substring(firstIndex, nextIndex + 1));
            firstIndex = nextIndex;
            nextIndex = data.indexOf("%", firstIndex + 1);
        }
    }
}

结果:

%variabl%
%e%
%abcd%
%variable%

更新

如果您只需要纯正则表达式

(?<=%)[^%]+%

此模式将为您提供相同的结果,但每个匹配结果中都没有开头%

Regex101

和@revo模式%[^%]+(?=%)将具有相同的结果,但每个匹配结果的末尾%都不会。

Regex101