默认情况下,将Java中的正则表达式设置为非贪婪

默认情况下,将Java中的正则表达式设置为非贪婪,java,regex,string,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: 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"
模式是
参数:
,然后是
参数
,在参数之后是
客户端:
和/或
用户:
和/或
结果

我想匹配
参数:
和第一次出现的
客户机:
用户:
结果:

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

我的正则表达式是:

parameter:\s+(.*)\s+(result|client|user):
但是现在如果我匹配它捕获的第二个字符串
param0=false,param1=15230 user:user213
(看起来正则表达式匹配贪婪)

  • 如何解决这个问题<代码>参数:\s+(.*)\s+(结果|客户端|用户)+?:无法修复它
  • 使用,我可以将修饰符
    U
    添加到正则表达式中,使正则表达式在默认情况下变为惰性,这在Java中也可能吗

  • 尝试将
    字符放入第一个捕获的组(要提取的子模式)中:


    尝试将
    字符放入第一个捕获的组(要提取的子模式)中:


    不,Java中没有ungreedy修饰符。您必须在修饰符后面使用
    ,以使量词成为惰性捕获

    这意味着您应该用
    表示所有量词,请参见以下模式:

    "parameter:\\s+?(.*?)\\s+?(result|client|user):"
    
    指定人:


    不,Java中没有ungreedy修饰符。您必须在修饰符后面使用
    ,以使量词成为惰性捕获

    这意味着您应该用
    表示所有量词,请参见以下模式:

    "parameter:\\s+?(.*?)\\s+?(result|client|user):"
    
    指定人:


    您可以使用
    U
    标志来使用ungreedy,或者只是将
    连接到您的
    *
    并具有
    x*?
    x+?
    @Fede在Java中没有
    (?U)
    标志。@Unihedron很高兴知道。有这么多的引擎和一些不同的功能,我搞砸了。谢谢。@Fede我在回答中发布了一个指向Java模式文档的链接。您还可以看到,您可以使用
    U
    标志来使用ungreedy,或者只是将
    连接到您的
    *
    并具有
    x*?
    x+?
    @Fede在Java中没有
    (?U)
    标志。@Unihedron很高兴知道。有这么多的引擎和一些不同的功能,我搞砸了。谢谢。@Fede我在回答中发布了一个指向Java模式文档的链接。你也可以看到