RECOVERY: 'XXXXXXXXX' is UP
PROBLEM: 'ABABABAB' on 'XXXXXXXXX' is WARNING
PROBLEM: 'XXXXXXXXX' is DOWN
RECOVERY: 'ABABABAB' on 'XXXXXXXXX' is OK
PROBLEM: 'ABABABAB' on 'XXXXXXXXX' is DOWN
捕获XXXXXXXXX
(不带单引号),但不捕获ABABABAB
(M: \'|Y: \')(.*)(?:\' )(?:is)
是否有可能实现上述目标,如果是,那么如何?
答案 0 :(得分:2)
您只能使用前瞻来检查匹配的字符串是否在is
之前:
'([^']*)'\\s*(?=\\bis\\b)
请参阅regex demo
故障:
'
- 单撇号([^']*)
- 捕获与'
'\\s*
- 单个撇号和0个或更多个空白符号(?=\\bis\\b)
- 确保在当前位置之后(is
之后有可选的空格)之后有一个完整的单词'
Pattern ptrn = Pattern.compile("'([^']*)'\\s*(?=\\bis\\b)");
Matcher matcher = ptrn.matcher("RECOVERY: 'XXXXXXXXX' is UP");
if (matcher.find()) {
System.out.println(matcher.group(1));
}
<强>更新强>
我使用前瞻只是因为您在原始正则表达式中使用了non-capturing group:(?:is)
。没有量词集或内部任何替换的非捕获组似乎是还原剂,可以省略。但是,人们常常被名称非捕获误导,认为他们可以从整体匹配中排除此组匹配的子字符串。要在不匹配的情况下检查某些文本的存在与否,应使用环视。因此,我使用了一个前瞻。
实际上,在当前场景中,没有必要进行前瞻,因为如果你需要匹配后续的字符串,那么它就是有意义的。这些子字符串是以相同的字符序列开始的。
所以,更好的选择是
'([^']*)'\s*is\b
爪哇:
Pattern ptrn = Pattern.compile("'([^']*)'\\s*is\\b");
答案 1 :(得分:2)
以下正则表达式应该可以正常工作
\'([^']+)\'\s+is
所有匹配项都将存储在matcher groups array
中