Rustでの文字列比較、文字列の複数行での記述、正規表現

 Rustでは文字列の比較は==や!=で可能です。


main.rs

――――――――――――――――――――

fn main() {

  let string = "ABC";


  println!("{}", string == "ABC"); //true

  println!("{}", string == "abc"); //false

  println!("{}", string == "DEF"); //false

}

――――――――――――――――――――

 コピペする場合は2文字の全角空白を4文字の半角空白に置換してください。


 Rustは文字列を複数行で記述できます。

 また、Vecにjoinが有ります。


main.rs

――――――――――――――――――――

fn main() {


  println!("\

<html>

  <body>

    <p>日本語</p>

  </body>

</html>\

  ");


  println!("{}", vec![

    "<html>",

    "  <body>",

    "     <p>日本語</p>",

    "  </body>",

    "</html>\n"

  ].join("\n"));

}

――――――――――――――――――――

 コピペする場合は2文字の全角空白を4文字の半角空白に置換してください。


 正規表現はregexという外部ライブラリ クレートを利用します。


 regexのドキュメントはhttps://docs.rs/regex/latest/regex/に有ります。


Cargo.toml

――――――――――――――――――――

[package]

name = "epub_maker"

version = "0.1.0"

edition = "2021"


[dependencies]

regex = "1"

――――――――――――――――――――


 文字列と正規表現の一致、不一致はRegexのis_matchを利用します。


main.rs

――――――――――――――――――――

use regex::Regex;


fn main() {

  let regex = Regex::new("^[A-Z]+$").unwrap();


  let string = "DEF";


  println!("{}", regex.is_match("ABC")); //true

  println!("{}", regex.is_match(string)); //true

  println!("{}", regex.is_match("abc")); //false

  println!("{}", regex.is_match("123")); //false

}

――――――――――――――――――――

 コピペする場合は2文字の全角空白を4文字の半角空白に置換してください。


 ちなみに、Regex::newはResultに包まれたRegexを返すので、Resultのunwrapで内部のRegexを取り出す必要が有ります。

 ただし、Resultのunwrapはエラー(Err)の場合はアプリケーション終了(panic)に成ります。

 エラー処理をしたい場合はResultの、unwrapではなく、unwrap_orなどを利用します。

 エラーメッセージを指定したい場合はResultの、unwrapではなく、expectを利用します。

 エラーを呼び出し元へ移譲したい場合は?演算子を利用します。


 正規表現による部分文字列の抽出はRegexのcaptures_iterを利用します。


main.rs

――――――――――――――――――――

use regex::Regex;


fn main() {

  let regex = Regex::new("([a-zA-Z]+)").unwrap();


  for group in regex.captures_iter("123ABC456DEF789GHI") {

    println!("{}", &group[1]); //ABC\nDEF\nGHI

  }

}

――――――――――――――――――――

 コピペする場合は2文字の全角空白を4文字の半角空白に置換してください。


 正規表現による文字列の置換はRegexのreplace_allを利用します。

 Regexのreplace_allは1回以上置換します。Regexのreplaceは1回だけ置換します。


main.rs

――――――――――――――――――――

use regex::Regex;


fn main() {

  let regex = Regex::new("([a-zA-Z]+)([0-9]+)").unwrap();


  let string = "ABC123";

  let string = regex.replace_all(string, "$2$1").to_string();


  println!("{}", string); //123ABC

}

――――――――――――――――――――

 コピペする場合は2文字の全角空白を4文字の半角空白に置換してください。


 Regexのreplace_allはJavaのStringのreplaceAllに相当します。

 RegexのreplaceはJavaのStringのreplaceFirstに相当します。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る