各種正規表現おける特徴

Contents

POSIX regex.h in C

簡単なサンプルを以下に示す。

	#include <regex.h>
		:
	  int r, cflags = REG_EXTENDED, eflags = 0;
	  regex_t reg;
	  const char p[] = "^$";
	  const char b[] = "\n";
	  r = regcomp(&reg, p, cflags);
	  const size_t n = 8;
	  regmatch_t m[n];
	  r = regexec(&reg, b, n, m, eflags);
		:
	  regfree(&reg);
		:

TRE regex.h in C

簡単なサンプルは「POSIX regex.h in C」と同一で '-ltre -lintl -liconv' のリンクが必要。

PCRE pcreposix.h in C

簡単なサンプルは「POSIX regex.h in C」で当該ヘッダを '#include <pcreposix.h>' に変え、'-lpcreposix -lpcre' のリンク。

FreeBSD regex.h in C

簡単なサンプルは「POSIX regex.h in C」と同一。

in FreeBSD sed

簡単なサンプルを以下に示す。

	$ printf '\n' | grep '^$'

in GNU sed

簡単なサンプルは「in FreeBSD sed」と同一。

in The One True Awk

簡単なサンプルを以下に示す。

	printf '\n' | awk '/^$/'

in GNU Awk

簡単なサンプルは「in The One True Awk」と同一。

in bash/zsh conditional expression

簡単なサンプルを以下に示す。

	printf '\n' | zsh -c 'read b; [[ "$b" =~ '"'^$'"' ]] && echo "$b"' 
	zsh -c 'printf "\n" | read b; [[ "$b" =~ '"'^$'"' ]] && echo "$b"'

PCRE pcre.h in C

簡単なサンプルを以下に示す。

	#include <pcre.h>
		:
	  int r, cflags = PCRE_DOTALL, erroffset, eflags = 0;
	  pcre *reg;
	  const char p[] = "^$";
	  const char b[] = "\n";
	  const char *error;
	  reg = pcre_compile(p, cflags, &error, &erroffset, NULL);
	  const size_t n = 8;
	  int m[n];
	  r = pcre_exec(reg, NULL, b, strlen(b), 0, eflags, m, n);
		:
	  pcre_free(reg);
		:

そして、'-lpcre' のリンクが必要。

Boost regex.hpp in C++

簡単なサンプルを以下に示す。

	#include <boost/regex.hpp>
	using namespace std;
	using namespace boost;
		:
	  string p = "^$";
	  string b = "\n";
	  regex::flag_type cflags = regex_constants::normal;
	  regex reg(p, cflags);
	  smatch m;
	  bool r = regex_search(b, m, reg);
		:

そして、'-lboost_regex' のリンクが必要。

Boost xpressive.hpp in C++

	#include <boost/xpressive/xpressive.hpp>
	using namespace std;
	using namespace boost::xpressive;
		:
	  string p = "^$";
	  string b = "\n";
	  sregex::flag_type cflags = regex_constants::single_line;
	  sregex reg = sregex::compile(p, cflags);
	  smatch m;
	  bool r = regex_search(b, m, reg);
		:

そして、純粋なテンプレートライブラリなので、リンクは不要。

Bibliography

  1. POSIX regex.h
  2. TRE
  3. PCRE pcreposix.h
  4. FreeBSD regex.h
  5. FreeBSD sed
  6. GNU sed
  7. The One True Awk
  8. POSIX Awk
  9. GNU Awk
  10. Boost regex.hpp (日本語訳)
  11. Boost xpressive (日本語訳)
Written by Taiji Yamada <taiji@aihara.co.jp>