-the literal - (4510 / 558 / 2D16)
\s*any whitespace character, repeated any number of times
.*any character (except for line terminators), repeated any number of times
:the literal : (5810 / 728 / 3A16)
.*?any character (except for line terminators), repeated any number of times
Group device(?<device>ip(?:hone|ad(?: ?air)?)) ipthe literal text ip (case insensitive) Non-Capturing Group(?:hone|ad(?: ?air)?) honethe literal text hone (case insensitive) 2nd Alternativead(?: ?air)? adthe literal text ad (case insensitive) Non-Capturing Group(?: ?air)? ?repeats the group contents below at most once:
?optionally matches the literal (3210 / 408 / 2016)
airthe literal text air (case insensitive) \s*any whitespace character, repeated any number of times
?repeats the group contents below at most once:
\da digit
.*any character (except for line terminators), repeated any number of times
iosthe literal text ios (case insensitive) \s*any whitespace character, repeated any number of times
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string
i modifier: insensitive. Matches without distinguishing uppercase and lowercase letters