悪いRegexと良いregexと最良regex

13
自自自自 自自 自自自 自自自 自自自 ・・ 自自:23 自自 : 1992 自 12 自 05 自 自自 : 自自自 自自自 自自自自自自自 、、 自自 自自自自自

Transcript of 悪いRegexと良いregexと最良regex

Page 1: 悪いRegexと良いregexと最良regex

自己紹介 名前:ディン・ズイ・タイン 年齢:23 生年 : 1992 年 12 月 05 日 趣味 : ゲーム、漫画、プログラミング 専門:エンジニア

Page 2: 悪いRegexと良いregexと最良regex

悪い REGEX と良いREGEX と最良 REGEX

Page 3: 悪いRegexと良いregexと最良regex

発表の内容1. REGEX とは

2. 良い REGEX と悪い REGEX 3. マッチする入力とマッチしない入力

4. 良い REGEX と悪い REGEX の比較

5. 最良 REGEX6. 最後に

Page 4: 悪いRegexと良いregexと最良regex

REGEX とは

正規表現( RegExp/regex )とは、文字列のパターンを表現する表記法 /pattern/

Page 5: 悪いRegexと良いregexと最良regex

良い REGEX と悪い REGEX [2016-05-02T16:05:18 #92430] INFO -- : Served asset /navi/hu-0005-03/style.css - 304 Not Modified (1ms) 必要な情報時間 : 2016-05-02T16:05:18 #92430種類 : INFO情報 : Served asset /navi/hu-0005-03/style.css - 304 Not Modified (1ms)1. \[(.*)\]\s+(.*)\s--\s:\s+(.*)

2. \[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+(.*)\s--\s:\s+(.*)

Page 6: 悪いRegexと良いregexと最良regex

良い REGEX と悪い REGEX [2016-05-02T16:05:18 #92430] INFO -- : Served asset /navi/hu-0005-03/style.css - 304 Not Modified (1ms) 必要な情報時間 : 2016-05-02T16:05:18 #92430種類 : INFO情報 : Served asset /navi/hu-0005-03/style.css - 304 Not Modified (1ms)1. \[(.*)\]\s+(.*)\s--\s:\s+(.*)

2. \[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+(.*)\s--\s:\s+(.*)

Regex pattern は長ければ長いほど良いです。

Page 7: 悪いRegexと良いregexと最良regex

マッチする入力とマッチしない入力1. \[(.*)\]\s+(.*)\s--\s:\s+(.*)

2. \[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+(.*)\s--\s:\s+(.*)

[2016-05-02T16:05:18 #92430] INFO -- : Served asset /navi/hu-0005-03/style.css - 304 Not Modified (1ms)

(1) すべて文字を受けるように、 (.*) を使います -> マッチしない入力(2) 時間の詳細フォーマットを使います -> マッチする入力

Page 8: 悪いRegexと良いregexと最良regex

良い REGEX と悪い REGEX の比較 \[(.*)\]\s+(.*)\s--\s:\s+(.*): 324

Page 9: 悪いRegexと良いregexと最良regex

良い REGEX と悪い REGEX の比較 \[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+(.*)\s--\s:\s+(.*): 158

Page 10: 悪いRegexと良いregexと最良regex

最良 REGEX 悪い \[(.*)\]\s+(.*)\s--\s:\s+(.*)

良い \[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+(.*)\s--\s:\s+(.*)

[2016-05-02T16:05:18 #92430] INFO -- : Served asset /navi/hu-0005-03/style.css - 304 Not Modified (1ms)

Page 11: 悪いRegexと良いregexと最良regex

最良 REGEX 悪い \[(.*)\]\s+(.*)\s--\s:\s+(.*)

良い \[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+(.*)\s--\s:\s+(.*)

最良(37)\[([12]\d{3}-[01]\d-[0-3]\dT[0-2]\d:[0-6]\d:[0-6]\d +#\d+)\]\s+([A-Z]*)\s-+\s:\s+(.*)

Page 12: 悪いRegexと良いregexと最良regex

最後に良い regex を書くために:- マッチする入力を使います。(ステップ数が減る)

- pattern の間に( .* )を使わないようにする。

Page 13: 悪いRegexと良いregexと最良regex

ご静聴ありがとうございました!