プチコン3号&BIGまとめWiki

投稿プログラム : 正規表現ライブラリ

2015年3月15日投稿 / 投稿者 : actorbug / タグ : 投稿プログラム ライブラリ actorstool

概要

正規表現による検索・置換ライブラリ。
EXECで別スロットに読み込むか、プログラム内にコピペして使用する。

関数説明

RXINSTR

文字列内から正規表現を検索。
正規表現を文字列で直接渡せる。

書式RXINSTR("元文字列","正規表現文字列")
引数元文字列元になる文字列
正規表現文字列元文字列の中から検索したい正規表現文字列
戻り見つかった場合はその位置、見つからなかった場合は-1
?RXINSTR("ABC","[BC]")

RXSUBST$

文字列内の正規表現を置換(1回)。
正規表現を文字列で直接渡せる。

書式RXSUBST$("元文字列","正規表現文字列","置換文字列")
引数元文字列元になる文字列
正規表現文字列元文字列の中から検索したい正規表現文字列
置換文字列置き換えられる文字列
戻り置換された文字列
?RXSUBST$("ABC","[BC]","D")

RXSUBSTALL$

文字列内の正規表現を置換(全部)。
正規表現を文字列で直接渡せる。

書式RXSUBSTALL$("元文字列","正規表現文字列","置換文字列")
引数元文字列元になる文字列
正規表現文字列元文字列の中から検索したい正規表現文字列
置換文字列置き換えられる文字列
戻り置換された文字列
?RXSUBSTALL$("ABC","[BC]","D")

REGEX

正規表現オブジェクト生成。

書式REGEX("正規表現文字列",オプション)
引数正規表現文字列正規表現を表す文字列
オプション後述
戻り正規表現オブジェクト(実体は文字列配列)
DIM RX$[0]:RX$=REGEX("[BC]",1)

ROINSTR

文字列内から正規表現を検索。
オプションを指定したい場合や、同じ正規表現で何度も検索する場合は、こちらを使用する。

書式ROINSTR("元文字列",正規表現オブジェクト)
引数元文字列元になる文字列
正規表現オブジェクト元文字列の中から検索したい正規表現オブジェクト
戻り見つかった場合はその位置、見つからなかった場合は-1
?ROINSTR("ABC",REGEX("[BC]",1))

ROSUBST$

文字列内の正規表現を置換(1回)。
オプションを指定したい場合や、同じ正規表現で何度も検索する場合は、こちらを使用する。

書式ROSUBST$("元文字列",正規表現オブジェクト,"置換文字列")
引数元文字列元になる文字列
正規表現オブジェクト元文字列の中から検索したい正規表現オブジェクト
置換文字列置き換えられる文字列
戻り置換された文字列
?ROSUBST$("ABC",REGEX("[BC]",1),"D")

ROSUBSTALL$

文字列内の正規表現を置換(全部)。
オプションを指定したい場合や、同じ正規表現で何度も検索する場合は、こちらを使用する。

書式ROSUBSTALL$("元文字列",正規表現オブジェクト,"置換文字列")
引数元文字列元になる文字列
正規表現オブジェクト元文字列の中から検索したい正規表現オブジェクト
置換文字列置き換えられる文字列
戻り置換された文字列
?ROSUBSTALL$("ABC",REGEX("[BC]",1),"D")

ROMATCH

文字列内の指定位置以降で正規表現を検索。
結果を先頭・末尾位置で返すので、範囲を基準に処理したい場合に使用する。
これ以外のすべての検索・置換関数は、この関数を使って実装している。

書式ROMATCH(開始位置,"元文字列",正規表現オブジェクト)
引数開始位置検索開始する位置
元文字列元になる文字列
正規表現オブジェクト元文字列の中から検索したい正規表現オブジェクト
戻り見つかった文字列の範囲とキャプチャ範囲を表す数値配列R
R[0]が文字列先頭、R[1]が末尾+1、R[2]が最初のキャプチャ先頭、R[3]が末尾+1など
DIM R[0]:R=ROMATCH(0,"ABC",REGEX("B(C)",1))

使用可能なメタ文字

