Swiftでは、正規表現のクラスはNSRegularExpressionです。
簡単な例ですが、サンプルではa.cにマッチする文字列を検索しています。
「.」は、改行以外の任意の1文字にマッチします。
aBcや、a/cにマッチしますが、abbcやa2345cにはマッチしません。
正規表現ではマッチする文字数も指定出来ます。
検索を行わせるメソッドは、一つだけならfirstMatchで、マッチするところ全部ならmatchesです。
一つのマッチごとに、結果の変数を取り出すのが面倒で、NSRangeを指定しないとダメです。
マッチしたか所の置き換えは正規表現での検索結果を使用します。
そして、検査対象の文字列のメソッドで、replacingOccurrences を使います。
サンプルでは、TEXT01.replacingOccurrences(of: replacing, with: "ZZZ")となっています。
置き換えはマッチしたか所、1カ所ごとに行われ、その置き換えた後の文字列が戻り値となります。
つまりマッチしたところを全部置き換えたいならば、ループで一つずつ正規表現で検索して置き換えて、その置き換えた後の戻り値に対して、また正規表現を使って検索して置き換えて…と繰り返さないといけません。
C#
//検査する文字列 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 */
良い | やや良い | 普通 | やや悪い | 悪い |
---|
投稿日時 | 評価 | コメント |
---|