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

时间:2013-01-03 11:56:30

标签: java regex

你可以帮我写一下下面字符串的正则表达式,

Hi $(abc) frnd $(xyz)

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

我尝试使用\$((.[^)]*.)),但它匹配$(abc)和$(xyz)。但我想匹配符号之外的那些

3 个答案:

答案 0 :(得分:1)

你能在Java中使用负面的lookbehind吗?这似乎适用于C#(但你永远无法告诉100%的正则表达式!)

(?<!\$\([A-Za-z]*)[A-Za-z]+(?!\))

答案 1 :(得分:1)

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

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

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

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

然后您可以提取所需的文本。正则表达式假定$(...)之间的文本不允许指定)。在$(abc$(crap)_outside之类的情况下,替换后只会留下_outside

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

答案 2 :(得分:0)

尝试以下代码它将打印所需的输出。

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());

    }

}