В чем разница между () и [] в шаблонах регулярных выражений?

В чем разница между включением части регулярного выражения в () (круглые скобки) и выполнением в [] (квадратные скобки)?

Как это:

[a-z0-9]

отличается от этого:

(a-z0-9)

?

 nickytonline24 сент. 2010 г., 19:43
Проверять, выписыватьсяregular-expressions.info

Ответы на вопрос(6)

[] построить в регулярном выражении является по существу сокращением для| на все содержимое. Например[abc] соответствует a, b или c. Дополнительно- персонаж имеет особое значение внутри[], Это обеспечивает диапазон конструкции. Регулярное выражение[a-z] будет соответствовать любой букве от a до z.

() Конструкция - это группирующая конструкция, устанавливающая порядок приоритета (она также влияет на доступ к совпадающим подстрокам, но это более сложная тема). Регулярное выражение(abc) будет соответствовать строке "abc".

Попробуйте ([a-z0-9]) захватить смешанную строку из строчных букв и цифр, а также захватить для обратных ссылок (или извлечения).

[a-z0-9] будет соответствовать одному изabcdefghijklmnopqrstuvwxyz0123456789, Другими словами, квадратные скобки соответствуют ровно одному символу.

(a-z0-9) будет соответствовать двум символам, первый из которыхabcdefghijklmnopqrstuvwxyzвторой является одним из0123456789Как будто круглых скобок не было. () Позволит вам прочитать, какие именно символы были сопоставлены. Скобки также полезны для ИЛИ двух выражений с помощью строки| персонаж. Например,(a-z|0-9) будет соответствовать одному символу - любой из строчных букв или цифр.

 levis50126 сент. 2010 г., 02:06
Ах, спасибо за это разъяснение. ([a-z] | [0-9]) было бы больше того, что я описал.
 Daniel Vandersluis24 сент. 2010 г., 19:37
Диапазоны существуют только внутри классов персонажей.(a-z|0-9) будет соответствовать строкеa-z или же0-9, но нетa или же5.

[a-z0-9] будет соответствовать любой строчной букве или цифре.(a-z0-9) будет соответствовать точной строке"a-z0-9" и позволяет две дополнительные вещи: вы можете применять такие модификаторы, как* а также? а также+ для всей группы, и вы можете ссылаться на этот матч после матча с$1 или же\1, Не полезно с вашим примером, хотя.

(…) этогруппа который группирует содержимое как в математике;(a-z0-9) это сгруппированная последовательностьa-z0-9, Группы особенно используются скванторы которые позволяют предыдущему выражению быть повторенным в целом:a*b* соответствует любому количествуaСледуют любое количествоbНапример,a, aaab, bbbbb, так далее.; в отличие от этого,(ab)* соответствует любому количествуabНапример,ab, abababab, так далее.

[…] этокласс персонажа который описывает варианты для одного символа;[a-z0-9] описывает один единственный символ, который может иметь диапазонaz или же09.

 Jeff Rupert24 сент. 2010 г., 19:19
+1 за ссылки на www.regular-expressions.info Хороший ресурс для вопросов по регулярным выражениям.
Решение Вопроса

[] обозначает класс персонажа.() обозначает группу захвата.

[a-z0-9] - Один персонаж, который находится в диапазонеa-z ИЛИ ЖЕ0-9

(a-z0-9) - Явный захватa-z0-9, Нет диапазонов.

a - Может быть захвачен[a-z0-9].

a-z0-9 - Может быть захвачен(a-z0-9) и затем можно ссылаться в замене и / или позже в выражении.

 Muhammad Umer31 авг. 2013 г., 20:08
Можете ли вы сказать, почему эти два разные/[\s+]?,[\s+]?/ против/(\s+)?,(\s+)?/
 Jeff Rupert02 сент. 2013 г., 08:52
Первый имеет символы в классе символов, второй использует группу захвата. Эти выражения на самом деле совершенно разные. Первый будет соответствовать 0 или 1 символу пробела ИЛИ a +, за которым следует запятая, за которой следует 0 или 1 символ пробела ИЛИ +. Последний будет соответствовать 0 или более пробельных символов, за которыми следует запятая, за которой следуют 0 или более пробельных символов.
 Muhammad Umer02 сент. 2013 г., 17:58
Вы говорите о JS прямо
 Jeff Rupert05 сент. 2013 г., 22:11
Я не уверен, что вы ищете, тогда. Если бы я искал кучу «а» подряд, я бы просто использовалa+.
 Muhammad Umer05 сент. 2013 г., 05:51
но в JS+ это специальный символ регулярного выражения ... с чего бы это совпадать !?
 Muhammad Umer05 сент. 2013 г., 16:53
так что если я этого хочу, то это не возможно ..[a+], Спасибо за указание, что я бы даже не догадался, что + внутри скобок это просто плюс.
 Jeff Rupert05 сент. 2013 г., 19:00
Если вы ищете, чтобы соответствовать '+ +, вы хотите избежать+ в качестве таких:\+, Это скажет парсеру искать «+».
 Jeff Rupert05 сент. 2013 г., 15:20
A + это особый характер почти в любой разновидности регулярных выражений. Тем не менее, когда внутри группы символов (набор символов внутри[]),+ вместо этого сопоставляется как обычный символ.
 Jeff Rupert02 сент. 2013 г., 08:53
Так что, в принципе, если у вас есть строка следующим образом:var myStr = ' , ', первое выражение НЕ будет совпадать, тогда как второе будет. Если у вас есть другая строка следующим образом:var myOtherStr = '+,', оно будет соответствовать первому выражению, но не второму.
 Muhammad Umer05 сент. 2013 г., 20:40
нет нет, как вы сказали мне, и я подтвердил, чтоа + в[a+] на самом деле и +. Не аааааа ....! Так что, если бы я хотел aaaaaa ... в [], что бы я сделал. Это:[(?:a+)].?
 Jeff Rupert04 сент. 2013 г., 16:19
Я использовал JS в качестве примера языка, но концепция заключается в том, как будет работать большинство регулярных выражений.regular-expressions.info отличный ресурс, если вы пытаетесь узнать о регулярных выражениях. знак равно

Ваш ответ на вопрос