5.3.5 Поиск и замена в строках
-
:
newstr =strrep(str, ptn, rep) -
:
newstr =strrep(cellstr, ptn, rep) -
:
newstr =strrep(…, "overlaps", val) -
Заменить все вхождения шаблона ptn в строке str строкой rep и вернуть результат.
Необязательный аргумент
"overlaps"определяет, может ли шаблон совпадать в любой позиции str (true) или только при уникальных вхождениях полного шаблона (false). По умолчанию используется true.s также может быть массивом ячеек строк; в этом случае замена выполняется для каждого элемента и возвращается массив ячеек.
Пример:
strrep ("This is a test string", "is", "&%$") ⇒ "Th&%$ &%$ a test string"
-
:
newstr =erase(str, ptn) -
Удалить все вхождения ptn в str.
str и ptn могут быть обычными строками, массивами ячеек строк или символьными массивами.
Примеры
## string, single pattern erase ("Hello World!", " World") ⇒ "Hello!" ## cellstr, single pattern erase ({"Hello", "World!"}, "World") ⇒ {"Hello", "!"} ## string, multiple patterns erase ("The Octave interpreter is fabulous", ... {"interpreter ", "The "}) ⇒ "Octave is fabulous" ## cellstr, multiple patterns erase ({"The ", "Octave interpreter ", "is fabulous"}, ... {"interpreter ", "The "}) ⇒ {"", "Octave ", "is fabulous"}Примечание по программированию:
eraseудаляет первое вхождение шаблона в строке, если вхождения перекрываются. Например:erase ("abababa", "aba") ⇒ "b"Об обработке перекрывающихся вхождений см.
strrep.
-
:
[s, e, te, m, t, nm, sp] =regexp(str, pat) -
:
[…] =regexp(str, pat, "opt1", …) -
Сопоставление строк с помощью регулярных выражений.
Выполнить поиск pat в строке str в кодировке UTF-8 и вернуть позиции и подстроки всех совпадений либо пустые значения, если совпадений нет.
Сопоставляемый шаблон pat может содержать любые стандартные операторы регулярных выражений, в том числе:
.-
Сопоставление с любым символом
* + ? {}-
Операторы повторения, обозначающие
*-
Сопоставление ноль или более раз
+-
Сопоставление один или более раз
?-
Сопоставление ноль или один раз
{n}-
Сопоставление ровно n раз
{n,}-
Сопоставление n или более раз
{m,n}Сопоставление от m до n раз
[…] [^…]-
Операторы списков. Шаблон будет соответствовать любому символу из перечисленных между
"["и"]". Если первый символ —"^", шаблон инвертируется, и совпадение будет найдено для любого символа, кроме перечисленных в скобках.В операторах списков также можно использовать определённые ниже escape-последовательности. Например, шаблон для числа с плавающей точкой может выглядеть так:
[-+.\d]+. () (?:)-
Оператор группировки. Первая форма, содержащая только круглые скобки, также создаёт токен.
|-
Оператор чередования. Сопоставление с одним из нескольких регулярных выражений. Альтернативы должны быть ограничены указанным выше оператором группировки
(). ^ $Операторы привязки. Требуют, чтобы шаблон находился в начале (
^) или в конце ($) строки.
Кроме того, следующие экранированные символы имеют специальное значение.
\d-
Сопоставление с любой цифрой
\D-
Сопоставление с любым символом, не являющимся цифрой
\s-
Сопоставление с любым пробельным символом
\S-
Сопоставление с любым непробельным символом
\w-
Сопоставление с любым символом слова
\W-
Сопоставление с любым символом, не являющимся символом слова
\<-
Сопоставление с началом слова
\>-
Сопоставление с концом слова
\BСопоставление внутри слова
Примечание по реализации: для совместимости с MATLAB escape-последовательности в pat (например,
"\n"=> символ новой строки) раскрываются, даже если pat задан с помощью одинарных кавычек. Чтобы отключить раскрытие, используйте вторую обратную косую черту перед escape-последовательностью (например, "\\n") или функциюregexptranslate.Выходные значения
regexpпо умолчанию соответствуют следующему порядку:- s
-
Начальные индексы каждой совпавшей подстроки
- e
-
Конечные индексы каждой совпавшей подстроки
- te
-
Диапазоны каждого совпавшего токена, заключённого в
(…)в pat - m
-
Массив ячеек с текстом каждого совпадения
- t
-
Массив ячеек с текстом каждого совпавшего токена
- nm
-
Структура, содержащая текст каждого совпавшего именованного токена; имя токена используется в качестве имени поля. Именованный токен обозначается как
(?<name>…). - sp
Массив ячеек с текстом, не возвращённым в результатах сопоставления, то есть с тем, что останется, если разделить строку по pat.
Конкретные выходные аргументы и их порядок можно выбрать с помощью дополнительных аргументов opt. Это строки; соответствие между выходными аргументами и необязательными аргументами показано ниже.
'start's 'end'e 'tokenExtents'te 'match'm 'tokens't 'names'nm 'split'sp Дополнительные аргументы перечислены ниже.
- ‘once’
-
Вернуть только первое вхождение шаблона.
- ‘matchcase’
-
Учитывать регистр при сопоставлении. (по умолчанию)
Вместо этого можно использовать в шаблоне (?-i).
- ‘ignorecase’
-
Не учитывать регистр при сопоставлении шаблона со строкой.
Вместо этого можно использовать в шаблоне (?i).
- ‘stringanchors’
-
Сопоставлять символы привязки с началом и концом строки. (по умолчанию)
Вместо этого можно использовать в шаблоне (?-m).
- ‘lineanchors’
-
Сопоставлять символы привязки с началом и концом строки.
Вместо этого можно использовать в шаблоне (?m).
- ‘dotall’
-
Шаблон
.соответствует всем символам, включая символ новой строки. (по умолчанию)Вместо этого можно использовать в шаблоне (?s).
- ‘dotexceptnewline’
-
Шаблон
.соответствует всем символам, кроме символа новой строки.Вместо этого можно использовать в шаблоне (?-s).
- ‘literalspacing’
-
Все символы шаблона, включая пробельные, имеют значение и участвуют в сопоставлении. (по умолчанию)
Вместо этого можно использовать в шаблоне (?-x).
- ‘freespacing’
-
Шаблон может содержать произвольные пробельные символы, а также комментарии, начинающиеся с символа ‘#’.
Вместо этого можно использовать в шаблоне (?x).
- ‘noemptymatch’
-
Совпадения нулевой длины не возвращаются. (по умолчанию)
- ‘emptymatch’
-
Возвращать совпадения нулевой длины.
regexp ('a', 'b*', 'emptymatch')возвращает[1 2], поскольку в позициях 1 и в конце строки находятся ноль или более символов'b'.
Примечание об ограничении стека: поиск по шаблону выполняется рекурсивной функцией, которая при большом числе совпадений может переполнить стек программы. Например,
regexp (repmat ('a', 1, 1e5), '(a)+')может привести к ошибке сегментации. В качестве альтернативы можно строить поисковые шаблоны, уменьшающие число совпадений (например, творчески используя дополнение множества), а затем обрабатывать возвращаемые переменные (теперь меньшего размера) последующими поисками
regexp.Реализация
regexpв Octave основана на библиотеке Perl Compatible Regular Expressions (https://www.pcre.org/). Более полный список синтаксиса операторовregexpсм. в документе «Краткий справочник по синтаксису PCRE».
-
:
[s, e, te, m, t, nm, sp] =regexpi(str, pat) -
:
[…] =regexpi(str, pat, "opt1", …) -
Сопоставление строк с помощью регулярных выражений без учёта регистра.
Выполнить поиск pat в строке str в кодировке UTF-8 и вернуть позиции и подстроки всех совпадений либо пустые значения, если совпадений нет. Подробное описание синтаксиса шаблона поиска см. в разделе
regexp.См. также: regexp.
-
:
outstr =regexprep(string, pat, repstr) -
:
outstr =regexprep(string, pat, repstr, "opt1", …) -
Заменить вхождения шаблона pat в string строкой repstr.
Шаблон представляет собой регулярное выражение, описанное для
regexp. См.regexp.Все строки должны быть закодированы в UTF-8.
Строка замены может содержать
$i, который подставляет i-ю группу круглых скобок из строки совпадения. Например,regexprep ("Bill Dunn", '(\w+) (\w+)', '$2, $1')возвращает
"Dunn, Bill"Дополнительные параметры, помимо параметров
regexp:- ‘once’
-
Заменить только первое вхождение pat в результате.
- ‘warnings’
-
Этот параметр присутствует для совместимости, но игнорируется.
Примечание по реализации: для совместимости с MATLAB escape-последовательности в pat (например,
"\n"=> символ новой строки) раскрываются, даже если pat задан с помощью одинарных кавычек. Чтобы отключить раскрытие, используйте вторую обратную косую черту перед escape-последовательностью (например, "\\n") или функциюregexptranslate.
-
:
str =regexptranslate(op, s) -
Преобразовать строку для использования в регулярном выражении.
Преобразование может включать замену подстановочных символов или экранирование специальных символов.
Поведение определяется аргументом op, который может принимать следующие значения:
"wildcard"-
Подстановочные символы
.,*и?заменяются подстановочными символами, подходящими для регулярного выражения. Например:regexptranslate ("wildcard", "*.m") ⇒ '.*\.m' "escape"-
Символы
$.?[], имеющие специальное значение в регулярных выражениях, экранируются, чтобы обрабатываться буквально. Например:regexptranslate ("escape", "12.5") ⇒ '12\.5'
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Searching-and-Replacing-in-Strings.html