我正在尝试在两个%字符之间获取内容而不包含空格。
这就是我到目前为止得到的:(?<=\%)(.*?)(?=\%)
现在我想我需要在某个地方使用\S
。我仍然不知道如何使用它。
总是有两种情况:
一个字符串看起来像这样:
占位符称为%Test%!现在,您可以将其与实际占位符一起使用。但是,如果我使用更多的%Test2%占位符,它将不再起作用:/。 %Test3%很烂的原因!
答案 0 :(得分:1)
如果我正确理解了您的问题,那么%(\w+)%
就会为您解决
String str = "The placeholder is called %Test%! Now you can use it with real placeholders. But if I use more %Test2% placeholders, it won't work anymore :/. %Test3% sucks cause of that!";
String regex = "%(\\w+)%";//or %([^\s]+)% to fetch more special characters
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
输出:
Test
Test2
Test3
答案 1 :(得分:0)
您可以使用
(?<=%)[^%\s]+(?=%)
请参见regex demo。或者,如果您更喜欢捕获:
%([^%\s]+)%
请参见another demo。
[^%\s]+
部分匹配一个或多个既不是%
也不是空格的字符。
请参见Java demo:
String line = "The placeholder is called %Test%! Now you can use it with real placeholders. But if I use more %Test2% placeholders, it won't work anymore :/. %Test3% sucks cause of that!";
Pattern p = Pattern.compile("%([^%\\s]+)%");
Matcher m = p.matcher(line);
List<String> res = new ArrayList<>();
while(m.find()) {
res.add(m.group(1));
}
System.out.println(res); // => [Test, Test2, Test3]