5.3.5 文字列の検索と置換
: newstr = strrep (str, ptn, rep)
: newstr = strrep (cellstr, ptn, rep)
: newstr = strrep (…, "overlaps", val)
文字列str内のパターンptnのすべての出現を 文字列repに置き換え、結果を返します。
オプションの引数は"overlaps"、パターンがstr内のすべての位置で一致するか(true)、完全なパターンの一意の出現のみに一致するか (false) を決定します。デフォルトは true です。
s は文字列のセル配列である場合もあります。その場合、各要素に対して置換が行われ、セル配列が返されます。
例:
strrep ("This is a test string", "is", "&%$")
⇒ "Th&%$ &%$ a test string"
See also: regexprep, strfind.
: newstr = erase (str, ptn)
str内のptnのすべての出現を削除します。
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"
For processing overlaps, see strrep.
See also: strrep, regexprep.
: [s, e, te, m, t, nm, sp] = regexp (str, pat)
: […] = regexp (str, pat, "opt1", …)
正規表現文字列マッチング。
UTF-8 でエンコードされたstrでpatを検索し、一致した位置と部分文字列を返します。一致しない場合は空の値を返します。
一致パターンpat には、次のような標準の正規表現演算子を含めることができます。
.
任意の文字に一致
* + ? {} [#haa2a432]
繰り返し演算子、表現
* [#l56bf9fc]
0回以上一致
+
1回以上一致
?
0回または1回一致
{n}
正確にn回 一致
{n,}
n回以上 一致
{m,n}
m回とn回 の一致
[…] [^…]
リスト演算子。パターンは、 "["との間にリストされている任意の文字と一致します"]"。最初の文字がの場合、"^"パターンは反転され、括弧内にリストされている文字を除くすべての文字と一致します。
以下に定義するエスケープ シーケンスは、リスト演算子内でも使用できます。たとえば、浮動小数点数のテンプレートは次のようになります[-+.\d]+。
() (?:)
グループ化演算子。最初の形式(括弧のみ)でもトークンが作成されます。
|
選択演算子。選択した正規表現の 1 つと一致します。選択肢は、()上記のグループ化演算子で区切られる必要があります。
^ $
アンカー演算子。パターンが文字列の 先頭 ( ^) または末尾 ( ) に出現する必要があります。$
さらに、次のエスケープ文字には特別な意味があります。
\d
任意の数字に一致
\D
数字以外の文字に一致
\s
任意の空白文字に一致
\S
空白以外の文字に一致
\w
任意の単語文字に一致
\W
単語以外の文字に一致
\<
単語の先頭に一致
\>
単語の末尾に一致
\B
単語内で一致
実装に関する注意: MATLABとの互換性のため、pat が一重引用符で定義されている場合でも、pat内のエスケープ シーケンス(例: => 改行) は展開されます。展開を無効にするには、エスケープ シーケンスの前に 2 番目のバックスラッシュを使用するか (例: "\\n")、 関数を使用します。 "\n"regexptranslate
デフォルトの出力はregexp以下の順序になります
s
一致する各部分文字列の開始インデックスe
一致する各部分文字列の終了インデックス
te
pat(…)で 囲まれた一致したトークンの範囲
m
各一致のテキストのセル配列
t
一致した各トークンのテキストのセル配列
nm
一致した名前付きトークンのテキストを含む構造体。名前はフィールド名として使用されます。名前付きトークンは で示されます (?<name>…)。
sp
match によって返されないテキストのセル配列。つまり、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 と文字列の末尾に [1 2]0 個以上の文字があるため、戻ります。'b'
スタック制限に関する注意: パターン検索は再帰関数で行われるため、一致数が多いとプログラムスタックがオーバーフローする可能性があります。たとえば、
regexp (repmat ('a', 1, 1e5), '(a)+')
セグメント違反が発生する可能性があります。代替案として、一致数を減らすパターン検索を構築し(たとえば、セット補数を創造的に使用して)、その後、サイズが縮小された戻り変数をさらに連続したregexp検索で処理することを検討してください。
Octave のregexp実装は、Perl 互換正規表現ライブラリ ( https://www.pcre.org/regexp ) に基づいています。演算子構文 のより包括的なリストについては、「PCRE 構文クイック リファレンスの概要」を参照してください。
See also: regexpi, strfind, regexprep.
: [s, e, te, m, t, nm, sp] = regexpi (str, pat)
: […] = regexpi (str, pat, "opt1", …)
大文字と小文字を区別しない正規表現文字列マッチング。
UTF-8 でエンコードされたstrでpatを検索し、一致した位置と部分文字列を返します。一致しなかった場合は空の値を返します。検索パターンの構文の詳細については、を参照してください。 regexp
See also: regexp.
: outstr = regexprep (string, pat, repstr)
: outstr = regexprep (string, pat, repstr, "opt1", …)
文字列内のパターンpatの出現をrepstrに置き換えます。
パターンは に記載されている正規表現ですregexp。 を参照してくださいregexp。
すべての文字列は UTF-8 でエンコードされている必要があります。
置換文字列には が含まれる場合があり$i、これは一致文字列の i 番目の括弧セットを置き換えます。たとえば、
正規表現 ("Bill Dunn", '(\w+) (\w+)', '$2, $1')
返品"Dunn, Bill"
regexpの オプションに加えて、
‘once’
結果内の patの最初の出現のみを置き換えます。
‘warnings’
このオプションは互換性のために存在しますが、無視されます。
実装に関する注意: MATLABとの互換性のため、pat が一重引用符で定義されている場合でも、pat内のエスケープ シーケンス(例: => 改行) は展開されます。展開を無効にするには、エスケープ シーケンスの前に 2 番目のバックスラッシュを使用するか (例: "\\n")、 関数を使用します。 "\n"regexptranslate
See also: regexp, regexpi, strrep.
: str = regexptranslate (op, s)
正規表現で使用するために文字列を翻訳します。
これには、ワイルドカードの置換または特殊文字のエスケープが含まれる場合があります。
動作はopによって制御され、以下の値を取ることができます。
"wildcard"
ワイルドカード文字.、*、 は、?正規表現に適したワイルドカードに置き換えられます。例:
regexptranslate ("wildcard", "*.m")
⇒ '.*\.m'
"escape"
正規表現で特別な意味を持つ文字$.?[], は、文字どおりに扱われるようにエスケープされます。例:
regexptranslate ("escape", "12.5")
⇒ '12\.5'
See also: regexp, regexpi, regexprep.