如何在括号内的括号中获取带有Java正则表达式的字符串
如何在括号内获得字符串。请参阅下面的代码如何在括号内的括号中获取带有Java正则表达式的字符串,java,regex,Java,Regex,如何在括号内获得字符串。请参阅下面的代码 String str = "C1<C2, C3<T1>>.C4<T2>.C5" 但结果是 C1<C2, C3<T1> C1我发现您的代码有两个问题: 看起来您只是打印了第一个匹配项,而不是 循环浏览结果。使用while(mat.find())进行迭代 通过匹配列表 将模式简化为\\w+(]++>+)?以获得C1、C4和C5 正则表达式模式解释: w+=1个或多个字母数字或下划线字符 ()?=括号
String str = "C1<C2, C3<T1>>.C4<T2>.C5"
但结果是
C1<C2, C3<T1>
C1我发现您的代码有两个问题:
看起来您只是打印了第一个匹配项,而不是
循环浏览结果。使用while(mat.find())
进行迭代
通过匹配列表
将模式简化为\\w+(]++>+)?
以获得C1
、C4
和C5
正则表达式模式解释:
w+
=1个或多个字母数字或下划线字符
()?
=括号中的0或1
字符
+
=1个或多个
字符(如果您只想强制执行一个或两个
字符,则另一种选择是{1,2}
)
生成的代码应如下所示:
public static void main(String[] args)
{
String str = "C1<C2, C3<T1>>.C4<T2>.C5";
Pattern pat = Pattern.compile("\\w+(<[^>]+>+)?");
Matcher mat = pat.matcher(str);
while(mat.find()) {
System.out.println(mat.group());
}
}
String[] parts = str.split("\\.");
只是在点上分开:
String[] parts = str.split("\\.");
使用问题中的示例输入,这就是您想要的。我认为如果您将嵌套括号的数量限制在某个固定的数量,例如四个嵌套级别,这是可能的。通常会使用解析器来实现这一点。在我看来,您只是想在
上进行拆分。我错过了什么吗?@markspace是对的。如果你不限制可能的括号嵌套,这就不能用正则表达式来表达。哈哈,我完全同意@shmosel,围绕句点进行拆分,你很乐意这样做go@shmosel实际上,我首先在“.”上拆分了str,然后我想如何在它上拆分正则表达式。谢谢大家!!!我想你的意思是str.split(\\)代码>@ScaryWombat我想我也是这个意思:)谢谢。更新了我的答案。@TotZam非常感谢!!我喜欢这个。我不能使用split,因为这个cas是“C1.C4.C5”,所以我最后使用了Stack
。如果你不介意的话,我可以问个问题吗?什么是(+?)?(.+)与(.+?)有什么不同?@KimKevin尝试在上测试您的表达式。该站点允许您将鼠标悬停在表达式的每个部分上,它非常好地解释了它的含义。简而言之,(.+)
匹配任何字符1次或多次。使用(.+?)?
,第一个?
使前面的量词变懒,使其匹配尽可能少的字符,第二个?
匹配括号中的整个表达式0或1次。这实际上是一个单独的问题,因此如果您想要更详细的解释或有其他问题,请提出一个单独的新问题,我可以尝试帮助您。@Kimkvin您也可以查看不同正则表达式符号的更多解释,特别是关于的部分。
String[] parts = str.split("\\.");