我有如下字符串:
"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
(看起来正则表达式正在匹配贪婪)
- 如何解决这个问题?
parameter:\s+(.*)\s+(result|client|user)+?:
不会修复 - 与 this regex tester我可以将修饰符
U
添加到正则表达式,使正则表达式默认为惰性,这在 Java 中也可能吗?
最佳答案
尝试将 ?
字符放入第一个捕获组(您打算提取的子模式):
parameter:\\s+(.*?)\\s+(result|client|user):
关于java - 设置Java中的RegEx默认为非贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312505/