Snow Flower Text は 正規表現を Railroad図 で可視化することが可能です。追加のインストールなしに利用を始めることができます。一見して理解できない正規表現も、可視化することで直感的に理解できるようになります。
次の例はメールアドレスにマッチする簡易的な正規表現です。
正規表現
^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$この正規表現は厳密ではない簡易的な記述ですが、一見して理解するのは難しいくらいに複雑に見えます。 この正規表現をRailroad 図で可視化すると次のようになります。
Railroad Diagram
可視化によって短時間で全体を理解することが簡単になったでしょう。このように議論の余地もなく正規表現の可視化の効果は非常に強力です。
| Railroad 図はパターンの直感的な理解が可能です。正規表現の可視化は Snow Flower Text の独自拡張機能です。 |
使い方
AsciiDoc の [regex] ブロックに 正規表現を記述することで Railroad図で可視化された正規表現を文書に埋め込む事ができます。正規表現はPCRE(Perl Compatible Regular Expressions)シンタックスが使用できます。
シンタックスに AsciiDoc を選択します。
正規表現の可視化には
regexブロックを使用します。
以下は U.S ZIPコードに一致する正規表現の例です。
[regex]
--------------------------------------------
^\d{5}$
--------------------------------------------正規表現の詳細は “POSIX.2 正規表現” を参照してください。PCRE標準の詳細については PCRE を参照してください。
可視化の見本
短い正規表現と可視化図の対応を以下に示します。
Literal
LiteralAnchors
Start of line
^abc End of line
abc$ Word boundary
\babc Non-word boundary
\BabcCharacter types
Any character
. Digit
\d Non-digit
\D Hirozontal white space
\h non hirozontal white space
\H White space
\s Non-white space
\S Vertical white space
\v Non vertical white space
\V word
\w non-word
\WCharacter classes
文字クラスは、個々の文字の集合と一致するかどうかを示します。 先頭のコメントは「one of」か「none of」のいずれかになります。
Positive character class
[ab-d] Negative character class
[^ab-d] a or b
a|bSpecial characters
Backspace character
[\b]Quantifiers
0 or more
a* 1 or more
a+ Optional(0 or 1)
a? Exactly 2
a{2} Between 2 and 5
a{2,5} 2 or more
a{2,}POSIX character classes
Letters and digits
[[:alnum:]] Letters
[[:alpha:]] Ascii codes 0 – 127
[[:ascii:]] Space or tab only
[[:blank:]] Control characters
[[:cntrl:]] Decimal digits
[[:digit:]] Visible characters, except space
[[:graph:]] Lowercase letters
[[:lower:]] Visible characters
[[:print:]] Visible punctuation characters
[[:punct:]] Whitespace
[[:space:]] Uppercase letters
[[:upper:]] Word characters
[[:word:]] Hexadecimal digits
[[:xdigit:]]Special characters
Newline
\n Carriage return
\r Tab
\t Hexadecimal character YY
\x41 Hexadecimeal character YY
\x{123} One digit
\d One non-digit
\D One whitespace
\s One non-whitespace
\S One word character
\w One non-word character
\WEscape sequences
Escapes a special character
\\Escape Block Quoted
\Q(C++ ?)\Eグループ
Capturing group
(...) Non-capturing group
(?:...)複雑な正規表現の可視化例
以下は実際に使用される複雑な正規表現の可視化例です。
URL: HTTP/HTTPS
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*) タイムスタンプ: YYYY-MM-DD
^\d{4}-\d{1,2}-\d{1,2}$ IPアドレス
[regex]
---------------------------------------
(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
--------------------------------------- メールアドレスに99%合致する正規表現
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])