java - 设置Java中的RegEx默认为非贪婪

标签 java regex string

我有如下字符串:

"parameter: param0=true, param1=401230 param2=asset client: desktop"
"parameter: param0=false, param1=15230 user: user213 client: desktop"
"parameter: param0=false, param1=51235 param2=asset result: ERROR"

模式是parameter:,然后是param,在params之后是client:和/或user : 和/或 result

我想匹配 parameter: 和第一次出现的 client:user:result 之间的内容:

因此对于第二个字符串,它应该匹配 param0=false, param1=15230

我的正则表达式是:

parameter:\s+(.*)\s+(result|client|user):

但现在如果我匹配第二个字符串,它会捕获 param0=false, param1=15230 user: user213(看起来正则表达式正在匹配贪婪)

  1. 如何解决这个问题? parameter:\s+(.*)\s+(result|client|user)+?:不会修复
  2. this regex tester我可以将修饰符 U 添加到正则表达式,使正则表达式默认为惰性,这在 Java 中也可能吗?

最佳答案

尝试将 ? 字符放入第一个捕获组(您打算提取的子模式):

parameter:\\s+(.*?)\\s+(result|client|user):

关于java - 设置Java中的RegEx默认为非贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312505/

相关文章:

java - 如何消除对象之间的空间?

java - 如何在java中绘制颜色图?

java - 转换时出现异常 "JSONArray cannot be converted to JSONObject error"

c++ - 用正则表达式匹配一个字符串并返回它的一部分

java - 有没有办法通过键从 HashMap 中随机选择值?

javascript - 当字符串甚至不匹配时检查返回 true (RegEx)

c++ - 如何在 C++ 中将整个文件读入 std::string?

在C中将ASCII码转换为字符串

javascript - JQuery 扩展字符串

regex - "If"内的 VBA 动态正则表达式模式