Какая разница между (и [? - PullRequest
0 голосов
/ 10 февраля 2012

В чем разница между [pattern] и (pattern)?Я не смог найти его в Google, так как он не позволяет печатать эти символы.Спасибо.

Ответы [ 2 ]

11 голосов
/ 10 февраля 2012

() для группы (обычно используется для захвата, чередования и т. Д.), Тогда как [] для набора символов (или одной формы "класса символов""чтобы быть точным).

Таким образом, шаблон (abc) будет соответствовать всей строке "abc", тогда как [abc] будет соответствовать любому отдельному символу из a, b или c.

Несмотря на то, что в регулярных выражениях есть специфичные для платформы аспекты, это различие довольно стандартное - поэтому любое руководство по регулярным выражениям должно охватывать его.

1 голос
/ 10 февраля 2012

Все в [] соответствует только одному символу.Таким образом, вы можете написать [aeiou], чтобы соответствовать любой строчной гласной, или [a-m], чтобы соответствовать любой букве в первой половине алфавита.Поскольку это всего лишь один символ, вам может понадобиться использовать его в сочетании с + или *, если вы хотите использовать несколько символов.Например,

f[aeiou]t соответствует fat, но не feet, тогда как f[aeiou]*t соответствует fat, foot, feet и даже ft.

С другой стороны, что-то в () соответствует такому количеству символов, как без скобок.Вы используете (), если хотите работать с какой-то частью регулярного выражения.Например, ba(na)* соответствует ba и banana и даже banananana, потому что * (что означает любое количество вхождений того, что находится непосредственно перед ним) действует в целом na.Кроме того, если вы собираетесь выполнять замену на основе регулярных выражений, когда вы заменяете некоторую часть соответствия новой строкой, () может использоваться для определения того, что будет заменено - например, вы можете заменитькакая часть вашей строки соответствует 4-му выражению в скобках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...