LoginSignup
0
1

More than 5 years have passed since last update.

【開発メモ~C++で正規表現を勉強してみた。~】

Posted at

開発環境: 

・Visual Studio 2015
・C/C++
・コンソールアプリケーション

はじめに

 どうも、はじめましての方は初めまして。ぐっちーです。
最近技術テストで正規表現使えるところがあったので、勉強してみました。
実際、技術テストでは使うことができなかったので、これからですね...。
正規表現自体、全くの無知なのでメモ程度で残しておきます。

①正規表現って何?

 端的に言えば、「いくつかの文字列を一つの形式で表現するための表現方法」です。

猿でもわかるさんの内容を引用させていただきました。
引用元(https://www.mnet.ne.jp/~nakama/)

例えば...

「今日はを食べます!」

と表示したいです。

しかし、も食べたいけどな。というときもわざわざ、素直に書きますか?
そうしてしまうと面倒ですよね?その分セリフを用意しないといけません。

そこで「正規表現」の登場です。

「今日は.を食べます!」

.」を書けば、好きな一文字として扱うことができます。
なので、
「今日はを食べます!」
「今日はを食べます!」
と両方に対応できます!

このような特殊な文字を使い、文字列の式を作っていくのが正規表現です!

この記事では正規表現のさきっぽまでしか説明しませんが、興味がある方は勉強してみてください。
ネットワーク系ではよく使われるので覚えていて損はないです。

②実際にC++のコードでやってみましょう

インクルード

main.cpp
// 正規表現のインクルードヘッダー
#include <regex>

この「regex」を使用し、正規表現を再現します。

正規表現の条件を作る

main.cpp
// regex reg(条件)
regex reg1(1234);      // 「1234」という文字ならばTRUE
regex reg2(R"(\d+)"); // 全体が数列ならTRUE
regex reg3(R"(\D+)");  // 全体が文字ならTRUE

特殊な記号文字だたくさんありますが、これらを使って表現します。
簡単に説明します。
「\d」 ・・・ 数字
「\D」 ・・・ 数字以外(文字)
「+」 ・・・ 直前の文字の1回以上の繰り返し

判定する

main.cpp
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/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1