- Q1
正規表現エンジンのバックトラッキングが原因で発生する問題は何ですか?
ANSWERカタストロフィック・バックトラッキング(ReDoS)クリックして解説を表示EXPLANATION悪意のある入力や複雑なパターンにより、バックトラッキングが指数関数的に増加し、処理時間が非常に長くなることがあります。これをカタストロフィック・バックトラッキング(ReDoS攻撃の原因)と呼びます。
- Q2
正規表現
(a+)+$が「aaaaaaaaaaaaaaaaab」に対して非常に遅くなる理由は何ですか?ANSWERネストした量指定子による指数関数的バックトラッククリックして解説を表示EXPLANATIONネストした量指定子
(a+)+は、マッチに失敗した場合に大量のバックトラックを引き起こします。「b」でマッチ失敗後、「a」の分割方法をすべて試すため、指数関数的な時間がかかります。 - Q3
ReDoS(Regular Expression Denial of Service)を防ぐ最も効果的な方法はどれですか?
ANSWERアトミックグループ/所有量指定子の使用とタイムアウト設定クリックして解説を表示EXPLANATIONアトミックグループ
(?>...)や所有量指定子++を使用すると、バックトラックを防止できます。また、ネストした量指定子を避け、タイムアウトを設定することも重要です。 - Q4
所有量指定子(possessive quantifier)
a++の特徴は何ですか?ANSWER貪欲マッチを行い、バックトラックしないクリックして解説を表示EXPLANATION所有量指定子
++は貪欲マッチを行いますが、一度マッチした文字を手放しません(バックトラックしない)。パフォーマンス向上に役立ちますが、マッチ結果が変わる場合があります。 - Q5
正規表現
a++と(?>a+)は機能的に同等ですか?ANSWER同等であるクリックして解説を表示EXPLANATIONはい、
a++(所有量指定子)と(?>a+)(アトミックグループ)は同等の機能を持ちます。どちらもバックトラックを防止します。 - Q6
RFC 5322に準拠したメールアドレス検証の正規表現で考慮すべき点として不適切なものはどれですか?
ANSWER100%の精度を正規表現だけで達成できるクリックして解説を表示EXPLANATIONRFCに完全準拠した正規表現は非常に複雑になります。実用的には、基本的な検証の後に実際のメール送信で確認するのがベストプラクティスです。Unicode文字もローカルパートで使用可能です。
- Q7
URLを検証する正規表現で一般的に見落とされがちな要素はどれですか?
ANSWER国際化ドメイン名(IDN/Punycode)クリックして解説を表示EXPLANATIONURL検証では、国際化ドメイン名(IDN/Punycode)、ポート番号、ユーザー情報(user:pass@)、フラグメント識別子、クエリ文字列など、多くの要素を考慮する必要があります。
- Q8
日本の電話番号(固定・携帯)を検証する場合、考慮すべき形式として正しくないものはどれですか?
ANSWER+1-123-456-7890クリックして解説を表示EXPLANATION日本の電話番号は市外局番の桁数が地域によって異なり(2〜5桁)、形式も多様です。050(IP電話)、070/080/090(携帯)、0120(フリーダイヤル)などがあります。「+1」はアメリカの国番号です。
- Q9
正規表現エンジンの種類として、NFAとDFAの主な違いは何ですか?
ANSWERNFAはバックトラック可能で機能豊富、DFAは線形時間だが機能限定クリックして解説を表示EXPLANATIONNFA(非決定性有限オートマトン)はバックトラックをサポートし、後方参照などの機能が使えますが、最悪ケースで遅くなります。DFA(決定性有限オートマトン)は常に線形時間ですが、機能が限定されます。
- Q10
JavaScriptの正規表現でサポートされていない機能はどれですか?(ES2018以前)
ANSWER後読み(lookbehind)クリックして解説を表示EXPLANATIONES2018以前のJavaScriptでは、後読み(lookbehind)、名前付きキャプチャグループ、Unicodeプロパティエスケープはサポートされていませんでした。ES2018以降で追加されました。
- Q11
Pythonの
re.VERBOSE(またはre.X)フラグの用途は何ですか?ANSWER空白とコメントを許可して可読性を向上クリックして解説を表示EXPLANATIONre.VERBOSEは拡張モードを有効にし、パターン内の空白とコメント(#以降)を無視します。複雑な正規表現を読みやすく記述できます。 - Q12
Pythonで
re.compile()を使用する主なメリットは何ですか?ANSWER同じパターンの再利用時にパフォーマンスが向上クリックして解説を表示EXPLANATIONre.compile()は正規表現をコンパイルしてオブジェクトを作成します。同じパターンを複数回使用する場合、毎回コンパイルするオーバーヘッドを避けられます。 - Q13
JavaScriptの
/uフラグ(Unicode)を使用すると何が変わりますか?ANSWERサロゲートペアを正しく扱い、Unicodeプロパティが使用可能クリックして解説を表示EXPLANATION/uフラグはUnicodeモードを有効にします。サロゲートペアを正しく扱い、\u{...}構文や\p{...}プロパティエスケープが使えるようになります。 - Q14
JavaScriptの
/yフラグ(sticky)の動作は何ですか?ANSWERlastIndexの位置からのみマッチを試みるクリックして解説を表示EXPLANATION/yフラグはlastIndexの位置からのみマッチを試みます。グローバル検索とは異なり、その位置でマッチしなければ失敗します。 - Q15
Perlの正規表現で
/e修飾子は何をしますか?ANSWER置換パターンをコードとして評価するクリックして解説を表示EXPLANATIONPerlの
/e修飾子は置換パターンをPerlコードとして評価します。これにより、マッチした文字列に対して動的な変換を行えます。 - Q16
Ruby、Perl、PHPで使われるPCRE(Perl Compatible Regular Expressions)の特徴は何ですか?
ANSWER高度な機能(再帰、条件分岐など)をサポートクリックして解説を表示EXPLANATIONPCREはPerl互換の正規表現ライブラリで、多くの言語で使用されています。名前付きキャプチャ、再帰パターン、条件分岐など高度な機能をサポートします。
- Q17
正規表現で再帰パターン
(?R)または(?0)の用途は何ですか?ANSWERネストした構造(括弧など)をマッチさせるクリックして解説を表示EXPLANATION再帰パターンはパターン全体を再帰的にマッチさせます。括弧のネスト
((()))やHTML/XMLの入れ子構造などをマッチさせるのに使用します。 - Q18
正規表現
\((?:[^()]|(?R))*\)は何にマッチしますか?ANSWER正しくネストした括弧クリックして解説を表示EXPLANATIONこのパターンは再帰を使用して、正しくネストした括弧にマッチします。
((a)(b(c)))のような複雑なネストにもマッチします。 - Q19
正規表現
(?1)は何を表しますか?ANSWER1番目のグループのパターンの再帰呼び出しクリックして解説を表示EXPLANATION(?1)は1番目のキャプチャグループのパターンを再帰的に呼び出します。(?R)がパターン全体を呼び出すのに対し、特定のグループのみを呼び出します。 - Q20
クレジットカード番号の基本的な検証(形式のみ)で使用される正規表現パターンの特徴は?
ANSWERブランドごとに先頭の数字と桁数が異なるクリックして解説を表示EXPLANATIONクレジットカード番号は通常13〜19桁の数字で、ブランドごとに先頭の数字が異なります(Visa: 4、MasterCard: 51-55または2221-2720など)。ただし、正規表現は形式チェックのみで、Luhnアルゴリズムによる検証も必要です。
- Q21
IPv4アドレスを厳密に検証する正規表現で、
25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\dというパターンが使われる理由は?ANSWER0-255の範囲を正確に検証するためクリックして解説を表示EXPLANATION各オクテットは0-255の範囲である必要があります。このパターンは250-255、200-249、100-199、0-99の各範囲を正確にマッチさせ、256以上の数値を拒否します。
- Q22
正規表現でIPv6アドレスを検証する際の主な課題は何ですか?
ANSWER省略形、混合表記など多様な形式が存在するクリックして解説を表示EXPLANATIONIPv6は省略形(
::による連続ゼロの省略)、混合表記(IPv4互換)、ゾーンID(%付き)など多様な形式があり、すべてをカバーする正規表現は非常に複雑になります。 - Q23
正規表現
^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$は何を検証していますか?ANSWERIPv4アドレス(厳密な検証)クリックして解説を表示EXPLANATIONこのパターンはIPv4アドレスの厳密な検証を行います。各オクテットが0-255の範囲で、ドットで区切られた4つの数値であることを確認します。
- Q24
正規表現でHTMLをパースすることが推奨されない主な理由は何ですか?
ANSWERHTMLは正規言語ではなく、正規表現では完全にパースできないクリックして解説を表示EXPLANATIONHTMLは文脈自由文法で、ネストした構造、属性の順序、コメント、CDATA、エンティティなど複雑な要素があります。正規表現(正規文法)では完全にパースできず、専用のパーサーを使用すべきです。
- Q25
正規表現で日付の妥当性(2月30日など)を検証することは?
ANSWER非常に困難で、日付ライブラリを使用すべきクリックして解説を表示EXPLANATION正規表現では形式のみを検証でき、日付の妥当性(月ごとの日数、うるう年など)を完全に検証することは非常に困難です。プログラミング言語の日付ライブラリを使用すべきです。
- Q26
正規表現のユニットテストを書く際のベストプラクティスはどれですか?
ANSWERマッチ/非マッチの両方とエッジケースをテストするクリックして解説を表示EXPLANATION正規表現のテストでは、マッチすべきケース(正常系)、マッチしないべきケース(異常系)、エッジケース(空文字、境界値、特殊文字)をカバーすることが重要です。
- Q27
正規表現
(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}で検証しているのは何ですか?ANSWER強力なパスワード(複数の文字種を含む8文字以上)クリックして解説を表示EXPLANATIONこのパターンは複数の先読みを使用して、大文字・小文字・数字・特殊文字を各1文字以上含む8文字以上の文字列にマッチします。強力なパスワードの検証に使用されます。
- Q28
正規表現のパフォーマンス最適化として不適切なのはどれですか?
ANSWERネストした量指定子を使用するクリックして解説を表示EXPLANATIONネストした量指定子
(a+)+はカタストロフィック・バックトラッキングの原因になります。アンカーの使用、非キャプチャグループ、具体的な文字クラスの使用はパフォーマンス向上に有効です。 - Q29
.*よりも[^x]*を使用する方がパフォーマンスが良い場合があるのはなぜですか?ANSWERバックトラックが減少するからクリックして解説を表示EXPLANATION[^x]*は「x」以外の文字にマッチするため、「x」に到達したらそこで停止します。.*は最後まで進んでからバックトラックするため、不要なバックトラックが発生する可能性があります。 - Q30
Unicodeの結合文字(combining character)を扱う際の正規表現の注意点は?
ANSWER結合文字は基底文字と別にマッチされる可能性があるクリックして解説を表示EXPLANATION結合文字(アクセント記号など)は基底文字と組み合わせて1つの「見た目の文字」を形成します。
.は結合文字を別の文字として扱うため、\X(グラフェムクラスタ)を使用する必要がある場合があります。
- Q31
正規表現
\p{Script=Hiragana}は何にマッチしますか?ANSWERひらがなクリックして解説を表示EXPLANATION\p{Script=Hiragana}はUnicodeスクリプトプロパティを使用して、ひらがな文字にマッチします。言語やスクリプトを指定した文字マッチが可能です。 - Q32
正規表現で絵文字を正しくマッチさせる際の課題は何ですか?
ANSWER複数コードポイントで構成される絵文字があるクリックして解説を表示EXPLANATION絵文字は複数のコードポイントで構成されることがあり(ZWJ結合、スキントーン、国旗など)、単純な
.では正しくマッチできません。Unicodeプロパティやグラフェムクラスタを使用する必要があります。 - Q33
正規表現
\p{Emoji}は何にマッチしますか?ANSWEREmojiプロパティを持つ文字クリックして解説を表示EXPLANATION\p{Emoji}はUnicodeのEmoji プロパティを持つ文字にマッチします。ただし、これには絵文字として使用できる数字なども含まれるため、\p{Emoji_Presentation}などより具体的なプロパティを使用することもあります。 - Q34
Javaで正規表現を使用する際、
Pattern.UNICODE_CHARACTER_CLASSフラグの効果は?ANSWER\w、\dなどがUnicode定義に従うクリックして解説を表示EXPLANATIONこのフラグを有効にすると、
\w、\d、\sなどのショートハンドがUnicode定義に従うようになります。デフォルトではASCIIのみにマッチします。 - Q35
.NETの正規表現で
(?<name-other>)構文の用途は何ですか?ANSWERバランシンググループ(ネストの追跡)クリックして解説を表示EXPLANATION.NETの「バランシンググループ」は、開き括弧と閉じ括弧のペアを追跡できます。
(?<name-other>)はotherグループからnameグループへポップ操作を行い、ネストの深さを追跡します。 - Q36
正規表現でコメントを含むコードから文字列リテラルを正確に抽出する際の課題は?
ANSWERコメント内の引用符やエスケープの処理が複雑クリックして解説を表示EXPLANATIONコメント内の引用符、エスケープされた引用符、複数行文字列、ネストしたコメントなど、文脈に依存する要素が多く、正規表現だけでは正確な抽出が困難です。
- Q37
正規表現
"(?:[^"\\]|\\.)*"は何にマッチしますか?ANSWERエスケープを考慮したダブルクォート文字列クリックして解説を表示EXPLANATIONこのパターンはダブルクォートで囲まれた文字列にマッチします。
[^"\\]は引用符とバックスラッシュ以外、\\.はエスケープシーケンスにマッチし、"hello\"world"のような文字列を正しく処理します。 - Q38
正規表現を使用したXSS(クロスサイトスクリプティング)対策で注意すべき点は?
ANSWERブラックリスト方式は不完全で、回避手法が多数存在クリックして解説を表示EXPLANATION正規表現によるブラックリスト方式のXSS対策は不完全です。攻撃者はエンコーディング、大文字小文字の混在、改行挿入などで回避できます。ホワイトリスト方式やHTMLエスケープを使用すべきです。
- Q39
正規表現でSQLインジェクションを検出しようとする際の問題点は?
ANSWER攻撃パターンが多様で、正規表現での検出は不完全クリックして解説を表示EXPLANATIONSQLインジェクションの攻撃パターンは非常に多様で、コメント、エンコーディング、DBMS固有の構文などを利用した回避手法があります。正規表現ではなく、プリペアドステートメントを使用すべきです。
- Q40
正規表現
(?:(?:(?P<protocol>https?|ftp):\/\/)?(?P<host>[\w.-]+)(?::(?P<port>\d+))?(?P<path>\/[^\s]*)?)で抽出できる情報は?ANSWERプロトコル、ホスト、ポート、パスを個別に抽出クリックして解説を表示EXPLANATIONこのパターンは名前付きキャプチャグループを使用して、URLからプロトコル、ホスト、ポート、パスを個別に抽出します。各要素がオプショナルになっています。
- Q41
正規表現でログファイルをパースする際のベストプラクティスは?
ANSWER名前付きキャプチャ、拡張モード、エラーハンドリングを使用クリックして解説を表示EXPLANATIONログパースでは名前付きキャプチャグループで各フィールドを抽出し、拡張モードで可読性を高め、想定外の入力に対するエラーハンドリングを行うことが重要です。
- Q42
Apacheログの一般的な形式(Combined Log Format)をパースする正規表現で必要な要素は?
ANSWERIP、タイムスタンプ、リクエスト、ステータス、リファラー、UA等クリックして解説を表示EXPLANATIONCombined Log Formatには、IPアドレス、識別子、ユーザー、タイムスタンプ、リクエスト、ステータス、サイズ、リファラー、ユーザーエージェントが含まれます。各フィールドを正確に抽出する必要があります。
- Q43
正規表現
(?<ip>\S+) \S+ \S+ \[(?<time>[^\]]+)\] "(?<request>[^"]*)" (?<status>\d+) (?<size>\S+)は何をパースしていますか?ANSWERApache Common Log Formatクリックして解説を表示EXPLANATIONこのパターンはApacheのCommon Log Formatをパースし、IPアドレス、タイムスタンプ、リクエスト、ステータスコード、レスポンスサイズを名前付きグループで抽出します。
- Q44
正規表現のコンパイルとインタープリタ実行の違いは?
ANSWERコンパイル済みは繰り返し使用時に高速クリックして解説を表示EXPLANATIONコンパイル済み正規表現は事前に最適化され、繰り返し使用時に高速です。インタープリタ実行は毎回パースするため、単発使用には適していますが繰り返しには非効率です。
- Q45
正規表現
.NETのRegexOptions.Compiledフラグの効果は?ANSWERILへのコンパイルによる高速化(初期コストあり)クリックして解説を表示EXPLANATIONRegexOptions.CompiledはパターンをILにコンパイルし、マッチング速度を向上させます。ただし、初期コンパイルに時間がかかり、メモリ使用量も増加します。 - Q46
正規表現で大量のデータを処理する際のメモリ効率を改善する方法は?
ANSWERストリーミング処理、非キャプチャグループの使用クリックして解説を表示EXPLANATION大量データの処理では、ストリーミング処理(行単位)、マッチイテレータの使用、不要なキャプチャの回避、早期終了条件の設定などでメモリ効率を改善できます。
- Q47
Pythonの
re.finditer()とre.findall()の違いで、パフォーマンスに影響するのは?ANSWERfinditer()はイテレータでメモリ効率が良いクリックして解説を表示EXPLANATIONfinditer()はイテレータを返すため、マッチを順次処理でき、メモリ効率が良いです。findall()はすべてのマッチをリストとして返すため、大量のマッチがある場合にメモリを消費します。 - Q48
正規表現でマルチバイト文字(日本語など)を扱う際の注意点は?
ANSWERUnicodeモードの確認、サロゲートペアの扱いに注意クリックして解説を表示EXPLANATIONマルチバイト文字はエンコーディングにより複数バイトで表現されます。正規表現エンジンがUnicode対応か、
.がサロゲートペアを正しく扱うか確認が必要です。 - Q49
正規表現
^\p{L}+$で日本語文字列「こんにちは」はマッチしますか?(Unicode対応の場合)ANSWERマッチするクリックして解説を表示EXPLANATION\p{L}はUnicodeの「Letter」カテゴリにマッチし、日本語のひらがな・カタカナ・漢字も含まれます。「こんにちは」はすべてひらがななのでマッチします。 - Q50
正規表現
(?<=\d)(?=(\d{3})+(?!\d))を使用して「1234567」に置換処理を行うと、どの位置にマッチしますか?ANSWER「1」と「2」の間、「4」と「5」の間クリックして解説を表示EXPLANATIONこのパターンは数字の後ろで、その後に3桁の数字のグループが続く位置にマッチします。「1234567」では「1」と「2」の間、「4」と「5」の間にマッチします。カンマ挿入に使用できます。
- Q51
正規表現でCSVファイルをパースする際の課題は?
ANSWER引用符、エスケープ、フィールド内改行の処理が複雑クリックして解説を表示EXPLANATIONCSVはフィールド内の引用符、エスケープされた引用符、改行を含むフィールドなど複雑なケースがあります。正規表現よりもCSVパーサーライブラリを使用することが推奨されます。
- Q52
正規表現
"([^"]*(?:""[^"]*)*)"|([^,]+)は何をパースしようとしていますか?ANSWERCSVフィールド(引用符とエスケープを考慮)クリックして解説を表示EXPLANATIONこのパターンはCSVフィールドをパースしようとしています。引用符で囲まれたフィールド(""でエスケープされた引用符を含む)と、引用符なしのフィールドの両方にマッチします。
- Q53
正規表現
\b[A-Z][a-z]+(?:\s[A-Z][a-z]+)*\bは何にマッチしますか?ANSWER大文字で始まる単語の連続(人名形式)クリックして解説を表示EXPLANATIONこのパターンは大文字で始まり小文字が続く単語が、スペースで区切られて連続するものにマッチします。人名(「John Smith」など)の形式を想定しています。
- Q54
正規表現で「キャメルケース」を「スネークケース」に変換する際に使用するパターンとして適切なのは?
ANSWER(?<=[a-z])(?=[A-Z])の位置に_を挿入クリックして解説を表示EXPLANATIONキャメルケース(camelCase)をスネークケース(snake_case)に変換するには、小文字の後の大文字を見つけて、その前にアンダースコアを挿入します。
(?<=[a-z])(?=[A-Z])がその位置にマッチします。 - Q55
正規表現で重複した単語(「the the」など)を検出するパターンは?
ANSWER\b(\w+)\s+\1\bクリックして解説を表示EXPLANATION\b(\w+)\s+\1\bは単語をキャプチャし、空白を挟んで同じ単語が繰り返される場合にマッチします。タイポの検出に使用されます。 - Q56
正規表現でプログラミング言語のコメントを削除する際の注意点は?
ANSWER文字列内のコメント記号、ネスト、複数形式の考慮が必要クリックして解説を表示EXPLANATIONコメント削除は、文字列リテラル内のコメント記号、ネストしたコメント(一部言語)、複数行コメントと単一行コメントの混在など、多くのエッジケースがあります。
- Q57
正規表現
/\*[\s\S]*?\*/|//.*$は何を検出しますか?ANSWERC/C++/Java形式のコメント(複数行と単一行)クリックして解説を表示EXPLANATIONこのパターンはCスタイルの複数行コメント
/* ... */(非貪欲)と単一行コメント// ...にマッチします。コメント削除に使用されます。 - Q58
正規表現で空白の正規化(連続空白を単一スペースに)を行うパターンは?
ANSWER\s+クリックして解説を表示EXPLANATION\s+は1つ以上の空白文字にマッチします。これを単一のスペースに置換することで、連続空白を正規化できます。 - Q59
正規表現で文字列の先頭と末尾の空白を削除(trim)するパターンとして適切なのは?
ANSWER^\s+|\s+$クリックして解説を表示EXPLANATION^\s+|\s+$は文字列の先頭の空白、または末尾の空白にマッチします。これを空文字に置換することでtrim操作ができます。 - Q60
正規表現
(?:^|\G)\s*(\S+)\s*(?:,|$)はCSVライクなデータをどのように処理しますか?ANSWER順次フィールドをマッチして値をキャプチャクリックして解説を表示EXPLANATION\Gは前回のマッチ終了位置からマッチを開始します。このパターンは連続したCSVフィールドを順番にマッチし、各フィールドの値をキャプチャします。
- Q61
正規表現でBase64エンコードされた文字列を検出するパターンとして適切なのは?
ANSWER[A-Za-z0-9+/]+=*(長さが4の倍数)クリックして解説を表示EXPLANATIONBase64は英数字、+、/で構成され、末尾にパディングの=(0〜2個)が付くことがあります。長さは4の倍数です。
[A-Za-z0-9+/]+=*が基本パターンです。 - Q62
正規表現でUUID(v4)を検証するパターンとして正しい特徴は?
ANSWER3番目のグループが4で始まり、4番目が8/9/a/bで始まるクリックして解説を表示EXPLANATIONUUID v4は
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxの形式で、3番目のグループが「4」で始まり、4番目のグループが「8」「9」「a」「b」で始まります。 - Q63
正規表現
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$は何を検証していますか?ANSWERUUID v4クリックして解説を表示EXPLANATIONこのパターンはUUID version 4の形式を検証します。3番目のグループが「4」で始まり、4番目のグループが「8」「9」「a」「b」で始まることを確認しています。
- Q64
正規表現でセマンティックバージョニング(SemVer)を検証する際に含めるべき要素は?
ANSWERMAJOR.MINOR.PATCH、プレリリース、ビルドメタデータクリックして解説を表示EXPLANATIONSemVerは
MAJOR.MINOR.PATCHの形式で、オプションでプレリリース識別子(-alpha.1など)とビルドメタデータ(+build.123など)が付きます。 - Q65
正規表現
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$は何を検証していますか?ANSWERSemVer 2.0.0準拠のバージョンクリックして解説を表示EXPLANATIONこの複雑なパターンはセマンティックバージョニング(SemVer 2.0.0)の完全な仕様に準拠した検証を行います。先頭のゼロを禁止し、プレリリースとビルドメタデータの形式も検証します。
- Q66
正規表現で16進数のカラーコード(#RGB、#RRGGBB、#RRGGBBAA)を検証するパターンは?
ANSWER#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})クリックして解説を表示EXPLANATIONCSSカラーコードは#に続く3桁(#RGB)、6桁(#RRGGBB)、8桁(#RRGGBBAA)の形式があります。
#([0-9a-fA-F]{3}){1,2,3}のような考え方が必要です。 - Q67
正規表現でJSONの文字列を厳密に検証する際の課題は?
ANSWER有効なエスケープシーケンスのみ許可し、制御文字を拒否クリックして解説を表示EXPLANATIONJSON文字列はダブルクォートで囲まれ、特定のエスケープシーケンス(\n、\t、\uXXXXなど)のみが許可されます。不正なエスケープや制御文字を拒否する必要があります。
- Q68
正規表現
"(?:[^"\\\x00-\x1f]|\\["\\bfnrt]|\\u[0-9a-fA-F]{4})*"は何を検証していますか?ANSWERJSON仕様に準拠した文字列クリックして解説を表示EXPLANATIONこのパターンはJSON文字列の仕様に準拠した検証を行います。制御文字(\x00-\x1f)を禁止し、有効なエスケープシーケンスのみを許可します。
- Q69
正規表現でMarkdownのリンク
[text](url)を検出するパターンとして適切なのは?ANSWER[([^]]+)](([^)]+))クリックして解説を表示EXPLANATION\[([^\]]+)\]\(([^)]+)\)は角括弧内のテキストと丸括弧内のURLを別々にキャプチャします。ネストした括弧は考慮していません。 - Q70
正規表現でMarkdownの見出し(#、##、### など)を検出するパターンは?
ANSWER^#{1,6}\s+(.+)$(複数行モード)クリックして解説を表示EXPLANATION^#{1,6}\s+(.+)$は行の先頭から1〜6個の#、空白、見出しテキストにマッチします。複数行モードが必要です。
- Q71
正規表現でTwitter/Xのハッシュタグを検出するパターンで考慮すべき点は?
ANSWER数字のみ無効、特殊文字での終了、Unicode対応クリックして解説を表示EXPLANATIONハッシュタグは#に続く文字で、数字のみは無効、途中の特殊文字で終了、長さ制限、Unicode文字(日本語など)のサポートなど考慮が必要です。
- Q72
正規表現でTwitter/Xのメンション(@username)を検出する際の制約は?
ANSWER英数字とアンダースコアのみ、15文字以内、数字のみ無効クリックして解説を表示EXPLANATIONユーザー名は英数字とアンダースコアのみ、15文字以内、数字のみは無効などの制約があります。
@[a-zA-Z_][a-zA-Z0-9_]{0,14}のようなパターンになります。 - Q73
正規表現でHTTP/HTTPS URLを検出する際、false positiveを減らすための工夫は?
ANSWER文末記号の除外、有効なTLD、URLエンコードの考慮クリックして解説を表示EXPLANATIONURLの検出では、文末のピリオドや括弧を含めない、有効なTLDのリストを使用、IPアドレス形式の考慮、国際化ドメイン名の扱いなどでfalse positiveを減らせます。
- Q74
正規表現で電話番号を国際形式に正規化する際のアプローチは?
ANSWER数字抽出、国番号判定、形式統一の段階的処理クリックして解説を表示EXPLANATION電話番号の正規化では、まず数字以外を除去、国番号の有無を判定、形式を統一するという段階的なアプローチが効果的です。libphonenumberなどのライブラリ使用も推奨されます。
- Q75
正規表現で日本語テキストから「名詞」を抽出することは可能ですか?
ANSWER形態素解析が必要で、正規表現だけでは不可能クリックして解説を表示EXPLANATION正規表現は形態素解析(品詞判定)の機能を持ちません。日本語の名詞抽出には、MeCabやSudachiなどの形態素解析器を使用する必要があります。
- Q76
正規表現で回文(「しんぶんし」など)を検出することは?
ANSWER一般的には不可能(再帰で限定的に可能な実装もある)クリックして解説を表示EXPLANATION正規表現は正規言語を扱い、回文の検出には文脈自由文法が必要です。一部の実装では再帰パターンで限定的に対応できますが、一般的には不可能です。
- Q77
正規表現
^((.)(.)(.?).?\4\3\2)$は何に限定的にマッチしますか?ANSWER最大7文字の回文クリックして解説を表示EXPLANATIONこのパターンは後方参照を使用して、最大7文字の回文にマッチします。中央の文字は1文字または空で、両端から対称な文字配置を検証します。
- Q78
正規表現でプライムナンバー(素数)かどうかを判定することは?
ANSWER可能(バックトラックを利用したトリック)クリックして解説を表示EXPLANATION正規表現で素数判定が可能な有名なトリック
^.?$|^(..+?)\1+$(合成数にマッチ)があります。1文字単位で因数分解をシミュレートしています。 - Q79
正規表現
^.?$|^(..+?)\1+$で文字列「aaaa」(4つのa)はマッチしますか?ANSWERマッチする(4は合成数)クリックして解説を表示EXPLANATIONこのパターンは1文字以下、または2文字以上のパターンが2回以上繰り返す文字列にマッチします。「aaaa」は「aa」×2なのでマッチします(4は合成数)。
- Q80
正規表現のテスト・デバッグツールとして広く使われているのは?
ANSWERregex101.com、regexr.comなどのオンラインツールクリックして解説を表示EXPLANATIONregex101.com、regexr.com、debuggex.comなどのオンラインツールは、パターンの説明、マッチのハイライト、パフォーマンス分析などの機能を提供します。
- Q81
正規表現を使用したコードレビューで確認すべき点として最も重要なのは?
ANSWERReDoS脆弱性、エッジケース、可読性、テスト網羅性クリックして解説を表示EXPLANATION正規表現のレビューでは、ReDoS脆弱性、エッジケースの処理、可読性(コメント、命名)、テストの網羅性を確認することが重要です。
- Q82
正規表現の保守性を高めるためのベストプラクティスは?
ANSWER拡張モード、名前付きグループ、分割、テストクリックして解説を表示EXPLANATION保守性向上には、拡張モードでの整形・コメント、名前付きキャプチャグループ、複雑なパターンの分割、十分なテストケースが効果的です。
- Q83
正規表現
(?x) ^ # 文字列の先頭 (?=.*[A-Z]) # 大文字を含む (?=.*[a-z]) # 小文字を含む (?=.*\d) # 数字を含む .{8,} # 8文字以上 $ # 文字列の末尾のような書き方の利点は?ANSWER可読性と保守性が向上するクリックして解説を表示EXPLANATION拡張モード(
(?x))を使用すると、空白とコメントが許可され、複雑なパターンを読みやすく、保守しやすく記述できます。 - Q84
正規表現でUnicode正規化(NFC/NFD)が問題になるケースは?
ANSWERアクセント付き文字など、複数の表現形式がある場合クリックして解説を表示EXPLANATION同じ見た目の文字でも、合成済み文字(NFC: é)と基底文字+結合文字(NFD: e + ´)では内部表現が異なります。正規表現でマッチしない場合があるため、事前に正規化が必要です。
- Q85
正規表現エンジンのオプティマイザが行う最適化として一般的なものは?
ANSWER先頭文字スキップ、固定文字列検索、バックトラック削減クリックして解説を表示EXPLANATION正規表現エンジンは、先頭文字の高速スキップ、固定文字列の事前検索、不要なバックトラックの削減などの最適化を行います。
- Q86
正規表現でDNAシーケンス(A、T、G、Cの配列)を扱う際の考慮点は?
ANSWER長大なデータ、効率的なアルゴリズム、専用ツールの検討クリックして解説を表示EXPLANATIONDNAシーケンスは非常に長く(数百万塩基)、パターンも複雑になる可能性があります。効率的なアルゴリズム(Boyer-Mooreなど)や専用ツール(BLAST等)の使用が推奨されます。
- Q87
正規表現を使用したテキストエディタの検索・置換機能で一般的にサポートされていない機能は?
ANSWER置換時のプログラム実行(コード評価)クリックして解説を表示EXPLANATIONテキストエディタの正規表現機能は通常、基本的なパターンマッチと後方参照による置換をサポートしますが、プログラム実行や動的な計算は通常サポートされません。
- Q88
正規表現の代替として、より適切な場合があるツールや手法は?
ANSWERパーサー、状態機械、文字列関数など用途に応じて選択クリックして解説を表示EXPLANATION用途によっては、パーサージェネレーター、専用パーサーライブラリ、状態機械、文字列関数(split、indexOf等)がより適切な場合があります。正規表現は万能ではありません。
- Q89
正規表現で「先読み」と「後読み」の両方を使用する複合パターンの例として適切なのは?
ANSWER(?<=$)\d+(?=.00)クリックして解説を表示EXPLANATION(?<=\$)\d+(?=\.00)は、前に「$」があり(後読み)、後ろに「.00」が続く(先読み)数字にマッチします。「$100.00」の「100」にマッチします。 - Q90
正規表現の国際化対応で、言語によって異なる「単語の境界」の扱いは?
ANSWER日本語などスペースで区切らない言語では\bが期待通り動作しないクリックして解説を表示EXPLANATION日本語・中国語などは単語間にスペースがないため、
\b(単語境界)の動作が英語とは異なります。形態素解析や言語固有の処理が必要な場合があります。
- Q91
正規表現でスタックオーバーフローが発生する可能性があるのはどのような場合ですか?
ANSWER深い再帰や大量のバックトラックが発生する場合クリックして解説を表示EXPLANATION非常に深い再帰や、長い文字列に対する複雑なパターンでバックトラックが多発すると、スタックオーバーフローが発生する可能性があります。特に再帰パターン使用時に注意が必要です。
- Q92
正規表現
(*SKIP)(*FAIL)(PCREなど)の組み合わせの用途は?ANSWER特定のパターンを除外してマッチをスキップするクリックして解説を表示EXPLANATION(*SKIP)(*FAIL)は、その位置でマッチを「飛ばす」ために使用されます。特定のパターンを除外して他のパターンをマッチさせる際に有用です。 - Q93
正規表現で「バックトラッキング制御動詞」(
(*PRUNE)、(*COMMIT)など)が提供するものは?ANSWERバックトラック動作の細かい制御クリックして解説を表示EXPLANATIONバックトラッキング制御動詞は、正規表現エンジンのバックトラック動作を細かく制御できます。特定の位置でのバックトラック禁止やマッチの確定などが可能です。
- Q94
正規表現で条件分岐
(?(condition)yes|no)の「condition」として使用できるものは?ANSWERキャプチャグループの有無、アサーションなどクリックして解説を表示EXPLANATION条件として、キャプチャグループ番号(そのグループがマッチしたか)、先読み/後読みアサーション、再帰レベルなどが使用できます(実装による)。
- Q95
正規表現ライブラリRE2(Google製)の特徴として正しいものは?
ANSWER線形時間保証でReDoSに安全、後方参照は非サポートクリックして解説を表示EXPLANATIONRE2は線形時間でマッチングを保証するため、ReDoS攻撃に対して安全です。ただし、後方参照などの一部機能はサポートしていません。
- Q96
正規表現でYAMLやTOMLなどの設定ファイルをパースすることの問題点は?
ANSWER複雑な文法のため正規表現では完全なパースが困難クリックして解説を表示EXPLANATIONYAMLやTOMLは複雑な文法(インデントベース、マルチライン、アンカー/エイリアスなど)を持ち、正規表現で完全にパースするのは非常に困難です。専用パーサーを使用すべきです。
- Q97
正規表現
\p{Script=Han}は何にマッチしますか?ANSWER漢字(Han script)クリックして解説を表示EXPLANATION\p{Script=Han}はUnicodeの漢字(Han script)にマッチします。日本語、中国語、韓国語で使用される漢字文字が対象です。 - Q98
正規表現のベンチマーク時に注意すべき点として不適切なものは?
ANSWER単一の短い入力でのみテストすれば十分クリックして解説を表示EXPLANATIONベンチマークでは、マッチ/不マッチ両方のケース、様々な入力長、ウォームアップ実行、JITコンパイルの影響などを考慮する必要があります。単一パターンのみのテストは不十分です。
- Q99
正規表現で「先読み」を複数組み合わせる(
(?=.*A)(?=.*B)(?=.*C))パターンの用途は?ANSWER複数条件の同時検証(AND条件)クリックして解説を表示EXPLANATION複数の先読みを組み合わせることで、複数の条件を同時にチェックできます。パスワード検証(大文字・小文字・数字・記号を含む)などで使用されます。
- Q100
正規表現を使用したサニタイズ処理のリスクとして最も重要なのは?
ANSWERバイパス可能で不完全になりがちクリックして解説を表示EXPLANATION正規表現によるサニタイズは、エンコーディングの違い、新しい攻撃パターン、バイパス手法などにより不完全になりがちです。ホワイトリスト方式やコンテキストに応じたエスケープを使用すべきです。