Regex 正则表达式模式构造以避免基于条件的选择性字符

Regex 正则表达式模式构造以避免基于条件的选择性字符,regex,regex-lookarounds,Regex,Regex Lookarounds,我已经尝试了以下方法,预计会出现o/p String valueIn = test-3-4-HH{3-4}-FF{38-99} String[] valueInSplit = valueIn.split("-"); o/p array = [test, 3, 4, HH{3, 4}, FF{38, 99}] 在正则表达式中,是否可以创建一个模式来避免“{”和“}”之间的“-”,因此预期的o/p应该是 o/p array = [test, 3, 4, HH{3-4}, FF{38-99}]

我已经尝试了以下方法,预计会出现o/p

String valueIn = test-3-4-HH{3-4}-FF{38-99}
String[] valueInSplit = valueIn.split("-");

o/p array = [test, 3, 4, HH{3, 4}, FF{38, 99}]
在正则表达式中,是否可以创建一个模式来避免“{”和“}”之间的“-”,因此预期的o/p应该是

o/p array = [test, 3, 4, HH{3-4}, FF{38-99}]

还有别的办法吗。请帮忙。

这是可能的,前提是只有一级括号
{}
,括号正确打开和关闭。将此正则表达式与
split
函数一起使用:

-(?![^{}]*})
作为字符串文字:

"-(?![^{}]*})"

正则表达式检查
-
当前是否不在括号内,方法是检查是否可以从字符串的当前位置找到一个结束括号
}
,因为中间的字符没有开始括号
{
或结束括号
}

您可以在分割中使用负前瞻来实现这一点。基本上,您可以检查分隔符
-
后面是否有数字和闭合括号

以下是我的结论:

-(?!\d+\})