Помогите с регулярным выражением - PullRequest
0 голосов
/ 15 июля 2011

В следующем выражении:

if (($$_ =~ /^.+:\s*\#\s*abcd\s+XYZ/)
  1. Откуда взято $$ _
  2. Правая часть выражения означает совпадение одного или нескольких символов, плюс двоеточие, за которым следуют ноль или более пробелов, после которых следует # или один или несколько пробелов, за которыми следует «abcd», за которыми следуют ноль или более пробелов, за которыми следует « XYZ '?

Ответы [ 4 ]

2 голосов
/ 15 июля 2011

У вас есть последние "один или несколько" и "ноль или более", противоположные тому, что на самом деле делает регулярное выражение.

$$_ разыменовывает скалярную ссылку в $_.

1 голос
/ 15 июля 2011

Что касается пт.2:

Строка, начинающаяся с (^) одного или нескольких символов (.+), двоеточия (:), нуля или более пробельных символов (\s*), хеш (\#), ноль или более пробельные символы (\s*), строка «abcd» (abcd), один или несколько пробельные символы (\s+),затем строка "XYZ" (XYZ).

(акцент добавлен на расхождения.) Обратите внимание, что на конце строки нет привязки ($), поэтому это касается только начала.

1 голос
/ 15 июля 2011

Относительно 2. ваше объяснение регулярному выражению не совсем верно.

/^.+:\s*#\s*abcd\s+XYZ/

означает один или несколько символов (начиная с начала строки), за которыми следует двоеточие, за которым следует ноль или более пробельных символов, за которыми следует один хеш-символ, за которым следуют ноль или более пробельных символовсопровождаемый 'abcd', сопровождаемый одним или несколькими пробельными символами, сопровождаемыми 'XYZ'.

0 голосов
/ 15 июля 2011

Взгляните на этот сайт

Вот объяснение вашего регулярного выражения:

Token    Meaning

^        Matches beginning of input. If the multiline flag is set to true, 
         also matches immediately after a line break character.
.+       Matches any single character except newline characters.
         The + quantifier causes this item to be matched 1 or more times (greedy).
:        :
\s*      Matches a single white space character.
         The * quantifier causes this item to be matched 0 or more times (greedy).
\#       #
\s*      Matches a single white space character.
         The * quantifier causes this item to be matched 0 or more times (greedy).
abcd     abcd
\s+      Matches a single white space character.
         The + quantifier causes this item to be matched 1 or more times (greedy).
XYZ      XYZ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...