On the assumption that you are only interested in a value starting "fact." and delimited by surrounding square brackets, I would use a simpler pattern, of the form: ```regex \[(fact\.[^]]*)] ``` Note that I haven't bothered to consider any preamble in the string, so the `Matcher.matches` method isn't going to work. Instead I'm going to use `Matcher.find`, which can search from a given position to find a match, ignoring text before and after that match. The above regex says: > Find a '[' followed by 'fact.' followed by any length of text made of any characters except ']' and ended with a ']'. It is set to capture the text from 'fact.', ignoring the leading '[', through to the character just before the closing ']'. The example code is: ```java Pattern myPattern = Pattern.compile('\\[(fact\\.[^]]*)]'); Matcher myMatcher = myPattern.matcher('[subj.cm_parcel__c.sqft__c]+[comp.cm_sale__c.sqft__c])*[fact.cm_comp_sales_adjustment_factor__c.living_area_default_index_score__c]'); System.debug(myMatcher); if (myMatcher.find(0)) { System.debug(myMatcher.group(1)); } ``` Recall that group(0) is always the entire pattern match, so here group(1) is the explicitly defined capture group (as described above).