Зачем нужны ( ) в RegEx?

173
18 декабря 2017, 15:05

Не как не могу понять как использовать и зачем нужны ( ) в регулярках. Может кто то подсказать и привести не большой пример.

Answer 1

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

Вот к примеру найти все числа, которые начинаются с "привет", заканчиваются на "лет", а посередине могут быть любые числа. Вот нужно все эти числа найти.

привет100лет а может привет80лет а может и привет666лет

регулярка

/привет([0-9]+)лет/

в итоге

preg_match_all('/привет([0-9]+)лет/', 'привет100лет а может привет80лет а может и привет666лет', $matches, PREG_OFFSET_CAPTURE);
foreach ($matches[1] as $match) {
    echo $match[0].'<br/>';
}

выведет

100
80
666

Без выделения группы регулярное выражение выдавало бы цельный результат, типа

привет100лет
привет80лет
привет666лет

А вот регулярка вычленения телефонных номеров из строки:

/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x

которая из строки

Звоните 555-1212 или 1-800-555-1212

достанет группы:

555-1212
800-555-1212
Answer 2

Сохраняющие круглые скобки: (…) и \1, \2, …

Стандартные круглые скобки обычно выполняют две функции: группировку и сохранение. Они почти всегда включаются в выражения в виде (…), но в ряде диалектов используется запись \(…\).

Сохраняющие скобки идентифицируются по порядковому номеру открывающей скобки от левого края выражения.

Если в диалекте поддерживаются обратные ссылки, то на текст, совпавший с подвыражением в круглых скобках, можно ссылаться в том же регулярном выражении при помощи метасимволов \1, \2 и т. д.

Чаще всего круглые скобки применяются для извлечения данных из строки.

READ ALSO
php файл как динамический js

php файл как динамический js

Можно ли делать так, если нет других вариантов

287
Ошибка php mysqli_query: Error while sending QUERY packet

Ошибка php mysqli_query: Error while sending QUERY packet

Здравствуйте! Периодически в логах вываливается

214
Сдвиг числа в ассемблере командой RCR

Сдвиг числа в ассемблере командой RCR

Задание: Реализовать в С++ функцию void BigRorCount(byte* M1, short len, short count), где M1 – сверхбольшое целое положительное число (байтовый массив длиною len), count – количество...

251
Работа большими числами

Работа большими числами

Подскажите, пожалуйста как работать с большими числами, такие как, 10^90(можно и меньше) uint64_t не помогает

250