Java 正则表达式以获取字符串中不在$()内的部分

Java 正则表达式以获取字符串中不在$()内的部分,java,regex,Java,Regex,你能帮我为下面的字符串写一个正则表达式吗 Hi$(abc)frnd$(xyz) 在本文中,我想匹配所有没有被$()包围的单词。因此,在上面的字符串中,我想匹配Hi和frnd 我尝试了\$(.[^)]*),但它与$(abc)和$(xyz)匹配。但是我想匹配符号之外的符号在Java中可以使用负查找吗?这在C#中似乎有效(但在正则表达式中,您永远无法100%地判断!) (?尝试下面的代码,它将打印所需的输出 public static void main(String[] args) { St

你能帮我为下面的字符串写一个正则表达式吗

Hi$(abc)frnd$(xyz)

在本文中,我想匹配所有没有被
$()
包围的单词。因此,在上面的字符串中,我想匹配
Hi
frnd


我尝试了
\$(.[^)]*)
,但它与$(abc)和$(xyz)匹配。但是我想匹配符号之外的符号

在Java中可以使用负查找吗?这在C#中似乎有效(但在正则表达式中,您永远无法100%地判断!)


(?尝试下面的代码,它将打印所需的输出

public static void main(String[] args)
{
    String text = "Hi $(abc) frnd $(xyz)";
    String[] textArr = text.split("\\$\\([^)]*\\)");

    for (String word : textArr)
    {
        System.out.println(word.trim());

    }

}

您可以将字符串拆分为不包含
$(…)
的部分,也可以使用
replaceAll
函数删除
$(…)

然后您可以提取所有需要的文本。正则表达式假定
$(…)
之间的文本不允许指定
。在诸如
$(abc$(crap)\u外部
之类的情况下,更换后只剩下
\u外部


通过使用最后一个匹配边界
\G
,可以编写一个正则表达式来挑出单词并忽略
$(…)
,但如上所述更简单:在匹配文本之前删除
$(…)
部分。

我正在用java进行尝试。我尝试了\$(.[^)]*),但这与$(abc)$(xyz)匹配。但是我想要反转。@Lenymm-我不确定它是否重复。事实上不是。我认为这是正确的答案。你可以用空字符串替换\$(.+),Java支持反向查找,但不支持像C#这样的可变宽度。您的正则表达式不会用Java编译。
public static void main(String[] args)
{
    String text = "Hi $(abc) frnd $(xyz)";
    String[] textArr = text.split("\\$\\([^)]*\\)");

    for (String word : textArr)
    {
        System.out.println(word.trim());

    }

}
// Raw regex: \$\([^)]+\)

str.split("\\$\\([^)]+\\)");

str.replaceAll("\\$\\([^)]+\\)", "")