BRegexp for Squeak

動作確認

ダウンロード

ライセンス

使用方法

使用可能な正規表現パターンは、BREGEXP.DLL に準じます。詳しくはそちらのサイト、 またはその他Perl互換の正規表現を解説したサイトをご参照ください。

■Match

正規表現パターンに最初に一致した部分文字列の範囲をラップしたオブジェクト(BMatchResultオブジェクト)を返します。
また、パターン中の丸括弧に一致した部分文字列を、BRegexp >> hasNext で有無のチェック、 BRegexp >> nextResult で取得することができます。
返り値の BMatchResult オブジェクトに isMatched メッセージを送ると、一致した部分があったか否かを判別することができます。
また、BMatchResult オブジェクトに asString 、もしくは extractSubstringFrom: メッセージを送ると一致した文字列を取得することができます。 ただし、asString では BRegexp オブジェクトのリリース後では正しい文字列を取得することができません。
  • メソッド: BRegexp >> match:from:
  • 第1引数: String : 正規表現パターンの文字列
  • 第2引数: String : 対象文字列
  • 返り値: BMatchResult : 正規表現パターンに一致した部分文字列の範囲をラップしたオブジェクト

| pattern target reg result |
reg := BRegexp default.
pattern := 'm/(\d{2})/'.
target := 'Smalltalk-80'.

^ [result := reg match: pattern from: target.
   result asString]
      ensure: [reg release]
	

===> '80'
					

| pattern target reg result |
reg := BRegexp default.
pattern := '/(\d{1,4})-(\d{1,4})-(\d{4})/'.
target := '03-765-5678'.

result := reg match: pattern from: target.
result isMatched 
    ifTrue: [Transcript cr; show: result asString]
    ifFalse: [Transcript cr; show: 'not matched'].

[[reg hasNext] whileTrue: [
    result := reg nextResult.
    Transcript cr; show: result asString.
]] ensure: [reg release].


Transcript ===> 03-765-5678
Transcript ===> 03
Transcript ===> 765
Transcript ===> 5678
					

■Substitute

正規表現パターンに一致した部分を、パターン内に指定した文字列で置換します。
  • メソッド: BRegexp >> substitute:from:
  • 第1引数: String : 正規表現パターンの文字列
  • 第2引数: String : 対象文字列
  • 返り値: String : 置換後の文字列

| pattern target reg |
reg := BRegexp default.
pattern := 's/(\d\d)-\d{4}-\d{4}/$1-xxxx-xxxx/'.
target := 'Yokohama 045-222-1111  Osaka 06-5555-6666'.

^ [reg substitute: pattern from: target]
      ensure: [reg release].


===> 'Yokohama 045-222-1111  Osaka 06-xxxx-xxxx'
					

■Translate

正規表現パターン通りに、パターン内に指定した文字列で置換します。
  • メソッド: BRegexp >> translate:from:
  • 第1引数: String : 正規表現パターンの文字列
  • 第2引数: String : 対象文字列
  • 返り値: String : 置換後の文字列

| pattern target reg |
reg := BRegexp default.
pattern := 'tr/Ts/tS/'.
target := 'smallTalk'.

^ [reg translate: pattern from: target] 
      ensure: [reg release].


===> 'Smalltalk'
					

■Split

正規表現パターンを区切り文字列とし、対象文字列を分割します。
分割された文字列は、BRegexp >> hasNext で有無のチェック、 BRegexp >> nextResult で部分文字列の範囲をラップしたオブジェクト(BMatchResultオブジェクト)を取得することができます。 返り値の BMatchResult オブジェクトに isMatched メッセージを送ると、一致した部分があったか否かを判別することができます。
また、BMatchResult オブジェクトに asString 、もしくは extractSubstringFrom: メッセージを送ると一致した文字列を取得することができます。
ただし、asString では BRegexp オブジェクトのリリース後では正しい文字列を取得することができません。
  • メソッド: BRegexp >> translate:from:limit:
  • 第1引数: String : 正規表現パターンの文字列
  • 第2引数: String : 対象文字列
  • 第3引数: Integer : 最大分割数(0は制限なし)
  • 返り値: Integer : 分割された数

| pattern target reg |
pattern := '/ *\d{2,3}-\d{3,4}-\d{4} */'.
target := 'Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999'.
reg := BRegexp default.

[
    reg split: pattern from: target limit: 0.
    [reg hasNext] whileTrue: [
        Transcript cr; show: reg nextResult asString.
    ].
] ensure: [reg release].


Transcript ===> Yokohama
Transcript ===> Osaka
Transcript ===> Tokyo
					

備考

■日本語の取り扱いについて

日本語を取り扱う際は、正規表現パターンの修飾子に k を指定する必要があります。
 例: m/(\d{2})/k

■複数プロセスからの利用について

本ライブラリは複数プロセスからの利用を想定したつくりになっていません。 複数プロセスから利用する場合は利用者側で排他処理を行ってしてください。

同梱のファイルについて

本ライブラリは以下のファイルを含んでいます。これらのファイルの著作権は開発者各氏に帰属します。 これら、有用なDLLを使用させていただいた 杉浦まさき氏、Tatsuo Baba氏にお礼申しあげます。

履歴


Back
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送