文字クラスの否定([^])を使用して、「最初(^)から区切り文字が出現しない間の部分」にマッチさせます。先読み((?=))を使用して、「最初(^)から区切り文字列が出現しない間の部分」にマッチさせます。.+の後ろに?を付けることで、.+に区切り文字自体が入るのを防ぐことができます。(最短マッチ)調べたい文字列に区切り文字列が入っていない可能性がある場合^.+?(?:(?=区切り文字列)|$)「(?:(?=区切り文字列)|$)」は、区切り文字がまったくなかった場合でも対応できるようにするもので、「区切り文字が後ろにある」((?=区切り文字列))か最後($)かどちら(|)か、という意味です。(?:)は通常の括弧(())でもよいですが、(?:)にしておくと無駄にキャプチャしなくて済みます。否定先読み((?!))で「区切り文字が」のパターンにマッチしないことを先に確認してから、すべての文字列(.*)にマッチさせます。調べたい文字列に区切り文字列が入っていない可能性がある場合(?:^|(?<=区切り文字列))(?!.*区切り文字列)+$「(?:^|(?<=区切り文字列))」は、区切り文字がまったくなかった場合でも対応できるようにするもので、最初(^)か「区切り文字が前にある」((?<=区切り文字列))かどちら(|)か、という意味です。(?:)は通常の括弧(())でもよいですが、(?:)にしておくと無駄にキャプチャしなくて済みます。否定先読み((?!))を利用して対象の文字列が「.*含みたくない文字」のパターンにマッチしないことを先に確認してから、すべての文字列(.*)にマッチさせます。前に特定の文字列を含まない(?<!含みたくない文字.*)含めたいパターン否定後読み(否定戻り読み。(?<!))を利用して含めたいパターンの前が「含みたくない文字.*」のパターンにマッチしないことを確認します。テスト123後ろに特定の文字列を含まない含めたいパターン(?!.*含みたくない文字)否定先読み((?!))を利用して含めたいパターンの後が「.*含みたくない文字」のパターンにマッチしないことを確認します。^テスト[0-9]+(?!.*含みたくない文字)。