YAPE::Regex::Explain to the rescue.
The outer "(?x-ims:" is what qr makes from the /x flag, and the question mark in the ")? end of grouping" is reflected in the "optional" at the comment at the start ot said group
perl -wMstrict -MYAPE::Regex::Explain -e "print YAPE::Regex::Explain->
+new(qr/( [a-zA-Z]+ (?: ' [a-zA-Z]{1,2} )? )/x)->explain;"
The regular expression:
(?x-ims:( [a-zA-Z]+ (?: ' [a-zA-Z]{1,2} )? ))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?x-ims: group, but do not capture (disregarding
whitespace and comments) (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n):
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
[a-zA-Z]+ any character of: 'a' to 'z', 'A' to 'Z'
(1 or more times (matching the most
amount possible))
----------------------------------------------------------------------
(?: group, but do not capture (optional
(matching the most amount possible)):
----------------------------------------------------------------------
' '\''
----------------------------------------------------------------------
[a-zA-Z]{1,2} any character of: 'a' to 'z', 'A' to
'Z' (between 1 and 2 times (matching
the most amount possible))
----------------------------------------------------------------------
)? end of grouping
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------