詳説正規表現を読んでいるのですが、正規表現の中にコメントを含める方法を知りました。 実際にいくつかのプログラミング言語で試してみたので、ご紹介します。
PHP
PHPでは、preg_match()に/xオプションを追加します。 /xオプションはフリーフォーマットと呼ばれる記法で、正規表現の中に、任意のコメントや空白を含めることができます。
複雑な正規表現を書きたいときに便利です。 空白によるインデントやコメントを活用して、複雑な正規表現でも可読性を保てます。
<?php $number = "abcde12345"; preg_match("/ # コメントが記述できます # フリーフォーマット (\d+) /x", $number, $matches1); // string(5) "12345" var_dump($matches1[1]); preg_match("/(?# この中はコメントが書けます)(\d+)/", $number, $matches2); // string(5) "12345" var_dump($matches2[1]);
Perl
PHPの正規表現はPCRE(Perl Compatible Regular Expressions)ということもあり、Perlでももちろんコメントが書けます。
my $number = "abcde12345"; # 12345 at test.pl line 3. warn $number =~ m/ # コメントが記述できます # フリーフォーマット (\d+) /x; # 12345 at test.pl line 9. warn $number =~ m/(?# この中はコメントが書けます)(\d+)/;
Ruby
Rubyでも、/xオプションを使ったフリーフォーマット記法が使えます。
number = "abcde12345"; / # コメントが記述できます # フリーフォーマット (?<num1>\d+) /x =~ number; # 12345 print(num1, "\n") /(?# この中はコメントが書けます)(?<num2>\d+)/ =~ number # 12345 print(num2, "\n")
まとめ
いくつかのプログラミング言語で試してみたのですが、/xオプションによる正規表現のフリーフォーマットは、とても便利であることがわかりました。
正規表現は括弧が入り組んだりすると、途端に複雑に見えてしまうことがあります。 今後、少しでも複雑な正規表現を書くときは、フリーフォーマット記法を活用していきたいです。
フリーフォーマットの注意点
フリーフォーマットの注意点として、すべての言語に実装されているわけではないようです。 これは言語実装によるのですが、たとえば私が調べた限り、JavaScriptには同様の機能がなさそうでした。
ただ、JavaScriptの正規表現にも、フリーフォーマットがあってもよさそうな気がします。 私の調査力が不足しているだけかもしれませんので、念の為、もう少し調査してみようと思います。
- 作者:Jeffrey E.F. Friedl
- 発売日: 2008/04/26
- メディア: 大型本