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



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

在文本中,这种情况可能是错误的:

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

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

%variabl%
%abcd%

我只想得到 %变量% 忽略 %variabl%e% 和其他无效匹配项。

PS:可能在同一行中出现%变量1%和%变量2%的情况,我必须同时匹配它们。

无论如何可以在不增加正则表达式复杂性的情况下做到这一点。

由于您在问题中标记了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%

更新

如果您只想要纯粹的正则表达式

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

此模式将获得相同的结果,但没有每个匹配结果的开始%

正则表达式101

并且@revo模式%[^%]+(?=%)将具有相同的结果,但没有每个匹配结果的结束%

正则表达式101

最新更新