朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
正規表現 Swiftでの基本





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        
         */

        








良いやや良い普通やや悪い悪い

投稿日時評価コメント