- 技術 💻
正規表現 早見表|記号一覧・言語別の違い・実用パターン(実行結果つき)
正規表現とは、「数字が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期連続の黒字決算。