我必须匹配用户定义的这种格式%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