我有如下字符串:
"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"
Run Code Online (Sandbox Code Playgroud)
模式是parameter:,然后param是 ,参数后面是client:and/oruser:和/or result。
parameter:我想匹配和 第一次出现之间的内容client:,user:或者result:
所以对于第二个字符串它应该匹配param0=false, param1=15230。
我的正则表达式是:
parameter:\s+(.*)\s+(result|client|user):
Run Code Online (Sandbox Code Playgroud)
但现在如果我匹配它捕获的第二个字符串param0=false, param1=15230 user: user213(看起来正则表达式正在匹配贪婪)
parameter:\s+(.*)\s+(result|client|user)+?:不会修复它U,使正则表达式默认变得惰性,这在 Java 中也可能吗?尝试将?字符放入第一个捕获的组中(您想要提取的子模式):
parameter:\\s+(.*?)\\s+(result|client|user):
Run Code Online (Sandbox Code Playgroud)
不。Java 中没有 ungreedy 修饰符。您必须使用?后面的修饰符来使量词成为延迟捕获。
这意味着您应该用 表示所有量词?,请参阅以下模式:
"parameter:\\s+?(.*?)\\s+?(result|client|user):"
Run Code Online (Sandbox Code Playgroud)
指定者: http:
//docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |