Что означает $ 1, $ 2 и т. Д. В регулярных выражениях? - PullRequest
35 голосов
/ 12 мая 2011

Снова и снова я вижу $ 1 и $ 2, используемые в коде. Что это значит? Можете ли вы включить примеры?

Ответы [ 2 ]

36 голосов
/ 12 мая 2011

Когда вы создаете регулярное выражение, у вас есть опция захвата частей совпадения и сохранения их в качестве заполнителей. Они пронумерованы, начиная с $1.

Например:

/A(\d+)B(\d+)C/

Это будет захватывать из A90B3C значения 90 и 3. Если вам нужно сгруппировать вещи, но не хотите их захватывать, используйте версию (?:...) вместо (...).

Числа начинаются слева направо в том порядке, в котором скобки открыты. Это значит:

/A((\d+)B)(\d+)C/

Сопоставление с одной и той же строкой приведет к захвату 90B, 90 и 3.

7 голосов
/ 12 мая 2011

Это ESP. полезно для Синтаксис замещающей строки (т.е. форматирование строк). Подходит для случаев / складываний дел для поиска и замены. Чтобы сослаться на перехват, используйте $ n, где n - номер регистра перехвата. Использование $ 0 означает полное совпадение. Пример: Find: (<a.*?>)(.*?)(</a>) Replace: $1\u$2\e$3

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