Что делает это регулярное выражение? - PullRequest
1 голос
/ 08 сентября 2010
/^([a-z]:)?\//i

Я не совсем понимаю, что такое ? в этом регулярном выражении, если бы мне пришлось объяснить это из того, что я понял:

Match begin "Group1 от a до z и:" снаружи ? (что я не понимаю, что он делает) \/, что делает его соответствующим / и опцией /i "без учета регистра".

Я понимаю, что это вернет 0 или 1, но не уверен, почему из-за ?

Это соответствует пути к каталогу или что-то в этом роде?

Если я проверю это:

$var = 'test' получит 0, а $var ='/test'; получит 1, но $var = 'test/' получит 0

То есть все, что начинается с /, получит 1, а все остальное 0.

Может ли кто-нибудь объяснить мне это регулярное выражение в элементарных терминах?

Ответы [ 5 ]

9 голосов
/ 08 сентября 2010

См. YAPE :: Regex :: Объяснить :

#!/usr/bin/perl

use strict; use warnings;

use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/^([a-z]:)?\//i)->explain;
The regular expression:

(?i-msx:^([a-z]:)?/)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?i-msx:                 group, but do not capture (case-insensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (                        group and capture to \1 (optional
                           (matching the most amount possible)):
----------------------------------------------------------------------
    [a-z]                    any character of: 'a' to 'z'
----------------------------------------------------------------------
    :                        ':'
----------------------------------------------------------------------
  )?                       end of \1 (NOTE: because you're using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \1)
----------------------------------------------------------------------
  /                        '/'
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
8 голосов
/ 08 сентября 2010

Соответствует строчной или заглавной букве ([a-z] с модификатором i), расположенной в начале входной строки (^), за которой следует двоеточие (:), при желании все (* 1005) *), после которого следует косая черта \/.

Короче говоря:

^          # match the beginning of the input
(          # start capture group 1
  [a-z]    #   match any character from the set {'A'..'Z', 'a'..'z'} (with the i-modifier!)
  :        #   match the character ':'
)?         # end capture group 1 and match it once or none at all
\/         # match the character '/'
7 голосов
/ 08 сентября 2010

? будет соответствовать одному или ни одному из предыдущих шаблонов.

?      Match 1 or 0 times

См. Также: perldoc perlre

Объяснение:

/.../i   # case insensitive

^(...)   # match at the beginning of the string

[a-z]:   # one character between 'a' and 'z' followed by a colon

(...)?   # zero or one time of the group, enclosed in ()

Итак, по-английски: сопоставьте все, что начинается с / (косая черта) или какой-либо буквы, за которой следует двоеточие, за которым следует /.Это выглядит так, как если бы он совпадал с путями в Unix и Windows, например, он совпадал бы:

/home/user

и

C:/Applications

и т. Д.

2 голосов
/ 08 сентября 2010

Похоже, что он ищет "укоренившийся" путь. Он будет успешно совпадать с любой строкой, которая начинается с косой черты (/ test) или с буквы диска, за которой следует двоеточие, за которым следует косая черта (c: / test).

1 голос
/ 08 сентября 2010

В частности, вопросительный знак делает что-то необязательным.Это относится к части в скобках, которая представляет собой букву, за которой следует двоеточие.

Вещи, которые будут совпадать:

C:/
a:/
/

(последний пункт выше объясняет, почему??)

Вещи, которые не будут совпадать:

C:
a:
ab:/
a/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...