各言語正規表現対応表 - MODULE.JP

各言語正規表現対応表
A
p
p
e
n
d
i
x
各言語正規表現対応表
Shibuya Perl Mongers
小山 浩之 OYAMA Hiroyuki [email protected]
本特集ではPerl,Java(java.util.regex)
,PHP(preg,ereg)
,.NET(C#)の正規表現をそれぞれ解説してきました.いずれも
Perl バージョン5.005 互換を売り文句にしていますが,細かなところで動作の差異や制約があったり,最新のPerl バージョン5.8 で追加
された機能までは追いついていない部分や追い越している部分があったりと,さまざまな違いが散りばめられています.
誌面の都合上すべての差異を網羅することはできませんが,主な機能のうち,共通に使えるもの使えないものや動作に差異があるも
のを俯瞰できるように,表を用意しました.プラットフォームを渡り歩く際のガイドとして活用していただければ幸いです.
▼表 a マニュアル
言語
URL
Perl
http://www.perldoc.com/perl5.8.0/pod/perlre.html(perldoc perlre)
java.util.regex
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/package-summary.html
PHP
http://www.php.net/manual/ja/ref.pcre.php
.NET
http://www.microsoft.com/japan/msdn/library/ja/cpguide/html/cpconcomregularexpressions.asp
▼表 b キャプチャ・グループ化・前後読み・条件式
機能
役割
Perl
Java
PHP(preg)
(...)
キャプチャ用括弧
○
○
○
.NET
○
(?:...)
グループ化のみの括弧
○
○
○
○
(?=...)
先読み
○
○
○
○
(?!...)
否定の先読み
○
○
○
○
(?<=...)
戻り読み
○
○
○
○
(?<!...)
否定の戻り読み
○
○
○
○
(?<name>...)
名前付きキャプチャ
×
×
×
○
(??{code})
動的な正規表現
○
×
×
×
(?{code})
埋め込みコード
○
×
×
×
(?(condition) then | else)
条件
○
×
○
○
役割
Perl
Java
PHP(preg)
.NET
▼表 c 量指定子
機能
欲張りな量指定子(最長マッチ)
?
0もしくは1つ
○
○
○
○
*
0以上の繰り返し
○
○
○
○
+
1以上の繰り返し
○
○
○
○
{n}
n個の繰り返し
○
○
○
○
{n,}
n個以上の繰り返し
○
○
○
○
{n,m}
n個以上m個以下の繰り返し
○
○
○
○
非欲張りな量指定子(最短マッチ)
??
0もしくは1つ
○
○
○
○
*?
0以上の繰り返し
○
○
○
○
+?
1以上の繰り返し
○
○
○
○
{n}?
n個の繰り返し
○
○
○
○
{n,}?
n個以上の繰り返し
○
○
○
○
{n,m}?
n個以上m個以下の繰り返し
○
○
○
○
強欲な量指定子(アトミックなマッチ)
?+
0もしくは1文字
×
○
×
×
*+
0文字以上の繰り返し
×
○
×
×
++
1文字以上の繰り返し
×
○
×
×
{n}+
n個の繰り返し
×
○
×
×
{n,}+
n個以上の繰り返し
×
○
×
×
{n,m}+
n個以上m個以下の繰り返し
×
○
×
×
(次ページにつづく)
WEB +DB PRESS Vol.19 ●173
特別企画
1
文字列処理はこれでバッチリ!
A
p
p
e
n
d
i
x
(つづき)
▼表 d 文字クラス
PHP(preg)
.NET
\w
Unicodeも含む
Perl
[a-zA-Z0-9_]
[a-zA-Z0-9_]
Unicodeも含む
\d
Unicodeも含む
[0-9]
[0-9]
Unicodeも含む
\s
Unicodeも含む
[ \t\n\f\r\x0B]
[ \t\n\f\r\v]
[ \f\n\r\t\v\x85\p{Z}]
.
改行は含まない
モードによる
改行は含まない
改行は含まない
機能
Java
[...]
○
○
○
[^...]
○
○
○
○
○
[[a-z]&&[^hoge]]などの集合演算
×
○
×
×
[:alpha:]などのPOSIX文字クラス
○
△(\p{Alpha})
○
×
▼表 e Unicode プロパティ・スクリプト・ブロック
Perl
Java
PHP(preg)
.NET
\p{N}などのプロパティ
機能
○
○
×
○
\pNなどのプロパティの略記
○
○
×
×
\p{IsN}などの接頭子付きプロパティ
○
○
×
×
\P{Number}などの正式なプロパティ名
○
×
×
×
\p{N&}などの複合プロパティ
○
×
×
×
\p{Han}などのスクリプト
○
×
×
×
\p{IsHan}などの接頭子付きスクリプト
○
×
×
×
\p{InHiragana}などのブロック
○
○
×
×
\p{IsHiragana}などのブロック
×
×
×
○
\p{Hiragana}などの接頭子なしのブロック
△
○
×
×
\P{Prop}などの否定文字クラス
○
○
×
○
\p{^Prop}などの否定文字クラス
○
×
×
×
▼表 f マッチング・置換の構文
処理
コード
Perl
マッチング
if ($text =˜ m/pattern/) {
# マッチした
}
置換
$text =˜ s/pattern/format/;
Java(java.util.regex)
Java
マッチング
if (java.util.regex.Pattern.matches(pattern, text) {
// マッチした
}
置換
String text = "src text";
String replaced = text.replaceAll(pattern, format);
PHP(preg)
PHP
マッチング
if (preg_match("m/pattern/", $text)) {
// マッチした
}
置換
$replaced = preg_replace(pattern, format, text);
.NET(C#)
.NET
マッチング
using System.Text.RegularExpressions;
if (Regex.IsMatch(text, pattern)) {
// マッチした
}
置換
using System.Text.RegularExpressions;
string replaced = Regex.Replace(text, pattern, format);
174● WEB +DB PRESS Vol.19