開発環境:
・Visual Studio 2015
・C/C++
・コンソールアプリケーション
はじめに
どうも、はじめましての方は初めまして。ぐっちーです。
最近技術テストで正規表現使えるところがあったので、勉強してみました。
実際、技術テストでは使うことができなかったので、これからですね...。
正規表現自体、全くの無知なのでメモ程度で残しておきます。
①正規表現って何?
端的に言えば、「いくつかの文字列を一つの形式で表現するための表現方法」です。
猿でもわかるさんの内容を引用させていただきました。
引用元(https://www.mnet.ne.jp/~nakama/)
例えば...
「今日は肉を食べます!」
と表示したいです。
しかし、魚も食べたいけどな。というときもわざわざ、素直に書きますか?
そうしてしまうと面倒ですよね?その分セリフを用意しないといけません。
そこで「正規表現」の登場です。
「今日は.を食べます!」
「.」を書けば、好きな一文字として扱うことができます。
なので、
「今日は肉を食べます!」
「今日は魚を食べます!」
と両方に対応できます!
このような特殊な文字を使い、文字列の式を作っていくのが正規表現です!
この記事では正規表現のさきっぽまでしか説明しませんが、興味がある方は勉強してみてください。
ネットワーク系ではよく使われるので覚えていて損はないです。
②実際にC++のコードでやってみましょう
インクルード
// 正規表現のインクルードヘッダー
#include <regex>
この「regex」を使用し、正規表現を再現します。
正規表現の条件を作る
// regex reg(条件)
regex reg1(1234); // 「1234」という文字ならばTRUE
regex reg2(R"(\d+)"); // 全体が数列ならTRUE
regex reg3(R"(\D+)"); // 全体が文字ならTRUE
特殊な記号文字だたくさんありますが、これらを使って表現します。
簡単に説明します。
「\d」 ・・・ 数字
「\D」 ・・・ 数字以外(文字)
「+」 ・・・ 直前の文字の1回以上の繰り返し
判定する
String str = "1234"
// regex_math(判定したい文字,条件)
regex_match(str, reg)
regex_match ・・・ 「reg」の条件で一致するとTRUEを返してくれます。
なので、今回は
「reg1 → TRUE」
「reg2 → TRUE」
「reg3 → FALSE」
になります。
②文字と数の分解
文字と数字の判定はこの正規表現でやれば簡単にできます!
とりあえず、分解はGithubに載せておきますので、よかったらみてください。
☆思ったこと
c++では需要とかってどうなんだろ(笑)
でもまた一つ勉強になりました。(´ω`)
参考
https://qiita.com/jnchito/items/893c887fbf19e17d3ff9
http://gimite.net/help/devas-ja/all_regex.html
http://artteknika.hatenablog.com/entry/2016/11/07/132827
https://www.mnet.ne.jp/~nakama/