我有一个字符串形式:
{something here}{something here}{something here}
等
总之,有一些括号内的文字或任何内容(任何字符)。
我想将它拆分成一个数组(使用Java' s String.split(regex)
函数)。我使用的正则表达式是\\{.*\\}
,但它无效。
有什么想法吗?
答案 0 :(得分:1)
public static void main(String[] args) {
String input="{something here}{something here}{something here}";
String[] parts=input.substring(1,input.length()-1).split("\\}\\{");
for(String s:parts)
System.out.println(s);
}
输出:
something here
something here
something here
答案 1 :(得分:0)
在正则表达式中,*是贪婪的,这意味着它将消耗尽可能多的字符。这意味着正则表达式:\{.*\}
将匹配整个字符串,因为。*将匹配“这里的东西} {这里的东西} {这里的东西”。
放一个?在*之后会使它以非贪婪的方式运行,这意味着它只会消耗字符直到下一个表达式匹配。
因此,请尝试使用\{.*?\}
作为正则表达式
答案 2 :(得分:0)
split()方法中的参数指定了部件之间的 分隔符 ,而不是部件本身。
根据Sotirios Delimanolis的建议,您可以通过重复匹配模式来实现目标。下面的示例代码获取大括号内的文本。
String val = "{alpha}{beta}{delta\nepsilon}";
Pattern pattern = Pattern.compile( "\\{(.*?)\\}", Pattern.DOTALL);
Matcher matcher = pattern.matcher( val );
while ( matcher.find() ) {
String part = matcher.group(1);
System.out.print( String.format("%s,", part));
}
.*?
表达式提供了一个不情愿的匹配,它更喜欢匹配字符串中尽可能少的字符。如果您只使用.*
,这是一个贪婪的匹配 - 第一个匹配将是整个字符串。
您在删除的答案评论中提到,您的“此处”字符串可以包含新行。为了 '。'要匹配换行符,您需要使用Pattern.DOTALL
标志,如上所示。
致matcher.group(1)
的电话会为您提供与capturing group (.*?)
匹配的文字。如果你想要包括括号,你可以省略parantheses并简单地调用matcher.group(0)
来获得整个匹配。
答案 3 :(得分:-1)
你知道关于regexps的引用...... 好吧,它没有帮助。
然而,(通常情况下)测试的帮助是什么?正则表达式可以使用RegExp Planet
等网站在线测试因此,当用作测试字符串{a}{long}{text with spaces}
时,我可以找到以下\{([^\}]*)\}
作为“好”的正则表达式。并且,引用源网站
正则表达式{([^}] )}
作为Java字符串“\ {([^ \}] )\}”
因为不应该忘记添加双反斜杠