如何编写正则匹配表达式-JAVA
我想编写匹配的表达式来读取大字符串中括号()之间的字符串。大字符串是:-如何编写正则匹配表达式-JAVA,java,pattern-matching,Java,Pattern Matching,我想编写匹配的表达式来读取大字符串中括号()之间的字符串。大字符串是:- (something), (something2), (something3) 我如何编写匹配表达式来读取组中的某些内容、某些内容2、某些内容3。您不能一次读取所有这些组,但可以使用Matcher\35; find()和以下表达式:\([^\(\)]*)(读取:匹配必须以开头)(,必须包含任何数量的非字符(或)-这些字符构成您的组-,并且必须以结尾)) 请注意,括号中的转义不是必需的,而是为了一致性而进行的,因为它们需要
(something), (something2), (something3)
我如何编写匹配表达式来读取组中的某些内容、某些内容2、某些内容3。您不能一次读取所有这些组,但可以使用
Matcher\35; find()
和以下表达式:\([^\(\)]*)
(读取:匹配必须以开头)(
,必须包含任何数量的非字符(
或)
-这些字符构成您的组-,并且必须以结尾)
)
请注意,括号中的转义不是必需的,而是为了一致性而进行的,因为它们需要在外部
Pattern p = Pattern.compile("\\(([^\\(\\)]*)\\)");
Matcher m = p.matcher( "(something), (something2), (something3)" );
while(m.find())
{
System.out.println(m.group( 1 ));
}
这张照片是:
something
something2
something3
以下程序将获得所需的输出
public class RegexTestStrings {
public static final String EXAMPLE_TEST = "(something),(something2),(something3)";
public static void main(String[] args) {
String[] splitString = (EXAMPLE_TEST.split("\\("));
System.out.println(splitString.length);
for (String string : splitString) {
System.out.println(string.replace(")",""));
}
}
}
首先,它将从(
开始,然后替换)
到”
,这样您将得到以下输出:
something,
something2,
something3
您可以使用一行将所有Something读入一个数组:
String[] somethings = input.replaceAll("(^.?*\\(|\\)[^\\(]*$)", "").split("\\).*?\\(");
下面是一些测试代码:
public static void main(String... args) throws InterruptedException {
String input = "foo (something1) (something2), blah (something3) bar";
String[] somethings = input.replaceAll("(^[^\\(]*\\(|\\)[^\\(]*$)", "").split("\\).*?\\(");
System.out.println(Arrays.toString(somethings));
}
输出:
[something1, something2, something3]
somethings
可以包含括号吗?不,它不包含大括号。@也许你应该看看我的答案-它只在一行代码中将somethings读入字符串[],返回(something1)\n(something2)\n(something3)
(`\n`用于显示目的).@精英绅士-我不太明白你的评论。正则表达式不会返回括号,只返回中间的组。@Thomas,当我使用group()
时,你指定了一个group(1)
,它返回了你在我的帖子上看到的结果。它实际上解决了我的正则表达式问题。:-)@托马斯-是的,你可以在一行中阅读所有内容!看看我的答案。