5.3.5 Searching and Replacing in Strings

Last-modified: 2025-03-21 (金) 20:43:02

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.