regsub
-
ИМЯ
- regsub — Выполнить подстановки на основе сопоставления с образцом регулярного выражения
- СИНТАКСИС
- ОПИСАНИЕ
-
-all
- -expanded
- -line
- -linestop
- -lineanchor
- -nocase
- -start индекс
- --
- -expanded
Имя
regsub — Выполнить подстановки на основе сопоставления с образцом регулярного выраженияСинтаксис
regsub ?флаги? выражение строка подстрокаЗамены ?имяПеременной?Описание
Эта команда сопоставляет регулярное выражение выражение со строкой строка и либо копирует строка в переменную с именем имяПеременной, либо возвращает строка, если имяПеременной отсутствует. (Сопоставление с регулярным выражением описано на странице справки re_syntax.) Если происходит совпадение, то при копировании строка в имяПеременной (или в результат этой команды, если имяПеременной отсутствует) часть строка, которая соответствовала выражение, заменяется на подстрокаЗамены. Если подстрокаЗамены содержит “&” или “\0”, то она заменяется в подстановке частью строка, которая соответствовала выражение. Если подстрокаЗамены содержит “\n”, где n — цифра от 1 до 9, то она заменяется в подстановке частью строка, которая соответствовала n-ой подвыражению в скобках выражение. Дополнительные обратные слэши могут быть использованы в подстрокаЗамены для предотвращения специальной интерпретации “&”, “\0”, “\n” и обратных слэшей. Использование обратных слэшей в подстрокаЗамены может плохо взаимодействовать с использованием обратных слэшей парсером Tcl, поэтому в общем случае безопаснее заключить подстрокаЗамены в фигурные скобки, если она содержит обратные слэши.Если начальные аргументы regsub начинаются с -, то они обрабатываются как флаги. В настоящее время поддерживаются следующие флаги:
- -all
- Все подстроки в строка, которые соответствуют выражение, находятся и выполняется замена для каждой из этих подстрок. Без этого флага находится и заменяется только первая совпадающая подстрока. Если указан -all, то последовательности “&” и “\n” обрабатываются для каждой замены с использованием информации из соответствующего совпадения.
- -expanded
- Включает использование расширенного синтаксиса регулярных выражений, где пробелы и комментарии игнорируются. Это то же самое, что и указание встроенного варианта (?x) (см. страницу руководства re_syntax).
- -line
- Включает чувствительность к переходу на новую строку при сопоставлении. По умолчанию, перевод строки — обычный символ без специального значения. С этим флагом выражения "[^” скобки и “.” никогда не сопоставляются с переходом на новую строку, “^” соответствует пустой строке после любого перехода на новую строку в дополнение к его обычной функции, и “$” соответствует пустой строке перед любым переходом на новую строку в дополнение к его обычной функции. Этот флаг эквивалентен указанию как -linestop, так и -lineanchor, или встроенному варианту (?n) (см. страницу руководства re_syntax).
- -linestop
- Изменяет поведение выражений "[^” скобки и “.”, чтобы они останавливались на переводах строк. Это то же самое, что указание встроенного варианта (?p) (см. страницу руководства re_syntax).
- -lineanchor
- Изменяет поведение “^” и “$” (”якорей”) так, чтобы они соответствовали началу и концу строки соответственно. Это то же самое, что указание встроенного варианта (?w) (см. страницу руководства re_syntax).
- -nocase
- Символы верхнего регистра в строка будут преобразованы в нижний регистр перед сопоставлением с выражение; однако, замены, заданные подстрокаЗамены, используют исходную неповрежденную форму строка.
- -start индекс
- Указывает смещение индекса символа в строке, с которого следует начать сопоставление регулярного выражения. Значение индекс интерпретируется таким же образом, как аргумент индекс для команды string index. При использовании этого флага “^” не будет соответствовать началу строки, а \A по-прежнему будет соответствовать началу строки в позиции индекс. индекс будет ограничен границами входной строки.
- --
- Помечает конец флагов. Аргумент, следующий за этим, будет обрабатываться как выражение, даже если он начинается с -.
Если имяПеременной предоставлено, команда возвращает количество совпадающих подстрок, которые были найдены и заменены, иначе возвращается строка после замены. См. запись руководства для regexp для получения подробной информации об интерпретации регулярных выражений.
Примеры
Заменить (в строке в переменной строка) каждое вхождение foo, являющегося отдельным словом, на bar:regsub -all {\mfoo\M} $string bar string или (используя синтаксис “базового регулярного выражения”):
regsub -all {(?b)\<foo\>} $string bar string Вставить двойные кавычки вокруг первого вхождения слова interesting, независимо от регистра.
regsub -nocase {\yinteresting\y} $string {"&"} string Преобразовать все символы, не являющиеся ASCII и значимыми для Tcl, в последовательности \u, используя regsub и subst совместно:
# This RE is just a character class for almost everything "bad"
set RE {[][{};#\\\$ \r\t\u0080-\uffff]}
# We will substitute with a fragment of Tcl script in brackets
set substitution {[format \\\\u%04x [scan "\\&" %c]]}
# Now we apply the substitution to get a subst-string that
# will perform the computational parts of the conversion. Note
# that newline is handled specially through string map since
# backslash-newline is a special sequence.
set quoted [subst [string map {\n {\\u000a}} \
[regsub -all $RE $string $substitution]]] См. также
regexp, re_syntax, subst, string
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/regsub.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/regsub.htm