正規表現
小説を聞こうアプリのユーザ辞書の仕様
- ユーザ辞書は以下の優先度でソートされ、順番に置換処理が実行されます。
- ソート順: 適用対象(bookIds, urlPrefix)の降順 > 入力の文字数の降順 > 入力の昇順 > 正規表現使用の有無 > MULTILINEの有無
- 正規表現ライブラリとして、Kotlin/Nativeの標準ライブラリを使用します。
- 正規表現の構文のリファレンスについては、Pattern (opens in a new tab)を参照してください。
正規表現の例
次の表では、正規表現の文字、演算子、パターンの例をいくつか示します。
目的 | 正規表現 | 例 |
---|---|---|
(改行を除く) 任意の 1 文字に一致します。 | . | a.o は、"around" の中の "aro" および "about" の中の "abo" とは一致しますが、"across" の中の "acro" とは一致しません |
直前の正規表現の 0 回以上の繰り返しに一致します (一致する文字列の長さを最大限にします)。 | * | a*r は、"rack" の中の "r"、"ark" の中の "ar"、"aardvark" の中の "aar" に一致します。 |
0 回以上の任意の文字に一致します。 | .* | c.*e は、"racket" の中の "cke"、"comment" の中の "comme"、"code" の中の "code" に一致します。 |
直前の正規表現の 1 回以上の繰り返しに一致します (一致する文字列の長さを最大限にします)。 | + | e+d は、"feeder" の中の "eed"、"faded" の中の "ed" に一致します |
任意の文字と 1 回以上、一致します。 | .+ | e.+e は、"feeder" の中の "eede" とは一致しますが、"feed" には一致しません |
直前の正規表現の 0 回以上の繰り返しに一致します (一致する文字列の長さを最小限にします)。 | *? | \w*?d は、"faded" の中の "fad" と "ed" とは一致しますが、最短一致のため "faded" の文字全体とは一致しません |
直前の正規表現の 1 回以上の繰り返しを検索します (一致する文字列の長さを最小限にします)。 | +? | e\w+? は、"asleep" の中の "ee"、"faded" の中の "ed" とは一致しますが、"fade" には一致しません |
一致文字列を、行頭または文字列の先頭に固定します | ^ | ^car は、単語 "car" が行の先頭に登場する場合のみ、その単語と一致します |
一致文字列を、行末に固定します | \r?$ | car\r?$ は、"car" が行末に登場する場合のみ、その単語と一致します |
一致文字列を、ファイルの末尾に固定します。 | $ | car$ は、"car" がファイルの末尾に登場する場合のみ、その単語と一致します |
セット内の任意の 1 文字と一致します。 | [abc] | b[abc] は、"ba"、"bb"、および "bc" と一致します |
範囲内の任意の文字に一致します | [a-f] | be[n-t] は、"between" の中の "bet"、"beneath" の中の "ben"、"beside" の中の "bes" とは一致しますが、"below" には一致しません |
かっこで囲まれた表現を 1 つのまとまりとして扱い、その表現に対して暗黙的に番号を付けます。 | () | ([a-z])X\1 は、"aXa" および "bXb" に一致しますが、"aXb" には一致しません。 "\1"は、最初の表現グループ "[a-z]" を指します。 詳しくは、「キャプチャ グループと置換パターン」をご覧ください。 |
一致を否定します。 | (?!abc) | real(?!ity) は、"realty" と "really" の "real" には一致しますが、"reality" の場合は一致しません。また、"realityreal" の (1 つ目の "real" ではなく) 2 つ目の "real" も一致します。 |
指定された一連の文字の中に含まれていない任意の文字と一致します。 | [^abc] | be[^n-t] は、"before" の中の "bef"、"behind" の中の "beh"、"below" の中の "bel" とは一致しますが、"beneath" とは一致しません |
記号の前にある表現、または後にある表現のいずれかに一致します | | | (sponge|mud) bath は "sponge bath" および "mud bath" と一致します |
円記号の後の文字をエスケープ処理します | \ | \^ は、文字 ^ と一致します |
直前の文字またはグループが登場する回数を指定します。 | {n}、ここで "n" は登場する回数です | x(ab){2}x は、"xababx" と一致します x(ab){2,3}x は "xababx" および "xabababx" とは一致しますが、"xababababx" とは一致しません |
Unicode カテゴリに含まれるテキスト (opens in a new tab)に一致します。 Unicode 文字クラスについて詳しくは、Unicode Standard 15.0 の文字プロパティ (opens in a new tab)を参照してください。 | \p{X}、ここで "X" は Unicode 番号です。 | \p{Lu} は、"Thomas Doe" の中の "T" および "D" と一致します |
単語に使用される任意の文字 (opens in a new tab)と一致します | \w | a\wd は、"add" および "a1d" とは一致しますが、"a d" とは一致しません |
任意の空白文字と一致します | \s | Public\sInterface は、語句 "Public Interface" と一致します |
任意の 10 進数字と一致します | \d | \d は、"wd40" の中の "4" と "0" に一致します |
キャプチャグループと置換パターン
キャプチャグループは、正規表現の部分式を示し、入力文字列の部分文字列をキャプチャします。 キャプチャされたグループは正規表現自体の内部 (たとえば、繰り返される単語を探す)、または置換パターン内で使用できます。
番号付きキャプチャグループを作成するには、正規表現パターンにおいて部分式をかっこで囲みます。 キャプチャには、正規表現の左かっこの位置に基づいて、左から右に自動的に番号が付けられます。
設定例 | 意味 | 結果 |
---|---|---|
入力: 労([るっ]) 置換: いたわ$1 | [るっ]をキャプチャし、"いたわ(キャプチャされた部分文字列)"に置換する | 労る → いたわる 労って → いたわって 労働 → 労働 |
MULTILINE
MULTILINE フラグを有効にすると、メタ文字である^
と$
が文字列の先頭と末尾以外の位置にある行末記号にもマッチするようになります。
それ以外にも、以下のような違いがあります。
MULTILINE 無効 | MULTILINE 有効 | |
---|---|---|
適用対象 | 各行 | エピソードの本文全体 |
適用タイミング | 各行を読み上げる直前 | エピソードの本文を取得した後 |
MULTILINE を使って後書きを削除する
MULTILINE フラグを有効にすると、本文の中に後書きが含まれている場合に、後書き部分を削除することができます。
例えば、本文が以下のようになっているとします。
本文
=========
後書き
以下の設定をユーザ辞書に追加すると、=== 以降の文字を削除することができます。
設定例 | 意味 | 結果 |
---|---|---|
入力: (?s)===.* 置換: (未入力) MULTILINE: 有効 | ===以降の文字を削除します。(?s) は正規表現内で使用されるフラグで、Kotlin の正規表現エンジンにおいて、DOTALL モードとして知られています。通常、 . は改行文字を除くすべての文字にマッチしますが、(?s) フラグを有効にすると、. は改行文字も含むすべての文字にマッチします。これにより、複数行のテキストでの正規表現検索や置換が容易になります。 | 本文 |
否定先読み
設定例 | 意味 | 結果 |
---|---|---|
入力: 真面(?!目) 置換: まとも | "真面"ではじまり"目"で終わらない文字を置換 | 真面 → まとも 真面目 → 真面目 |
否定後読み
設定例 | 意味 | 結果 |
---|---|---|
入力: (?<!機)嫌そ 置換: いやそ | "機"ではじまらず、"嫌そ"で終わる文字を置換 | 嫌そう → いやそう ご機嫌そう → ご機嫌そう |
入力: (?<![\u4E00-\u9FFF々])帰し 置換: かえし | 漢字ではじまらず、"帰し"で終わる文字を置換 | 帰して → かえして 復帰して → 復帰して |