正規表現の例
このページは、正規表現の例をまとめる予定のページです。
注意
- 最初(
^
)と最後($
)のアンカーは、複数行モード(例: C# のRegexOptions.Multiline
)の場合は行の最初と最後にもマッチするようになります。どのモードでも必ず文字列の最初と最後にマッチさせたい場合は\A
,\z
を使用してください。- JavaScriptには
\A
,\z
はありません。
- JavaScriptには
一般的なパターン
特定の文字で区切られた最初の部分
^[^区切り文字]+
※ 文字クラスの否定([^]
)を使用して、「最初(^
)から区切り文字が出現しない間の部分」にマッチさせます。
サンプル
文字列 | 正規表現 | マッチする文字列 |
---|---|---|
test | ^[^\.]+ | test |
test.txt | 〃 | test |
test.txt.bak | 〃 | test |
特定の文字列で区切られた最初の部分
調べたい文字列に絶対に区切り文字列が入っている場合
^.+?(?=区切り文字列)
※ 先読み((?=)
)を使用して、「最初(^
)から区切り文字列が出現しない間の部分」にマッチさせます。
.+
の後ろに?
を付けることで、.+
に区切り文字自体が入るのを防ぐことができます。(最短マッチ)
調べたい文字列に区切り文字列が入っていない可能性がある場合
^.+?(?:(?=区切り文字列)|$)
「(?:(?=区切り文字列)|$)
」は、区切り文字がまったくなかった場合でも対応できるようにするもので、「区切り文字が後ろにある」((?=区切り文字列)
)か最後($
)かどちら(|
)か、という意味です。(?:)
は通常の括弧(()
)でもよいですが、(?:)
にしておくと無駄にキャプチャしなくて済みます。
サンプル
文字列 | 正規表現 | マッチする文字列 |
---|---|---|
test | ^.+?(?=<>) | |
test<>txt | 〃 | test |
test<>txt<>bak | 〃 | test |
test | ^.+?(?:(?=<>)|$) | test |
test<>txt | 〃 | test |
test<>txt<>bak | 〃 | test |
特定の文字列で区切られた最後の部分
調べたい文字列に絶対に区切り文字列が入っている場合
(?<=区切り文字列)(?!.*区切り文字列)+$
※ 後読み(戻り読み。(?<=)
)で「区切り文字が前にある」 + 否定先読み((?!)
)で「区切り文字が」のパターンにマッチしないことを先に確認してから、すべての文字列(.*
)にマッチさせます。
調べたい文字列に区切り文字列が入っていない可能性がある場合
(?:^|(?<=区切り文字列))(?!.*区切り文字列)+$
「(?:^|(?<=区切り文字列))
」は、区切り文字がまったくなかった場合でも対応できるようにするもので、最初(^
)か「区切り文字が前にある」((?<=区切り文字列)
)かどちら(|
)か、という意味です。(?:)
は通常の括弧(()
)でもよいですが、(?:)
にしておくと無駄にキャプチャしなくて済みます。
サンプル
文字列 | 正規表現 | マッチする文字列 |
---|---|---|
test | (?<=<>)(?!.*<>).+$ | |
test<>txt | 〃 | txt |
test<>txt<>bak | 〃 | bak |
test<>txt<>ba<k | 〃 | ba<k |
test | (?:^|(?<=<>))(?!.*<>).+$ | test |
test<>txt | 〃 | txt |
test<>txt<>bak | 〃 | bak |
test<>txt<>ba<k | 〃 | ba<k |
特定の文字列を含まない
^(?!.*含みたくない文字).*
※ 最初(^
) + 否定先読み((?!)
)を利用して対象の文字列が「.*含みたくない文字
」のパターンにマッチしないことを先に確認してから、すべての文字列(.*
)にマッチさせます。
サンプル
文字列 | 正規表現 | マッチする文字列 |
---|---|---|
テスト | ^(?!.*含みたくない文字).* | テスト |
含みたくない文字 / テスト | 〃 | |
テスト / 含みたくない文字 | 〃 | |
テスト / 含みたくない文字 / テスト | 〃 |
前に特定の文字列を含まない
(?<!含みたくない文字.*)含めたいパターン
否定後読み(否定戻り読み。(?<!)
)を利用して含めたいパターンの前が「含みたくない文字.*
」のパターンにマッチしないことを確認します。
サンプル
文字列 | 正規表現 | マッチする文字列 |
---|---|---|
テスト123 | (?<!含みたくない文字.*)テスト[0-9]+ | テスト123 |
含みたくない文字 / テスト456 | 〃 | |
テスト123 / 含みたくない文字 | 〃 | テスト123 |
テスト123 / 含みたくない文字 / テスト456 | 〃 | テスト123 |
後ろに特定の文字列を含まない
含めたいパターン(?!.*含みたくない文字)
否定先読み((?!)
)を利用して含めたいパターンの後が「.*含みたくない文字
」のパターンにマッチしないことを確認します。
サンプル
文字列 | 正規表現 | マッチする文字列 |
---|---|---|
テスト123 | テスト[0-9]+(?!.*含みたくない文字) | テスト123 |
含みたくない文字 / テスト456 | 〃 | テスト456 |
テスト123 / 含みたくない文字 | 〃 | |
テスト123 / 含みたくない文字 / テスト456 | 〃 | テスト456 |
テスト123 / 含みたくない文字 / テスト456 | ^テスト[0-9]+(?!.*含みたくない文字) |