メタ文字説明
\直後のメタ文字を無効化して通常文字として扱う
\nLF、CHR$(10)
\rCR、CHR$(13)
\tTab、CHR$(9)
\xFF16進2桁で文字コード指定
\uFFFF16進4桁で文字コード指定
[]文字クラス、括弧内の文字のいずれかにマッチ、-で範囲指定可能
[^]否定文字クラス、括弧内の文字以外にマッチ、-で範囲指定可能
.任意の1文字(改行を除く)にマッチ、単一行モードなら改行もマッチ
\d数字、[0-9]と同じ
\D非数字、[^0-9]と同じ
\w単語構成文字、[a-zA-Z0-9_]と同じ
\W非単語文字、[^a-zA-Z0-9_]と同じ
\s空白文字、[ \n\r\t]と同じ
\S非空白文字、[^ \n\r\t]と同じ
^文字列の先頭、複数行モードなら改行の次にもマッチ
$文字列の末尾 or 最後が改行ならその前、複数行モードなら改行の前にもマッチ
\A文字列の先頭
\Z文字列の末尾 or 最後が改行ならその前
\z文字列の末尾
\b単語境界
\B単語境界以外
\1~\9後方参照
()グループ化 & キャプチャ
(?:)グループ化(キャプチャなし)
(?=)肯定の先読み
(?!)否定の先読み
(?<=)肯定の戻り読み(通常文字・文字クラス・一部アンカーのみ使用可)
(?<!)否定の戻り読み(通常文字・文字クラス・一部アンカーのみ使用可)
(?>)アトミックなグループ
(?修飾子)モード修飾子(?i)(?-i)など
(?修飾子:)モード修飾子の範囲(?i:...)など
|選択
*直前の式の0回以上の繰り返し、{0,}と同じ
+直前の式の1回以上の繰り返し、{1,}と同じ
?直前の式が0回か1回現れる、{0,1}と同じ
{n}直前の式のn回の繰り返し
{m,}直前の式のm回以上の繰り返し
{m,n}直前の式のm回以上n回以下の繰り返し
*?直前の式の0回以上の繰り返し(最短マッチ)
+?直前の式の1回以上の繰り返し(最短マッチ)
??直前の式が0回か1回現れる(最短マッチ)
{m,}?直前の式のm回以上の繰り返し(最短マッチ)
{m,n}?直前の式のm回以上n回以下の繰り返し(最短マッチ)
*+直前の式の0回以上の繰り返し(強欲)
++直前の式の1回以上の繰り返し(強欲)
?+直前の式が0回か1回現れる(強欲)
{m,}+直前の式のm回以上の繰り返し(強欲)
{m,n}+直前の式のm回以上n回以下の繰り返し(強欲)

使用可能な置換文字列

置換文字列説明
$$1個の$
$&マッチした文字列
$`マッチした文字列の前
$'マッチした文字列の後
$1~$9キャプチャされた文字列

オプション

複数指定する場合は足し合わせる。

オプション説明
RXOPT_IC1大文字小文字を区別しない
RXOPT_SL2単一行モード("."が改行にもマッチする)
RXOPT_ML4複数行モード("^","$"が改行前後にもマッチする)

注意

  • 間違った正規表現を処理した場合の動作は未定義です。

修正履歴

  • 2015/07/23 (木) 21:40:19 大文字小文字を区別しない場合に文字クラスの範囲指定が正常動作しないバグ修正。分岐処理を共有してサイズ縮小。分岐処理で可能な限りON GOTOを使用。高速化。
  • 2015/07/27 (月) 19:42:44 プログラムに変換するのをやめて、正規表現を引数として渡す関数形式に変更。内部構造をDFAからNFAに変更。オプション追加。最短マッチ対応。
  • 2015/07/31 (金) 19:47:23 後方参照対応。文字列置換対応。単語境界対応。\dなどの後にある正規表現が無視されるバグの修正。
  • 2015/08/01 (土) 08:10:33 テスト用プログラムを同梱。Toukou/LEXと同じプロジェクトにまとめる。
  • 2017/01/12 (木) 22:41:23 先頭が単純なパターンの場合に検索を高速化。テストパターン追加。
  • 2018/09/01 (土) 18:40:10 公開関数追加。
  • 2018/10/17 (水) 21:16:10 内部構造を少しシンプルにして少し高速化。
  • 2018/12/02 (日) 14:42:47 前後読み、アトミックなグループ、強欲な量指定子、モード修飾子対応。RXSUBSTALL$などで空文字にマッチするとフリーズするバグと、置換前後で長さが変わると置換範囲を誤るバグ修正。

公開キー

プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。

プチコン3号/BIG 公開キー
QKH3J463

Toukou/LEXと同じプロジェクトにまとめられている。ライブラリ本体がABGREGEX、テスト用プログラムがABGREGEX_TEST。

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 名無しさん : 猿脳には理解できなひ (2015/08/08 (土) 08:55:12)
  • 名無しさん : つサルにもわかる正規表現入門 (2015/08/08 (土) 11:59:25)
  • YOUMe : 便利だー!!!特にJavascript経験してると正規表現は必須ですからね~ (2016/01/29 (金) 17:14:52)
  • YOUMe : 正規表現http://youme.nagoya/ (2016/01/31 (日) 09:55:12)
  • 猫好 : 正規表現開発してたけど先にあったとは... (2018/12/24 (月) 08:33:40)

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 1 人がこのサイトを見ています
  • このページはこれまでに 2044 回、本日は 1 回、昨日は 0 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.161 秒 | このページの最終更新 : 2022/09/20 (火) 12:49:40 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30