Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скобки ( ), где их применять.
 
 автор: lgar   (24.08.2009 в 20:42)   письмо автору
 
 

Квадратные скобки для создания класса символов, например [Bb] или диапазон символов [A-Z].
Символы ( ) позволяют создавать подшаблоны. Например, (windows|linux).

Я не пониманию, что нужно писать в круглых скобках. Например, почему (.+), а не просто .+.
Например. я хочу написать
preg_match_all("|http://\S+|", $line, $out, PREG_PATTERN_ORDER)


или надо \S+ (этот вариант работает без круглых и квадратных скобок) обрамить [\S+], или (\S+), или [\S]+ (эти варианты я не проверял, написал как пример того, что я не понимаю).

/^(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$/

Тут вообще 4 раза круглые скобки зачем-то использовали.

  Ответить  
 
 автор: ..........   (24.08.2009 в 22:31)
 
   для: lgar   (24.08.2009 в 20:42)
 

> диапазон символов [A-Z].
я-бы сказал класс с диапазоном символов

\S \s \W \w \d \D - это тоже такие-же классы но в отличие от самодельных (в квадратных скобках)***
их можно вставить в перечень диапазонов и/или символов в квадратных скобках

***сноска: в квадратных скобках кроме самодельных могут быть и поддерживаемые POSIX-классы
[[:alnum:]] , [[:space:]], [[:punct:]] .... их тоже можно вставить в класс. (понятие "самодельные" недокументированно :)


>в круглых скобках
круглые скобки (так-называемые подмаски) используются чтобы выделить какуюто составляющую часть выражения
, или составляющую часть составляющей части выражения ,)
которую впрочем тоже можно назвать составляющей частью выражения
поэтому не буду перечислять все варианты число которых ограничено (небесконечно)

причём, подмаски бывают нескольких видов (), (?:), (?uUisx:),(?<!), (?<=), (?=), (?!), (?>), ........
и бывают так-же логические выраженияч в таких-же скобках (?(2)....|....), (?R) ........
тоже небуду перечислять все возможные применения таких подмасок ,)

но по сути вопроса () - захватывающая подмаска
, она тоже может применяться для объединения части выражения чтобы применить к этой части квантификатор
, например (слово )+ это может быть слово слово
или чтобы разделение двух альтернативных вариантов не делило всё выражение
например (сло|клё)во это может быть слово или клёво
, но основная цель такого выделения это захват части текста совпавшего с шаблоном в подмаске

> preg_match_all("|http://\S+|", $line, $out, PREG_PATTERN_ORDER)

напишите после этого print_r($out)
и напишите затем тоже-самое , но с (\S+) и посмотрите разницу
, но есть и другие применения захвата значений

а чисто для объединения или отделения есть специальная так-называемаяи незахватывающая подмаска
или также-называемая группирующая подмаска (?:)
например (?:слово )+

читайте мануалы, чтобы не нахвататься недокументированных слов :)
http:// docs. php. net/manual/ru/regexp. reference. php

  Ответить  
 
 автор: Zend72   (25.08.2009 в 01:45)   письмо автору
 
   для: lgar   (24.08.2009 в 20:42)
 

Вот например

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования