Замена регулярных выражений Блокнота
Обновлено: 22.11.2024
Notepad++ — отличный легкий текстовый редактор с множеством полезных функций. С помощью Notepad++ вы можете рекурсивно находить и заменять текст в текущем файле или в нескольких файлах в папке. Вы также можете найти и заменить текст с помощью регулярного выражения.
В этом посте есть много примеров поиска и замены Notepad++ и другие полезные советы Notepad++ для различных сценариев.
Notepad++: примеры работы с текстовыми файлами
Удалить путь из имени файла в текстовом файле
Если у вас есть полные пути к файлам в текстовом файле и вы хотите удалить путь (т. е. хотите указать только имя файла), используйте следующий метод поиска и замены:
- Откройте диалоговое окно «Заменить» ( Ctrl + H ) и используйте следующий метод замены:
- В поле "Найти" введите ^.*\\
- Установите режим поиска "Регулярное выражение".
- Оставьте поле «Заменить» пустым.
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
::После::
Удалить имя файла из полного пути в текстовом файле
- Что найти: \\[^\\]+$
- Заменить на: оставить пустым
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
::После::
Совет. Если вам нужна косая черта после пути к папке, вы можете вместо этого использовать следующий поиск по регулярному выражению.
Удалить фиксированное количество символов в начале каждой строки
- Что найти: ^.(.*)$
- Заменить на: $1
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
При этом удаляются первые 11 символов начала каждой строки.
::После::
Удалить символы, превышающие количество символов
- Что найти: ^.\K.*$
- Заменить на: оставить пустым
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
При этом удаляются символы, длина которых превышает 19 символов в каждой строке.
::После::
Удалить текст после определенного символа из каждой строки текстового файла
- Что найти: (.+)\s*-\s*(.+)
- Заменить на: $1
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
- Что найти: -.*
- Заменить на: оставить пустым
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
::После::
- Найти что: из.*
- Заменить на: оставить пустым
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
::После::
Удалить начальный или конечный пробел из каждой строки в текстовом файле
Чтобы удалить конечные и/или начальные пробелы из каждой строки в текстовом файле, используйте меню «Операции с пустыми страницами».
В меню "Правка" Notepad++ выберите "Пустые операции"
- Обрезать конечный пробел
- Обрезать начальный пробел
- Обрезать начальный и конечный пробелы
Удалить пустые строки в текстовом файле
Чтобы удалить пустые/пустые строки в текстовом файле, в меню «Правка» Notepad++ выберите «Операции со строками» и нажмите «Удалить пустые строки».
Чтобы также удалить строки, содержащие пробелы или пробелы, вместо этого выберите параметр «Удалить пустые строки (содержащие пробелы)».
::После::
Удалить пустые строки только в выбранных строках
- Выберите строки, из которых вы хотите удалить пустые строки.
- Откройте диалоговое окно «Заменить» ( Ctrl + H )
- В поле Найти: введите \n\r
- Оставьте поле Заменить на: пустым
- Установите флажок В выделенном
- Выберите расширенный режим поиска.
- Нажмите "Заменить все".
Вот оно! Он удаляет пустые строки только в выбранных строках, а не весь файл.
Удалить текст после n-го вхождения запятой или символа
Предположим, что у вас есть текст в каждой строке, разделенный запятой или любым другим символом. Пример ниже:
Чтобы удалить текст после третьего вхождения запятой, используйте этот оператор поиска и замены:
- Найти что: ^([^,]*,[^,]*,[^,]*),.*$
- Заменить на: $1
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
::После::
Добавить к каждой строке слово или фразу в текстовом файле
Чтобы добавить слово или фразу (префикс) в начало каждой строки текстового файла, используйте следующий оператор поиска и замены:
- Что найти: ^
- Заменить на: какое-то слово или фразу.
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
Описанное выше может быть особенно полезно при создании файла HOSTS для блокировки списка определенных серверов объявлений. Используйте 0.0.0.0 с пробелом в конце в текстовом поле «Заменить на:» и нажмите «Заменить все». Это добавит строку префикса для каждой строки (сервер объявлений) в текстовом файле.
::После::
Добавить к каждой строке слово или фразу в текстовом файле
- Что найти: $
- Заменить на: какое-то слово или фразу.
- Установите режим поиска "Регулярное выражение".
- Снять отметку о совпадении с новой строкой
- Нажмите "Заменить все".
::После::
Удалить повторяющиеся строки в текстовом файле с помощью Notepad++ без сортировки строк
- Что найти: ^(.*?)$\s+?^(?=.*^\1$)
- Заменить на: оставить пустым
- Установите режим поиска "Регулярное выражение".
- *Включить*соответствует новой строке
- Нажмите "Заменить все".
Это удалит все повторяющиеся строки, оставив оригинал. В качестве бонуса он также автоматически удаляет пустые строки.
Важно! Чтобы это работало, необходимо включить совпадения с новой строкой. Кредиты для стемы
Приведенный выше блестящий метод не требует сортировки строк. Повторяющиеся строки могут находиться в любом месте текстового файла, и их порядок не меняется.
::После::
Удалить последовательные повторяющиеся строки
Если повторяющиеся строки расположены непосредственно друг за другом, чтобы удалить последовательные повторяющиеся строки, в меню «Правка» в Notepad++ нажмите «Операции со строками» и выберите «Удалить последовательные повторяющиеся строки».
::После::
Вставить новую строку (возврат каретки) после определенного символа или строки
- Что найти: ,
- Заменить на: \r\n
- Установите расширенный режим поиска.
- Нажмите "Заменить все".
Приведенная выше операция поиска и замены добавляет новую строку везде, где появляется запятая.
::После::
Если вы хотите сохранить запятую после каждой строки, используйте ,\r\n в текстовом поле «Заменить на:».
Пример 2:
- Что найти: GUID:
- Заменить на: \r\n
- Установите расширенный режим поиска.
- Нажмите "Заменить все".
::После::
Одна небольшая просьба: если вам понравился этот пост, поделитесь им?
- Закрепите!
- Поделиться в своем любимом блоге + Facebook, Reddit
- Твитнуть!
сообщить об этом объявлении
Об авторе
8 мыслей о «Советы по Notepad++: поиск и замена и примеры работы с текстом»
Всем привет,
то, что я ищу, и ^£&”6£” google ^*£^£, конечно, не могу найти, это: как СОХРАНИТЬ МОИ ИЗБРАННЫЕ строки поиска и замены (очевидно, регулярное выражение) , у кого-нибудь есть решение для ЭТОГО?
Как мой любимый 50 или около того, по крайней мере, так как я использую notepad++ с регулярными выражениями МНОГО: это работает ОТЛИЧНО 🙂
Я заметил, что есть несколько моментов, можем ли мы сделать это по-другому, чтобы было легче понять?
Пример: «Удалить фиксированное количество символов…», я сделал то же самое, но использовал регулярное выражение:
Что найти: ^.+ (пробел после '+'). Заменить на: я оставляю это поле пустым.
И в «Удалить текст после определенного символа…» я использовал регулярное выражение:
Найти что: -.*
Заменить на: я оставляю это поле пустым. Я получу текст до «-», и если я хочу получить результат текста после «-», я использую: ^.+- (аналогично первому регулярному выражению, вместо того, чтобы после «+» пробел, то здесь стоит «-») . У меня тот же результат, что и у вас.
У меня есть несколько вопросов. Пример 2 в методе «Вставить новую строку (возврат каретки) по определенному..», который вы использовали:
Найти что: GUID: , у меня это не работает. Я пробовал много способов, но это не так. Но я обнаружил, что в вашем примере перед словом «GUID:» есть пробел, поэтому я использовал:
Найти что: я набираю пробел
Заменить на. : \r\n
И это дало тот же результат. До прочтения вашего поста я очень мало знал о Regex, а благодаря этой статье узнал гораздо больше. И это точно поддержит меня.
Я ничего не имел в виду, я просто хотел сказать: существует много регулярных выражений с похожим содержанием, но это зависит от формата каждого документа, каждой строки.
Например, при объединении писем с «:» и мне не удалось использовать регулярное выражение в «Удалить текст после n-го вхождения…». До прочтения вашего поста я очень мало знал о Regex, и благодаря этой статье я узнал намного больше. И это обязательно поддержит меня. Я ничего не имел в виду, я просто хотел сказать: существует много регулярных выражений с похожим содержанием, но это зависит от формата каждого документа, каждой строки.Например, если содержимое строк отформатировано как составные электронные письма как «, и мне не удалось использовать ваше регулярное выражение в «Удалить текст после n-го вхождения…» И если это: ahducnw7e, [email protected], a+ b=c, 1983, я кладу свою любовь
итак, что мне делать, чтобы удалить текст «Я кладу свою любовь» и другие строки (Формат каждой строки совершенно разный)
Приятно познакомиться со всеми в этом содержании.Спасибо добавить за написание этой статьи. Мой английский плохой, надеюсь сочувствую.
В Notepad++, в следующем примере ниже, как заменить ^ на | до E:\ (первые десять вхождений) и сохранить все ^ после E:\ в этом примере?
Пример: John Doe^123-45-6789^1234567^313313313313^444555^11^Doc-Type-Auto^02102021^11^NoteDisclosure^E:\Archive\John Doe^123-45-6789^1234567^ 313313313313^444555^11^Doc-Type-Auto^02102021^11^NoteDisclosure.pdf
Final: John Doe|123-45-6789|1234567|313313313313|444555|11|Doc-Type-Auto|02102021|11|NoteDisclosure|E:\Archive\John Doe^123-45-6789^1234567^ 313313313313^444555^11^Doc-Type-Auto^02102021^11^NoteDisclosure.pdf
Как найти слово в строке и префикс текста (//) в начале этой строки
Я хочу прокомментировать те строки, которые имеют Microsoft.VisualBasic.PowerPacks.LineShape
Общедоступно с событиями _Line_1 как Microsoft.VisualBasic.PowerPacks.LineShape
Как бы вы удалили пробелы из файлов ссылок в формате PDF?
как удалить весь текст после вертикальной черты, например
8308|[email protected]|abcd1990|xxx|yyy|xxxxxx|uu|aaaaa|aaaaaaaaaa
я хочу удалить весь текст после abcd1990
>и еще один, как удалить весь текст до или после вертикальной черты | сохранить текст с помощью char @
ex: 8308|[email protected]:abcd1990|xxx|yyy|xxxxxx|uu|aaaaa|aaaaaaaaaa
я хочу удалить все, оставить только [email protected] :abcd1990< /p>
Эта веб-страница все еще отслеживается?
Я не могу заставить Notepad++ заменить управляющий перевод строки (/r/n) двумя управляющими переводами строки (/r/n/r/n), чтобы вставить новые пустые строки в документе Notepad++.
Удалили ли разработчики Notepad++ такую возможность?
Вот тут и пригодятся регулярные выражения.
В этой статье объясняется, как использовать подстановочные знаки и другие расширенные функции, которые наделяют скромное модальное окно "Найти и заменить" сверхспособностями.
В этой статье используется бесплатная программа Notepad++. Если у вас его нет, вы можете скачать его здесь.
Как переносить абзацы с помощью функции «Найти/Заменить»
Рассмотрите этот пример…
Допустим, у вас есть документ, отформатированный так, как показано на изображении выше. Представьте, что вам нужно обернуть каждый абзац в
теги. Обычный «Найти и заменить» не может этого сделать, но это возможно с «Регулярными выражениями».
Вот как это сделать в Notepad++
В Notepad++ нажмите Ctr+H, чтобы открыть окно «Найти и заменить».
В режиме поиска: выберите "Регулярное выражение" и установите флажок "соответствует новой строке".
тег в начале каждой строки
Найти что: \n..
Заменить на: \n \n
теги в начале каждой строки
Найти что: \n \n
Заменить на:
\n\n
Вы должны увидеть закрытие
теги в конце каждой строки.
Так что же здесь происходит?
‘\n’ ищет разрыв строки.
‘.’ — это подстановочный знак, который соответствует любому одиночному символу.
Поэтому ‘\n..‘ ищет разрыв строки, за которым следуют два символа текста.
Ищете захватывающее фэнтезийное приключение?
Познакомьтесь с вашим новым фандомом.
Другими словами, мы говорим "найти новую строку с содержимым" (не пустую строку), затем заменяем ее двумя новыми строками и "
Чтобы закрыть абзацы, мы говорим "найти 2 разрыва строки подряд" (потому что мы добавили разрывы между каждым абзацем) и заменяем его закрывающим< /p>
Шпаргалка
Вот список полезных выражений, которые вы, возможно, захотите использовать в своих выходках найти и заменить…
\n
разрыв строки
\t
Tab
\d
Цифра в диапазоне от 0 до 9 (число)
\D
Не цифра.Все, что не является числом (включая пробелы).
\l
Буква нижнего регистра.
ПРИМЕЧАНИЕ. Если параметр поиска «Учитывать регистр» отключен, будет использоваться «символ слова». .
\L
Не строчная буква. См. примечание выше.
\u
Заглавная буква.
\U
Не заглавная буква.
\w
Словарный символ, представляющий собой букву, цифру или символ подчеркивания. Похоже, это не зависит от того, что компонент Scintilla считает символами слова. То же, что и [[:word:]].
\W
Не словесный символ.
\s
Символ пробела: количество пробелов, EOL и табуляции.
\S
Не пробел.
\h
Горизонтальный интервал. Соответствует только пробелу, табуляции и переводу строки.
\H
Не горизонтальные пробелы.
\v
Вертикальные пробелы.
\V
Не вертикальные пробелы.
$
Применяется только к символу в конце строки. (например, ‘!$’ заменит все восклицательные знаки в конце строки.)
^
Онлайн применяется к символу в начале строки (например, ‘^
’ заменит любой ‘
’ в начале строки.)
Заменить несколько пробелов на табуляцию
Хотите еще один полезный совет?
Допустим, у вас есть код с большим количеством пробелов. Замена всех этих пробелов вкладками сделает код намного чище.
Допустим, вы хотите заменить каждые 4 пробела одной табуляцией.
<р>2. В поле Заменить на введите: \tНе забудьте установить переключатель Regular Expression (как и раньше).
Если вам нужно другое количество пробелов, просто измените число. Например, если вы хотите заменить 6 пробелов, используйте следующее: ([ ])
Дополнительный совет!
Альтернативные онлайн-инструменты, облегчающие преобразование текста
Я расскажу о каждом…
Проверить различия между двумя наборами текста
На днях я хотел проверить различия между двумя веб-сайтами. У меня была тема WordPress, в которую я внес некоторые изменения, но я не мог точно вспомнить, какие именно.
Замена всех заглавных букв
Я часто получаю текст от клиентов, написанный ЗАГЛАВНЫМИ БУКВАМИ, и часто хочу изменить его на регистр заглавий или предложений, не вводя его повторно.
Разные инструменты редактирования текста с Text Mechanic
Вот несколько инструментов, которые у них есть…
Дайте нам знать, что вы думаете
Просматривая свою аналитику, я заметил, что эта статья стала довольно популярной, но, как ни странно, у нее гораздо меньше комментариев, чем у других наших популярных статей. Я понял, что это может быть потому, что не было приглашения комментировать. Поэтому я решил это исправить.
Регулярные выражения обеспечивают сложный и гибкий поиск/замену с использованием определенного синтаксиса.
Примечание. Многострочные выражения (включая \n, \r и т. д.) пока не поддерживаются. См. Ограничения ниже.
Основные выражения
Шаблон | Значение |
---|---|
. | Соответствует любому символу кроме новой строки (\n). Примечание: это означает "." также будет соответствовать \r, что может вызвать некоторую путаницу, когда вы редактируете файл как с \r, так и с \n. Чтобы сопоставить все символы, включая новые строки, вы можете использовать \s\S. |
(. ) | Это отмечает область для пометки соответствия. Доступ к этим тегам можно получить, используя синтаксис \1 для первого тега, \2 для второго и \3 \4 . \9. Эти теги можно использовать в текущем регулярном выражении или в строке замены при поиске/замене. |
` | ` | tr>
\1, \2 и т. д. | Это относится к помеченной области с первого по девятый (от \1 до \9) при замене. Например, если строка поиска — Fred(9)XXX, а строка замены — Sam\1YYY, то при применении к Fred2XXX будет сгенерировано Sam2YYY. Примечание. Поскольку можно использовать только 9 регионов, вы можете безопасно использовать строку замены \10\2 для создания "текста из региона 1"0"текста из региона 2". |
[ . ] | Это указывает на набор символов, например, [abc] означает любой из символов a, b или c. Вы также можете использовать диапазоны, например [az] для любого символа нижнего регистра. |
[^. ] | Дополнение символов в наборе. Например, [^A-Za-z] означает любой символ, кроме буквенного символа. |
^ | Соответствует началу строки (если только используется внутри набора, см. выше). |
$ | Соответствует концу строки. |
* | Соответствует 0 или более раз. Например, Sa*m соответствует Sm, Sam, Saam, Saaam и т. д. |
+ | Это соответствует 1 или более раз. Например, Sa+m соответствует Sam, Saam, Saaam и т. д. |
? | Это соответствует 0 или 1 вхождению. Например, Sa?m соответствует Sm, Sam. |
Это соответствует ровно n раз. Например, «Сэм» соответствует Сааму. | |
Это соответствует не менее m раз не более n раз (если n исключено, то любое количество раз). Например, «Сэм» соответствует «Саам» или «Сааам». «Сэм» совпадает с «Саа+м» | |
*?, +?, . ? | нежадные совпадения -- соответствует первому допустимому совпадению. Обычно ' ' будет соответствовать всей строке ' content ' -- но ' ' будет соответствовать ' ' и ' '. |
Это помечает область для пометки совпадения. Доступ к этим тегам можно получить, используя синтаксис \1 для первого тега, \2 для второго и \3 \4 . \9. Эти теги можно использовать в текущем регулярном выражении или в строке замены при поиске/замене. |
Теги и группы
Специальные символы
Шаблон | Значение |
---|---|
\s | Соответствие пробелам . примечание: будет соответствовать концу маркера лайка. Используйте [[:blank:]], если вам нужно избежать сопоставления с символом новой строки. |
\S | Сопоставление без пробелов |
\w | Совпадение с символом слова |
\W | Совпадение несловный символ |
\d | Соответствует цифре |
\D | Совпадение с нецифровым символом |
\b | Совпадение с границей слова. '\bW\w+' -- находит слова, начинающиеся с 'W' |
\B | Соответствует границе слова. '\Be\B+' -- находит букву 'e' только тогда, когда она находится в середине слова |
\ | Соответствует началу слова, используя определения слов Scintilla. |
\> | Это соответствует концу слова, используя определение слов Scintilla. | < /tr>
\x | Это позволяет вам использовать символ x, который иначе имел бы особое значение. Например, [ будет интерпретироваться как [, а не как начало набора символов. |
Классы персонажей
Регулярные выражения поддерживают выражения с тегами . Это достигается с помощью ( и ), чтобы окружить текст, который вы хотите пометить, а затем с помощью \1 в строке замены, чтобы заменить первый совпадающий текст, \2 для второго и т. д.
Основной текст | Строка поиска | Заменить строку | Результат |
---|---|---|---|
Привет, меня зовут Фред | меня зовут (.+) | меня зовут не \1 | Привет, меня зовут не Фред |
Быстрая коричневая лиса перепрыгнула жирную ленивую собаку | коричневый (.+) перепрыгнул через (.+)< /td> | коричневый \2 перепрыгнул через \1 | Быстрый коричневый толстяк перепрыгнул через лису ленивого пса |
Поддержка регулярных выражений в PN2 в настоящее время ограничена, поддерживаемые шаблоны и синтаксис являются очень небольшим подмножеством мощных выражений, поддерживаемых perl. Самое большое ограничение заключается в том, что регулярные выражения совпадают только в пределах одной строки, вы не можете использовать многострочные регулярные выражения. В качестве обходного пути к отсутствию многострочного поиска вы можете вместо этого использовать BackslashExpressions.
Есть планы улучшить эту поддержку с помощью библиотеки PCRE (используемой в другом месте в PN2) для обеспечения поиска документов. Если вы заинтересованы в помощи, сообщите о себе в список рассылки pn-discuss: Списки рассылки PN.
Описание | Поиск | Заменить |
---|---|---|
Удалить ведущие пробелы в каждой строке | ^[ \t]* | |
Заменить getVariable() на setVariable() | get(\w+) \(\) | set\1() |
Описание | Поиск | Заменить |
---|---|---|
Разбить аргументы URL | .*?[?&](\w+)=([\w-+%.:]+)(.*)$ | \1: \2\n\3 |
Поместите курсор в начало строки. Нажмите кнопку «НайтиNext», а затем несколько раз нажмите кнопку «Заменить». Обратите внимание, что нажатие кнопки «заменить все» не сработает, так как мы хотим выполнить поиск по результатам последней замены.
Здравствуйте, я пытаюсь очистить очень старый код и попробовать использовать RegEx в Notepad++.
У меня есть набор переменных:
A: $somearr_name[some_key]
B: $somearr_name['some_key']
C: $somearr_name[$some_key]
D: '$somearr_name[some_key]' р>
цель состоит в том, чтобы иметь только:
$somearr_name[‘some_key’] после подстановки.
somearr_name и some_key должны остаться нетронутыми
$somearr_name[$some_key] © и ‘$somearr_name[some_key]’ (D) вообще не следует трогать.
Мое выражение для поиска совпадений:
… но я понятия не имею, как справиться с заменой…
не совсем уверен, что понимаю, чего вы пытаетесь достичь, но как насчет
найти что: (?
заменить на: \1'\2'
Откройте окно замены (ctrl+h).
Найти поле: (\$\w+)[(\w+)](?!')
Заменить полем: \1['\2']
Режим поиска: Регулярное выражение
Переход: отмечен флажком
Нажмите кнопку "Заменить все".
Ооооо… выглядит красиво! Я попробую еще немного и дам какой-нибудь ответ.
Не знал о \1… из-за моего плохого английского и знания терминологии в данном случае: Как называется такая замена.
Как называется такая замена
Хммм, точно не уверен… может замена захваченным номером группы ? Поищите его и посмотрите, есть ли у него имя получше.
Как называется такая замена.
В документации Boost это называется «обратной ссылкой». В замещающей строке эквивалент на основе $ называется «последовательностью-заполнителем».
Йенс, добро пожаловать в сообщество N++!
Кажется, я понимаю, что ваша цель — получить синтаксис B), оставив синтаксисы C) и D нетронутыми. Другими словами, вы просто хотели бы, чтобы любой синтаксис A) был заменен синтаксисом B, не так ли?
Таким образом, мы должны взять любой синтаксис A, в частности, и изменить его на синтаксис B
Сравнивая все синтаксис, оказывается, что только синтаксис A не содержит одиночных кавычек, ' или символа $ в квадратных скобках. Мы можем добавить правило, что имя переменной перед квадратными скобками тоже не должно содержать одинарных кавычек!
С другой стороны, часть перед квадратными скобками не меняется при переходе от синтаксиса A к синтаксису B. Итак, нам просто нужно сохранить текст в квадратных скобках и заключить его в одинарные кавычки во время замены!
Итак, возможное регулярное выражение:
ЗАМЕНИТЬ '\1'
Примечания:
В начале регулярного выражения \s выполняется поиск символа пробела общего типа (символы пробела или табуляции, символы разрыва строки \n или \r и некоторые другие...)
Затем часть \$ ищет буквенный символ регулярного выражения $
Теперь синтаксис [^'\r\n]+[ выполняет поиск в наибольшем ненулевом диапазоне последовательных символов, отличных от одинарных кавычек и символов разрыва строки, за которыми следует буквальная открывающая квадратная скобка
Специальный синтаксис \K отменяет любое совпадение и сбрасывает рабочую позицию механизма регулярных выражений
Таким образом, часть ([^'$\r\n]+) теперь пытается сопоставить наибольший ненулевой диапазон последовательных символов, отличных от одинарной кавычки, доллара и символов разрыва строки, хранится как группа 1 из-за внешних скобок
Но ТОЛЬКО ЕСЛИ прогноз (?=]) верен, т. е. если за этим диапазоном следует завершающая квадратная скобка !
Наконец, взамен синтаксис \1 представляет все содержимое группы 1, заключенное в одинарные кавычки
Читайте также: