Swiftでは、正規表現のクラスはNSRegularExpressionです。
簡単な例ですが、サンプルではa.cにマッチする文字列を検索しています。
「.」は、改行以外の任意の1文字にマッチします。
aBcや、a/cにマッチしますが、abbcやa2345cにはマッチしません。
正規表現ではマッチする文字数も指定出来ます。
検索を行わせるメソッドは、一つだけならfirstMatchで、マッチするところ全部ならmatchesです。
一つのマッチごとに、結果の変数を取り出すのが面倒で、NSRangeを指定しないとダメです。
マッチしたか所の置き換えは正規表現での検索結果を使用します。
そして、検査対象の文字列のメソッドで、replacingOccurrences を使います。
サンプルでは、TEXT01.replacingOccurrences(of: replacing, with: "ZZZ")となっています。
置き換えはマッチしたか所、1カ所ごとに行われ、その置き換えた後の文字列が戻り値となります。
つまりマッチしたところを全部置き換えたいならば、ループで一つずつ正規表現で検索して置き換えて、その置き換えた後の戻り値に対して、また正規表現を使って検索して置き換えて…と繰り返さないといけません。
正規表現でのエスケープ処理の例
Swift
//検査する文字列
let TEXT01 = "aBcDeFgabcdEfG"
//表示する結果を入れる変数
var result = ""
var replacing = ""
//今回使う正規表現
let r01 = try! NSRegularExpression(pattern: "a.c", options: [])
//マッチした場所を全部取り出すmatchesメソッド
let m01 = r01.matches(in: TEXT01, options: [], range: NSMakeRange(0, (TEXT01 as NSString).length))
//マッチした箇所でループさせる
for m in m01 {
//抜き出す場所の指定
let r001 = m.range(at: 0)
//マッチした文字列を取り出して、結果を表示させる変数に代入
result += "m01:" + (TEXT01 as NSString).substring(with: r001) + "\n"
}
//マッチした箇所でループさせる
for m in m01 {
//抜き出す場所の指定
let r001 = m.range(at: 0)
//マッチした文字列を抜き出している
replacing = (TEXT01 as NSString).substring(with: r001)
//置き換えの処理。マッチした文字列をZZZに置き換えている
let afterTEXT01 = TEXT01.replacingOccurrences(of: replacing, with: "ZZZ")
//置き換えた後の文字列を結果に表示させる変数に代入
result += "m02:" + afterTEXT01 + "\n"
}
self.txtDisplay.stringValue = result
/*
結果
m01:aBc
m01:abc
m02:ZZZDeFgabcdEfG
m02:aBcDeFgZZZdEfG
*/
| 良い | やや良い | 普通 | やや悪い | 悪い |
|---|
| 投稿日時 | 評価 | コメント |
|---|