2013-03-12 2 views
2

Я нашел следующее регулярное выражение из RegexLib.Что означает это обозначение «?:» В регулярном выражении?

^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?: 
(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468] 
[048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2])) 
(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ 

Это из http://regexlib.com/REDetails.aspx?regexp_id=113

Я не понимаю, обозначения «?:», Который используется много раз в этом регулярном выражении. Кажется, что: «нет» в chartsheet

Я знаком с регулярным выражением. Может ли кто-нибудь показать пример, с регулярным выражением и вводами?

+1

Это делает дополнительный шаблон не запечатленным – arnaud576875

+2

Для получения дополнительной информации проверьте [this] (http://stackoverflow.com/q/3512471/557306) вопрос/ – sidyll

ответ

2
(?:) 

означает не захвата группы. См perldoc perlre ( ИМХО самый продвинутый язык, чтобы играть с Regex: примером, означает Perl Compatible Regular Expression и по умолчанию для PHP, pcregrep или с grep -P)

Соответствующей частью PERL документа:

(?: шаблон)
(adluimsx-imsx: рисунок)
(^ aluimsx: рисунок)

Это для кластеризации, а не для захвата; он группирует подвыражения типа «()», но не делает обратные ссылки как «()».

Смотрите этот пример, используя :

$ echo 'azfoobar' | perl -lne 'print $1 if /^(?:az)(.*)/' 
foobar 

Как вы можете видеть, первое соответствие захватывая группы ($1) не az, но остальные линии.Это работает так же с другими языками, как или такими.

+0

Спасибо. Я просто нашел аналогичную нотацию '(? I: ...)' in '(? I: (? = [MDCLXVI]) ((M {0,3}) ((C [DM]) | (D? C {0,3})) ((Х [LC]) | (L XX {0,2}) |? л) ((I [VX]) |? (V (II {0,2})?) | V))) '?. Есть предположения? – JackWM

+1

@JackWM, '(? I: ...)' представляет собой комбинацию встроенного модификатора 'i', который включает независимое от случая совпадение и группу без захвата. Средство: шаблон внутри этой группы не чувствителен к регистру и не фиксируется. – stema

+0

Добавленные объяснения и perl doc –

7

(?:...) просто не группа записи, означает часть строки, который согласован с этой группой не хранится и не могут быть доступны $1 или \1

Захват групп пронумерованы открытия скобок, так

Для примера текст "Foobar тест"

  1. Вот две группы захвата

    ^(\w+)\s*(\w+) 
    1  2 
    

    Это приведет:

    $1 = "Foobar" 
    
    $2 = "test" 
    
  2. Вот только одна группа записи:

    ^(?:\w+)\s*(\w+) 
          1 
    

    Это приведет:

    $1 = "test" 
    
+0

Не могли бы вы показать пример? Благодарю. – JackWM

+1

@JackWM, пример чего? Ссылка sidyll имеет хорошее объяснение с примером. – stema

+0

@JackWM, я добавил пример. – stema

2

(?:...) является нет n-capture, то есть она управляет приоритетом оператора, но не создает группу соответствия.

+0

Не могли бы вы показать пример? Благодарю. – JackWM

Смежные вопросы