我必须匹配用户定义的%variable%
格式的某些子字符串。
在文本中,可能会错误地出现这种情况:
abcd`%variabl%e%`abcd`%variable%`abcd
像这样的简单正则表达式%[^%]+%
匹配错误的值:
%variabl%
%abcd%
我只想获取%variable%,而忽略%variabl%e%和其他无效匹配项。
PS:同一行中可能有%variable1%和%variable2%这样的情况,我必须将它们都匹配。
总有办法做到这一点而不增加正则表达式的复杂性。
答案 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%
如果您只需要纯正则表达式
(?<=%)[^%]+%
此模式将为您提供相同的结果,但每个匹配结果中都没有开头%
。
和@revo模式%[^%]+(?=%)
将具有相同的结果,但每个匹配结果的末尾%
都不会。