Rustで文字列から全角カタカナだけを取り出す(`matches!`マクロの実用例)
はじめに
Rust 1.42.0でstd
に導入された、matches!
というマクロがあります。
先日「Rustで文字列の中から全角カタカナだけを取り出して、新たな文字列を生成する」というコードを書く機会があり、このmatches!
マクロを使用することで簡潔に記述することができました。
なのでmatches!
マクロを使用した実用的なコード例として、ちょっとした小ネタ的に書き留めておきます。
なお、本コードの検証に使用した環境はrustc 1.43.1
およびrustc 1.45.0-nightly
です。
matches!
マクロとは
Rust 1.42.0以上で使用可能1なマクロであり、与えられたパターンにマッチするか否かを返します。
例えば
let hoge = 'a';
let fuga = matches!(hoge, 'a'|'b');
assert!(fuga); // true
のように使用します。
この時matches!(hoge, 'a'|'b')
は下記のように展開されます。
match hoge{
'a'|'b' => true,
_ => false,
}
実際に全角カタカナを取り出してみる
fn main() {
let txt = "Rust(ラスト)で文字列から全角カタカナだけを取り出す"
.chars()
.filter(|&c| matches!(c, 'ァ' ..= 'ー'))
.collect::<String>();
assert_eq!(txt,"カタカナ");
}
これだけ2。
簡単に解説すると、
- 文字列リテラル
&str
をchars
でchar
のイテレータに変換する -
filter
で条件にマッチする要素のみを取り出す - この際に
matches!
を使用し、ァ
~ー
の範囲に含まれるかを条件として指定する - 取り出された要素を
collect
で結合してString
にする
といった感じの操作を行っています。
Author And Source
この問題について(Rustで文字列から全角カタカナだけを取り出す(`matches!`マクロの実用例)), 我々は、より多くの情報をここで見つけました https://qiita.com/h53/items/be4dc5f37ce8ae31c25b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .