java - 新行的正则表达式匹配

标签 java regex regex-group

我正在尝试使用 java 获取代码中的日志语句。我正在使用这个正则表达式:

Log\.[dD].*\);

测试数据:

Log.d(TAG, "Construct product info");

test test test test 

Log.d(TAG, "Loading Product Id: %d, Version: %s",
    productInfo.getProductId(),
    productInfo.getProductVersion());

test test test test 

Log.d(TAG, "Loading Product Id: " +
    ProductId + "Version:" +
    Version);

test test test test

由于某种原因,正则表达式只选取第一行,即

Log.d(TAG, "Construct product info");

正确的输出应该是:

Log.d(TAG, "Construct product info");

Log.d(TAG, "Loading Product Id: %d, Version: %s",
    productInfo.getProductId(),
    productInfo.getProductVersion());

Log.d(TAG, "Loading Product Id: " +
    ProductId + "Version:" +
    Version);

https://regex101.com/r/OCl9dy/3

如果我没记错的话,正则表达式应该返回所有以 ); 结尾的 Log.[dD] 语句

请告诉我为什么它不接收其他内容以及如何解决此问题。

谢谢

最佳答案

这个正则表达式应该有效:

Log\.[dD][\s\S]*?\);

您犯的两个错误是:

  • . 与行结尾不匹配。您应该使用类似于 [\s\S] 的内容,它可以匹配所有内容。
  • 您需要惰性匹配,在您看到的第一个)处停止匹配。所以写*?而不是*

请注意,正则表达式不适用于 Log.d(TAG, "Construct (product); info"); 因为第一个 ); 是不是方法调用的结束。为了匹配这些,我建议您编写/使用解析器。

Demo

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

相关文章:

regex-group - 带有占位符的正则表达式

java - Spring - 使用 applicationContext.xml 和 XXXXX-servlet.xml

ruby-on-rails - 名称的正则表达式

javascript - 使用 Javascript 在客户端计算机上进行基于全文的搜索

regex - 如何找到双字母并用三字母替换它们?

python - 正则表达式匹配一组或两组或两者

java - Android Studio : Using radioButtons for a quiz

java - getView 不返回 View 参数

java - 启动 tomcat 时出错 - 未指定显示

正则表达式在第二次破折号后删除所有内容