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("\\$\\([^)]+\\)", "")