<Poprzedni | Spis treści | Następne>
? - Dopasuj element zero lub jeden raz
Ten kwantyfikator oznacza w efekcie „Uczyń poprzedni element opcjonalnym”. Załóżmy, że chcemy sprawdzić numer telefonu pod kątem ważności i uznaliśmy, że numer telefonu jest ważny, jeśli odpowiada jednej z tych dwóch form:
(nnn) nnn-nnnn nnn nnn-nnnn
gdzie "n” jest cyfrą. Moglibyśmy skonstruować takie wyrażenie regularne:
^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$
W tym wyrażeniu po nawiasach umieszczamy znaki zapytania, aby wskazać, że należy je dopasować zero lub jeden raz. Ponownie, ponieważ nawiasy są normalne
metaznaki (w ERE), poprzedzamy je ukośnikami odwrotnymi, aby zamiast tego traktować je jako literały.
Spróbujmy:
[ja@linuxbox ~]$ echo "(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
[ja@linuxbox ~]$ echo "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
[ja@linuxbox ~]$ echo „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]$'
[ja@linuxbox ~]$
[ja@linuxbox ~]$ echo "(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
[ja@linuxbox ~]$ echo "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
[ja@linuxbox ~]$ echo „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]$'
[ja@linuxbox ~]$
Widzimy tutaj, że wyrażenie pasuje do obu form numeru telefonu, ale nie pasuje do formy zawierającej znaki inne niż numeryczne.