java - 关于java中的正则表达式

标签 java regex

我有一个如下的字符串。

   $x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) demo program 

在上面的字符串中,左右括号的数量将根据条件而改变。

我的要求是每当我遇到最后一个右括号时就需要连接下面的字符串。

 from "stream"

所以结果如下。

$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) from "stream" demo program 

为了实现这一点,我正在尝试使用以下 java 代码。

Pattern pattern = Pattern.compile(".*?\\.Event\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");

if(line.matches(".*\\.Test(.*).*")){
    line = pattern.matcher(line).replaceAll("$0 from  \""+"stream"+"\""+" ");                 
}

但是如果左右括号的数量超过 5,上面的代码就不起作用。

需要指针来实现所需的结果,我的意思是我需要任意数量的左括号和右括号的通用解决方案。

最佳答案

为什么你想用正则表达式来做这件事?只需使用简单的 String 类方法 - String#lastIndexOfString#substring解决问题的方法:-

String str = "$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && " + 
             "( n>=2 || t<=4))) demo program";

int index = str.lastIndexOf(")");
str = str.substring(0, index + 1) + " from \"stream\"" + 
      str.substring(index + 1);

Regexp 是一种非常强大的语言,但对于这样的事情来说实际上并不需要,因为您可以确定需要在哪里分割字符串。

关于java - 关于java中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139337/

相关文章:

java - 使用hibernate读取大量数据时OutOfMemory

java - 为什么synchronized要锁另一个方法?

python - R 相当于 Python 的 re.findall

regex - 在Vim中查找和替换,重用 token

java - 具有自定义子类对象的数组适配器

java - HashMap 的键值错误

java - 使用 MAVEN 进行 Spring Boot 2.0.3 集成测试 - java.lang.NoClassDefFoundError : org springframework boot autoconfigure jdbc DataSourceBuilder

JavaScript 正则表达式异常

python - pandas.replace 与 str.replace 正则表达式冲突。代码顺序

php - 在PHP中逐列读取rpt文件内容