? - התאם אלמנט אפס או פעם אחת
למעשה, משמעותו של כימות זה היא "הפוך את האלמנט הקודם לאופציונלי". נניח שרצינו לבדוק את תקפותו של מספר טלפון וחשבנו שמספר טלפון תקף אם הוא תואם לאחת משתי הצורות הבאות:
(nnn) nnn-נןןןןןןןןןןןן-nnnn
איפה "n"היא מספרית. נוכל לבנות ביטוי רגולרי כך:
^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$
בביטוי זה, אנו מסימנים שאלה אחרי תווי הסוגריים כדי לציין שיש להתאים אותם אפס או פעם אחת. שוב, מכיוון שהסוגריים בדרך כלל
מטא-תווים (ב-ERE), אנו מקדימים אותם בקו נטוי הפוך כדי לגרום להם להיחשב כליטרלים במקום זאת.
בואו ננסה את זה:
[me@linuxbox ~]$ הד "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]
\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
(555) 123-4567
[me@linuxbox ~]$ הד "555 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)
? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
555 123-4567
[me@linuxbox ~]$ הד "AAA 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)
? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
[me@linuxbox ~]$
[me@linuxbox ~]$ הד "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]
\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
(555) 123-4567
[me@linuxbox ~]$ הד "555 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)
? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
555 123-4567
[me@linuxbox ~]$ הד "AAA 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)
? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
[me@linuxbox ~]$
כאן אנו רואים שהביטוי תואם את שתי הצורות של מספר הטלפון, אך אינו תואם לאחת המכילות תווים שאינם מספריים.