正規表現とは、「数字が3桁続く」「行の先頭が#」のような文字の並び方のルールを、記号で短く書き表す方法です。入力チェック、ログからの抽出、エディタでの一括置換など、言語やツールを問わず使われます。

ただし、正規表現は処理系(言語やコマンド)によって書き方が少しずつ違います。同じ \d が、grep では数字ではなく「d」という文字に一致したり、Python では全角数字にも一致したりします。この記事では、記号の一覧表に加えて、JavaScript(Node.js 22)・Python 3.14・Java 21・GNU grep 3.11(BRE/ERE/-P)・GNU sed 4.9 で実際に同じパターンを実行し、違いを比較表にまとめました。コピーして使える実用パターンは、一致する例・しない例の実行結果つきです。

正規表現の早見表(記号一覧)

分類 記号 意味 例 → 一致する文字列
任意の1文字 . 改行以外の1文字 a.c → abc, a-c
文字クラス [abc] a・b・c のどれか1文字 [aeiou] → a
[a-z] [0-9] 範囲の中の1文字 [0-9]{3} → 123
[^abc] a・b・c 以外の1文字 [^0-9] → x
省略記法 \d / \D 数字 / 数字以外 \d+ → 2026
\w / \W 英数字と _ / それ以外 \w+ → user_01
\s / \S 空白(スペース・タブ・改行など)/ それ以外 a\sb → a b
量指定子(貪欲) * 0回以上 ab* → a, abbb
+ 1回以上 ab+ → ab, abbb
? 0回か1回 colou?r → color, colour
{n} {n,} {n,m} n回 / n回以上 / n〜m回 \d{2,4} → 12, 2026
量指定子(最短) *? +? ?? {n,m}? できるだけ短く一致 <.+?> → <a>
アンカー ^ / $ 先頭 / 末尾(m フラグで各行の先頭・末尾) ^\d+$ → 123
\b / \B 単語の境界 / 境界以外 \bcat\b → cat(concat は除く)
選択 A|B A または B jpe?g|png → png
グループ (...) キャプチャ(取り出せる) (\d+)-(\d+)
(?:...) 非キャプチャ(まとめるだけ) (?:ab)+ → abab
(?<name>...) 名前付きキャプチャ(Python は (?P<name>...)) (?<year>\d{4})
後方参照 \1 / \k<name> 前に一致した内容をもう一度 (\w)\1 → ll
先読み X(?=Y) / X(?!Y) 後ろに Y が続く / 続かない X \d+(?=円) → 100(100円)
後読み (?<=Y)X / (?<!Y)X 前に Y がある / ない X (?<=\$)\d+ → 5($5)
エスケープ \. \* \( \\ など 記号そのものに一致 \. → .
フラグ i / m / s / g / x / u 大小無視 / 複数行 / . が改行にも一致 / すべて / コメント可 / Unicode 下の「フラグ一覧」参照

まずは「. [] \d * + ? {} ^ $ () |」の11個を覚えれば、ほとんどの場面に対応できます。エスケープが必要な記号は . * + ? ^ $ ( ) [ ] { } | \ / です(/ は JavaScript のリテラルや sed の区切りに使うとき)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「正規表現 早見表|記号一覧・言語別の違い・実用パターン(実行結果つき)」

処理系による書き方の違い(実行して確認)

同じパターンを各処理系で実行した結果です。○=その書き方で動く、×=使えない(エラー、または別の意味になる)です。

書きたいこと JavaScript Python re Java grep(BRE) grep -E(ERE) grep -P sed / sed -E
数字 \d ○ ○(全角数字も一致) ○ ×(「d」に一致) ×(「d」に一致) ○ ×(「d」に一致)
+ ? {} () と OR ○ ○ ○ \+ \? \{\} \(\) と書く(OR もバックスラッシュ+縦線) ○ ○ BRE は \+ など / -E は ○
最短一致 .+? ○ ○ ○ × ×(貪欲のまま) ○ ×(貪欲のまま)
名前付きグループ (?<n>) (?P<n>) のみ (?<n>) × × 両方○ ×
名前で後方参照 \k<n> (?P=n) \k<n> × × \k<n> ×
置換での参照 $1 $<n> \1 \g<n> $1 ${n} - - - \1
先読み (?=) ○ ○ ○ × × ○ ×(エラー)
後読み (?<=) ○(長さ自由) 固定長のみ ○(長さに上限がある形) × ×(警告) 固定長のみ(PCRE2 10.42) ×
単語境界 \b ○ ○ ○ ○ ○ ○ ○
Unicode \p{L} ○(u / v フラグ必須) ×(エラー) ○ × × ○ ×
POSIX [[:digit:]] ×(別の意味) ×(警告・別の意味) ×(\p{Digit}) ○ ○ ○ ○
アトミック (?>)・a++ × ○ ○ × × ○ ×
全角スペースに \s ○ ○ ×((?U) で○) - ○ × ○
インラインフラグ (?i) × ○ ○ - - ○ 置換の I フラグ

迷ったら「JavaScript・Java・grep -P はほぼ同じ、Python は名前付きグループだけ P が付く、grep と sed の標準は \d や最短一致が使えない」と覚えておくと便利です。grep・sed で \d を使いたいときは [0-9] と書くのが確実です。

実行したコード(JavaScript)

// node t.js(Node.js v22.22.2)
console.log("abc123".match(/\d+/)[0]);
console.log("2026-09-28".replace(/(?<y>\d+)-(?<m>\d+)-(?<d>\d+)/, "$<d>/$<m>/$<y>"));
console.log("price: 500".match(/(?<=price: ?)\d+/)[0]);   // 可変長の後読み
console.log("日本語abc".match(/^\p{L}+$/u)[0]);             // u フラグが必要
console.log("<a><b>".match(/<.+?>/)[0], "<a><b>".match(/<.+>/)[0]);
for (const src of ["(?P<y>\\d+)", "(?>a+)", "(?i)abc"]) {
  try { new RegExp(src); } catch (e) { console.log(e.message); }
}
123
28/09/2026
500
日本語abc
<a> <a><b>
Invalid regular expression: /(?P<y>\d+)/: Invalid group
Invalid regular expression: /(?>a+)/: Invalid group
Invalid regular expression: /(?i)abc/: Invalid group

実行したコード(Python 3.14)

import re
print(re.sub(r"(?P<y>\d+)-(?P<m>\d+)-(?P<d>\d+)", r"\g<d>/\g<m>/\g<y>", "2026-09-28"))
print(re.search(r"\d", "1"))                 # 全角数字にも一致する
print(re.search(r"\d", "1", re.ASCII))       # ASCII フラグで半角のみ
for p in [r"(?<y>\d+)", r"(?<=price: ?)\d+", r"\p{L}+"]:
    try:
        re.compile(p)
    except re.error as e:
        print(p, "->", e)
28/09/2026
<re.Match object; span=(0, 1), match='1'>
None
(?<y>\d+) -> unknown extension ?<y at position 1
(?<=price: ?)\d+ -> look-behind requires fixed-width pattern
\p{L}+ -> bad escape \p at position 0

Python の標準 re は (?<name>) と \p{...} に対応していません(3.11 と 3.14 の両方で確認)。Unicode プロパティを使いたいときは、外部パッケージの regex を使う方法があります。

実行したコード(Java 21)

// java -Dstdout.encoding=UTF-8 T.java
import java.util.regex.*;

public class T {
    public static void main(String[] args) {
        System.out.println("2026-09-28".replaceAll("(?<y>\\d+)-(?<m>\\d+)-(?<d>\\d+)", "${d}/${m}/${y}"));
        Matcher m = Pattern.compile("\\p{IsHan}+").matcher("漢字かな");
        if (m.find()) System.out.println(m.group());
        System.out.println("123abc".matches("\\d+"));                       // 全体一致
        System.out.println(Pattern.compile("\\d+").matcher("123abc").find()); // 部分一致
        System.out.println("price=PRICE".replaceAll("PRICE", Matcher.quoteReplacement("$5")));
        System.out.println("price=PRICE".replaceAll("PRICE", "$5"));        // $ がグループ参照と解釈される
    }
}
28/09/2026
漢字
false
true
price=$5
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 5

Java では matches() が文字列全体、find() が一部分の一致です。置換文字列に $ や \ を含めるときは Matcher.quoteReplacement() で囲むと、そのままの文字として扱われます。

実行したコマンド(grep・sed)

$ echo 'abc123 d' | grep -o '\d\+'          # BRE の \d は「d」
d
$ echo 'abc123 d' | grep -oP '\d+'          # -P なら数字
123
$ echo 'aa+' | grep -o 'a+'                 # BRE の + はただの文字
a+
$ echo 'aa+' | grep -o 'a\+'                # BRE で「1回以上」は \+
aa
$ echo '<a><b>' | grep -oE '<.+?>'          # ERE は最短一致にならない
<a><b>
$ echo '<a><b>' | grep -oP '<.+?>'
<a>
<b>
$ echo 'price: 500' | grep -oP '(?<=price: ?)\d+'
grep: lookbehind assertion is not fixed length
$ echo 'price: 500' | grep -oP 'price: ?\K\d+'   # \K で「ここより前は結果に含めない」
500
$ echo 'abc' | sed -E 's/a(?=b)/X/'
sed: -e expression #1, char 11: Invalid preceding regular expression
$ echo '<a><b>' | sed -E 's/<[^>]+>/X/'     # 最短一致の代わりに否定クラス
X<b>

grep -P で長さが変わる後読みを使いたいときは \K が便利です。sed で最短一致をしたいときは、<.+?> の代わりに <[^>]+>(> 以外の文字の繰り返し)と書くと同じ結果になります。

グループ・後方参照・先読み後読みの使い方

キャプチャ・非キャプチャ・名前付き

書き方 取り出せるか 使いどころ
(\d{4})-(\d{2}) ○(番号 1, 2) 置換で並べ替える
(?:ab)+ × 繰り返しや | の範囲をまとめるだけ
(?<year>\d{4}) ○(名前) グループが多いときに読みやすくする
const m = "2026-09-28".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
console.log(m.groups.year, m.groups.month, m.groups.day);
2026 09 28

取り出す必要がないグループは (?:...) にすると、番号がずれにくくなり、意図も伝わりやすくなります。

後方参照:同じ文字の繰り返しを見つける

import re
print(re.search(r"\b(\w+)\s+\1\b", "this is is a pen").group(0))
print(re.search(r"\b(\w+)\s+\1\b", "this is a pen"))
is is
None

先読み・後読み:条件だけ確かめて、結果には含めない

先読み・後読みは「その位置の前後に何があるかを確認するだけで、文字は消費しない」書き方です。

やりたいこと パターン 入力 → 結果
「円」の前の数字だけ \d+(?=円) 100円と200ドル → 100
「ドル」が続かない数字 \d+(?!\d*ドル) 100円と200ドル → 100
$ の後の数字だけ (?<=\$)\d+ 価格は$5 → 5
3桁ごとの区切り位置 \B(?=(\d{3})+(?!\d)) 1234567 → 1,234,567(置換)
console.log("100円と200ドル".match(/\d+(?=円)/)[0]);
console.log("1234567".replace(/\B(?=(\d{3})+(?!\d))/g, ","));
100
1,234,567

フラグ一覧(言語別)

意味 JavaScript Python Java grep sed(GNU)
大文字・小文字を無視 i re.I CASE_INSENSITIVE / (?i) -i s///I
^ $ を各行に m re.M MULTILINE / (?m) 常に行単位 M
. を改行にも一致 s re.S DOTALL / (?s) - -
すべて置換・検索 g sub / findall が既定で全部 replaceAll / find() を繰り返す 常に全行 s///g
空白・コメントを書ける なし re.X COMMENTS / (?x) - -
Unicode 対応 u / v 既定で Unicode(re.A で ASCII) UNICODE_CHARACTER_CLASS / (?U) ロケールに従う ロケールに従う
その他 y(位置固定)、d(位置情報) - - - -

複数行の文字列で ^ $ を各行に効かせたいときは m フラグが必要です。

import re
print(re.findall(r"^\w\d$", "a1\nb2", re.M))
print(re.findall(r"^\w\d$", "a1\nb2"))
['a1', 'b2']
[]

実用パターン集(コピペ用)

どの言語でも同じ結果になるよう、\d ではなく [0-9] で書いています(Python の \d は全角数字にも一致するため)。

郵便番号        ^[0-9]{3}-?[0-9]{4}$
電話(ハイフンあり) ^0[0-9]{1,4}-[0-9]{1,4}-[0-9]{3,4}$
電話(数字のみ)  ^0[0-9]{9,10}$
日付 YYYY-MM-DD  ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
時刻 HH:MM(:SS)  ^([01][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$
URL(http/https) ^https?://[A-Za-z0-9.-]+(:[0-9]+)?(/[^\s]*)?$
IPv4            ^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$
半角英数字のみ    ^[A-Za-z0-9]+$
カラーコード      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
パスワード強度    ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[!-~]{8,64}$
画像の拡張子      \.(jpe?g|png|gif)$      ← i フラグ付き
同じ単語の連続    \b(\w+)\s+\1\b
半角カタカナ      [ヲ-゚]

一致する / しないの実行結果

上のパターンを JavaScript(Node.js 22)・Python 3.14・Java 21 で同じ入力に対して実行しました。3つの処理系で結果はすべて同じでした(o=一致、x=不一致)。

パターン 入力 → 結果
郵便番号 100-0001 o / 1000001 o / 100-001 x / 100-0001 x / 100-00012 x
電話(ハイフンあり) 03-1234-5678 o / 090-1234-5678 o / 0120-123-456 o / 03-1234-567 o / 3-1234-5678 x
電話(数字のみ) 0312345678 o / 09012345678 o / 031234567 x / 090123456789 x
日付 2026-09-28 o / 2026-02-30 o / 2026-13-01 x / 2026-9-28 x
時刻 09:05 o / 23:59:59 o / 24:00 x / 9:05 x / 12:60 x
URL https://example.com o / http://localhost:8080/api?x=1 o / ftp://example.com x / 空白を含むURL x
IPv4 192.168.0.1 o / 255.255.255.255 o / 256.1.1.1 x / 192.168.01.1 x / 1.2.3 x
半角英数字 abc123 o / abc 123 x / abc x
カラーコード #fff o / #1A2b3C o / #ffff x / fff x
パスワード強度 Passw0rd o / password1 x / PASSWORD1 x / Pa1 x / Pass w0rd x
画像の拡張子 photo.JPG o / photo.jpeg o / photo.png.txt x / icon.gif o
同じ単語の連続 this is is a pen o / this is a pen x
半角カタカナ カタカナ o / カタカナ x

読み取っておきたいポイントです。

  • 日付パターンは 2026-02-30 も通ります。正規表現は「形」だけを確かめるので、存在する日付かどうかは日付ライブラリで確認します。
  • 電話番号は「形のチェック」と「桁数のチェック」を分けると正確になります。03-1234-567 は形としては通りますが、ハイフンを除くと9桁なので「数字のみ」のパターンで x になります。
  • パスワード強度は先読みを3つ並べて「小文字・大文字・数字をそれぞれ1文字以上」を表しています。[!-~] は ASCII の記号・英数字(空白を除く)です。
  • メールアドレスと日本語(ひらがな・カタカナ・漢字)の判定は、それぞれ専用の記事で詳しく扱っています。

検証に使ったコード(JavaScript)

// node run.js
const tests = [
  ["郵便番号", /^[0-9]{3}-?[0-9]{4}$/, ["100-0001", "1000001", "100-001", "100-0001"]],
  ["日付", /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/, ["2026-09-28", "2026-02-30", "2026-13-01"]],
  ["パスワード", /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[!-~]{8,64}$/, ["Passw0rd", "password1", "Pa1"]],
];
for (const [name, re, inputs] of tests) {
  console.log(name, inputs.map(s => `${s}:${re.test(s) ? "o" : "x"}`).join(" "));
}
郵便番号 100-0001:o 1000001:o 100-001:x 100-0001:x
日付 2026-09-28:o 2026-02-30:o 2026-13-01:x
パスワード Passw0rd:o password1:x Pa1:x

置換で使う実用パターン

やりたいこと パターン → 置換後 入力 → 出力
前後の空白を削除 ^\s+|\s+$ → 空文字 「  注文 番号 」→「注文 番号」
連続する空白を1つに \s+ → 半角スペース a␣␣b → a b
数字を3桁区切り \B(?=(\d{3})+(?!\d)) → , 1234567 → 1,234,567
先頭の0を除く(0だけは残す) ^0+(?=\d) → 空文字 007 → 7 / 000 → 0
HTMLタグを除く(簡易) <[^>]+> → 空文字 <p>在庫<b>あり</b></p> → 在庫あり
日付の並べ替え (\d+)-(\d+)-(\d+) → $3/$2/$1 2026-09-28 → 28/09/2026

実行結果(3言語)です。先頭が全角スペース、末尾がタブの文字列で試しています。

const s = "   注文  番号 \t";
console.log(JSON.stringify(s.replace(/^\s+|\s+$/g, "")));
console.log(JSON.stringify(s.replace(/\s+/g, " ").trim()));
console.log("007".replace(/^0+(?=\d)/, ""), "000".replace(/^0+(?=\d)/, ""));
console.log("1234.56789".replace(/\B(?=(\d{3})+(?!\d))/g, ","));   // 小数部にも入ってしまう
const [i, d] = "1234.56789".split(".");
console.log(i.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "." + d);    // 整数部だけに適用
"注文  番号"
"注文 番号"
7 0
1,234.56,789
1,234.56789
String s = "   注文  番号 \t";
System.out.println("[" + s.replaceAll("^\\s+|\\s+$", "") + "]");
System.out.println("[" + s.replaceAll("(?U)^\\s+|\\s+$", "") + "]");
System.out.println("[" + s.strip() + "]");
[   注文  番号]
[注文  番号]
[注文  番号]

Java の \s は既定では全角スペースに一致しません。(?U) を付けるか、String.strip() を使うと全角スペースも取り除けます。JavaScript と Python の \s は全角スペースにも一致しました。

3桁区切りは小数を含むと小数部にもカンマが入ります。整数部だけに適用するか、JavaScript なら toLocaleString()、Python なら f"{n:,}" のような数値の書式機能を使うと確実です。

よくある落とし穴と直し方

1. . が改行に一致しない

import re
print(re.search(r"a.b", "a\nb"))
print(re.search(r"a.b", "a\nb", re.S))
None
<re.Match object; span=(0, 3), match='a\nb'>

. は既定で改行以外の1文字です。改行もまたぎたいときは s フラグ(Python は re.S、Java は DOTALL)を付けるか、[\s\S] と書きます。

2. 貪欲マッチで取りすぎる

書き方 <a><b> に対する結果 考え方
<.+> <a><b> できるだけ長く(貪欲)
<.+?> <a> できるだけ短く(最短)
<[^>]+> <a> > 以外の文字だけを繰り返す

最短一致が使えない grep・sed では、否定の文字クラス [^>] を使う書き方が便利です。処理もシンプルで速く、どの処理系でも同じ結果になります。

3. エスケープ忘れ

console.log("a.b.c".replace(/./g, "-"));    // . は「任意の1文字」
console.log("a.b.c".replace(/\./g, "-"));   // \. でドットそのもの
console.log("a.b.c".replaceAll(".", "-"));  // 文字列で渡すと正規表現にならない
-----
a-b-c
a-b-c

ユーザーの入力を正規表現に埋め込むときは、エスケープ関数を通します。Python は re.escape()、Java は Pattern.quote() が使えます。

4. ^ $ が「文字列全体」か「各行」か

状況 ^\w\d$ で "a1\nb2" を検索
m フラグなし 一致なし(文字列全体が1つの対象)
m フラグあり a1, b2 の両方に一致

さらに、全体一致を確認するつもりで部分一致の関数を使うと、余分な文字が付いていても通ります。

言語 全体一致 部分一致
JavaScript ^...$ を付けて test() test() / match()
Python re.fullmatch() re.search()(re.match() は先頭だけ)
Java matches() find()
import re
print(re.match(r"\d+", "123abc"))
print(re.fullmatch(r"\d+", "123abc"))
<re.Match object; span=(0, 3), match='123'>
None

5. POSIX 文字クラスを他の言語で書くと別の意味になる

[[:digit:]] は grep・sed の書き方です。JavaScript では「[ : d i g t のどれか」の後に ] が続く、という別のパターンとして解釈され、エラーにもなりません("ab12" に一致しないことを確認)。Python では FutureWarning: Possible nested set が表示されました。言語側では \d や [0-9] を使います。

6. 複雑な繰り返しの入れ子で処理が長引く

(a+)+$ のように繰り返しの中にさらに繰り返しを入れると、一致しない入力で処理時間が急に長くなることがあります(ReDoS と呼ばれます)。入れ子を避ける、入力の長さに上限を設ける、Java・Python・PCRE ならアトミックグループ (?>...) や a++ を使う、といった方法で防げます。

よくある質問

Q. 正規表現の書き方は、どの言語でも同じですか? A. 基本の記号(. [] * + ? {} ^ $ () |)は共通です。違いが出やすいのは、名前付きグループ(Python は (?P<name>))、後読みの長さの制限、Unicode プロパティ \p{...}、置換での参照($1 と \1)、そして grep・sed の BRE で + や {} にバックスラッシュが必要な点です。

Q. \d と [0-9] はどちらを使えばよいですか? A. 半角数字だけを受け付けたいなら [0-9] が確実です。Python 3 の \d は全角数字「1」にも一致し、grep・sed の標準モードでは \d が「d」という文字に一致しました。

Q. 最短一致(非貪欲)が効かないのはなぜですか? A. grep -E や sed -E の ERE には最短一致の記法がありません。.+? は「.+ を0回か1回」と解釈され、貪欲のままになります。[^>]+ のような否定の文字クラスで書き換えるか、grep なら -P を使います。

Q. 正規表現の動きを手軽に確かめる方法は? A. ブラウザの開発者ツールのコンソールで /パターン/.test("文字列") を実行するのが手軽です。本番で使う言語と同じ処理系で確かめると、この記事の比較表にあるような違いにも気づけます。

まとめ

  • 最初に覚えるのは . [] \d * + ? {} ^ $ () | の11個
  • 処理系で書き方が違う:Python の名前付きグループは (?P<name>)、grep・sed の標準は \d と最短一致が使えない
  • 後読みは JavaScript だけ長さ自由、Python と grep -P は固定長、grep -P なら \K で代用できる
  • 半角数字だけなら [0-9]。Python の \d は全角数字にも一致する
  • 形のチェックは正規表現、中身の正しさ(存在する日付など)は別の処理で
  • 全体一致は fullmatch() / matches() / ^...$ を使い分ける
  • 最短一致の代わりに否定の文字クラス [^>]+ を使うと、どの処理系でも同じ結果になる

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「正規表現 早見表|記号一覧・言語別の違い・実用パターン(実行結果つき)」

株式会社RJCでは、言語やツールごとの細かな違いを実際に動かして確かめ、その結果をチームで共有しながら開発を進めています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?