П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 176898 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 74024 раз(а).

Учебник HTML.
Просмотров 73260 раз(а).

Руководство по PHP5.
Просмотров 44142 раз(а).

Хостинг через призму DNS.
Просмотров 50786 раз(а).

Подборка текстов стандартных документов.
Просмотров 44316 раз(а).

Учебник PHP - Самоучитель
Просмотров 50567 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 50981 раз(а).

Внешние атаки...
Просмотров 41293 раз(а).

Учебник PHP.
Просмотров 36523 раз(а).

SSI в примерах.
Просмотров 27416 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 7: Регулярные выражения.
7.3 Образцы
7.3.6 Приоритет

Что произойдет, если объединить а | b*? Что будет отыскиваться — любое количество символов а или Ь или один символ а и любое количество b?

Групповые и фиксированные образцы, как и операции, имеют приоритет. Приоритет образцов (от высшего к низшему) приведен в таблице 7.2.

Таблица 7.2. Приоритет групповых регулярных выражений**

Наименование Обозначение
Круглые скобки
Множители
Последовательность
и фиксация Дизъюнкция
( ) (?: ) ? + * {m,n} ?? +? *? {m,n}? abc ^$ \А \Z (?= ) (?! )

* Или прямо перед символом новой строки в конце строки.

** Некоторые из этих символов в нашей книге не описываются. См. книгу Programming Perl или man-страницу perlreii(l).

Согласно этой таблице, специальный символ * имеет более высокий приоритет, чем |. В силу этого /а |b*/ интерпретируется как один символ а или любое число символов b.

Что, если нам понадобится другое — например, "любое число символов а или b"? В этом случае нужно просто использовать пару круглых скобок. В нашем примере в скобки нужно заключить ту часть выражения, к которой должна относиться *, т.е. (а|b)*. Если вы хотите подчеркнуть, какое выражение вычисляется первым, можно дать избыточные круглые скобки:

а (b*).

Изменение приоритета с помощью круглых скобок одновременно активизирует режим запоминания для данного образца, как мы рассказывали выше. То есть эти круглые скобки учитываются, когда вы определяете, соответствует ли какой-то элемент \2, \3 и т.д. Если вы хотите использовать круглые скобки без включения режима запоминания, применяйте форму (?:...), а не (...). Она тоже позволяет указывать множители, но не изменяет значение счетчика подлежащих запоминанию лексем, используя, например, переменную $4 и т.п. Например,/(?: Fred |Wilma) Flintstone/ ничего не записывает в переменную $ 1; здесь просто предполагается группирование.

Вот еще несколько примеров регулярных выражений и действия круглых скобок:

abc*   # соответствует ab, abc, abcc, abccc, abcccc, и т.д. 

(abc)* # соответствует "", ab, abc, abcabc, abcabcabc, и т.д.

^х|у   # соответствует х в начале строки или у в любом месте

^x.^y) # соответствует х или у в начале строки

а|be|d # либо а, либо be, либо d 

(a|b)(с|d) # ас, ad, be или bd 

(song|blue)bird # songbird или bluebird

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru