Q:

Regex optional matching

Pseudo/dummy-code that will be matched against:
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

Goal
Capture XXXXXXXXX(without the single-quotes) but do NOT capture ABABABAB
Best attempt so far:
(M: \'|Y: \')(.*)(?:\' )(?:is)

Is it even possible to achive the goal above, and if yes, then how?

A:

You can use a lookahead only to check if the string matched is before is:
'([^']*)'\\s*(?=\\bis\\b)

See regex demo
Breakdown:

' - single apostrophe
([^']*) - capture group matching 0 or more characters other than '
'\\s* - a single apostrophe and 0 or more whitespace symbols
(?=\\bis\\b) - a lookahead making sure there is a whole word is after the current position (after the ' with optional whitespaces)

Java demo:
Pattern ptrn = Pattern.compile("'([^']*)'\\s*(?=\\bis\\b)");
Matcher matcher = ptrn.matcher("RECOVERY: 'XXXXXXXXX' is UP");
if (matcher.find()) {
    System.out.println(matcher.group(1));
}

UPDATE
I used a lookahead only because you used a non-capturing group in your original regex : (?:is). A non-capturing group that has no quantifier set or any alternation inside seems reduntant and can be omitted. However, people often get misled by the name non-capturing thinking they can exclude the substring matched by this group from the overall match. To check for presence or absence of some text without matching, a lookaround should be used. Thus, I used a lookahead.
Indeed, in the current scenario, there is no need in a lookahead since it makes sense in case you need to match subsequent substrings that start wiyh the same sequence of characters.
So, a better alternative would be
'([^']*)'\s*is\b

Java:
Pattern ptrn = Pattern.compile("'([^']*)'\\s*is\\b");

