默认情况下,将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
(看起来正则表达式匹配贪婪)
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模式文档的链接。你也可以看到