6.23 正規表現集

  • 先頭の2つの単語を入れ替える
s/(\S+)(\s+)(\S+)/$3$2$1/;
  • "キーワード=値"形式の文字列からキーワードと値を取得する
m/^(\w+)\s*=\s*(.*?)\s*$/;     # キーワードは$1, 値は$2
  • 80個以上の文字を含む行を取得する
m/.{80,}/; 
length() >= 80; 
  • MM/DD/YY HH:MM:SS形式の日付を取得する
m|(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)|
  • ディレクトリを入れ替える
s(/usr/bin)(/usr/local/bin)g;
  • %7E(16進)エスケープを展開する
s/%([0-9A-Fa-f][0-9A-Fa-f])/chr(hex($1))/ge
  • C言語のコメントを削除する
s{
     /*     # 開きデリミタにマッチ
     .*?     # 0個以上の任意の文字にマッチ(最短マッチ)
     */     # 閉じデリミタにマッチ
}{}gsx;
  • 先頭と末尾の空白文字を削除
s/^\s+//g;
s/\s+$//g;
  • \とその後のnを本物の改行文字に置換する
s/\\n/\n/g;
  • 完全修飾されたシンボル名からパッケージ名を削除する
s/^.*:://;
  • 3つのドット(.)で区切られた4つの数値(IPアドレス)を取得する
# 注意: 127.1や2130706433などにはマッチしない
m{
      ^   ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] )
      \.  ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] )
      \.  ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] )
      \.  ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] )
      $
  }x;
  • ファイル名の前のパス名を削除する
s{^.*/}{}
  • TERMCAPからカラムの設定を抽出する
$cols = ( ($ENV{TERMCAP} || " ") =~ m/:co#(\d+):/ ) ? $1 : 80;
  • プログラム名と引数からディレクトリ部分を削除する
($name = " $0 @ARGV") =~ s{ /\S+/ }{ }g;
  • OSの種類をチェックする
die "This isn't Linux" unless $^O=~ m/linux/i;
  • 改行とそれに続く空白文字を削除して、行を連結する
$/ = "";   # 一気読み
s/\n\s+/ /g;
  • 文字列内の全ての数宇を抽出する。
@nums = m/(\d+\.?\d*|\.\d+)/g;
  • 全て大文字の単語を検出する
@capwords = m/(\b\p{ Upper-case Letter }+\b/g;
  • 全て小文字の単語を検出する
@lowords = m/(\b\p{ Lower-case Letter }+\b/g;
  • 先頭の文字のみ大文字の単語を検出する
@icwords = m{
  ( \b
    [\p{ Upper-case Letter }\p{ Title-case Letter }]
    \p{ Lower-case Letter } *
   \b )
}gx;
  • 単純なHTMLファイルからリンクを抽出する
@links = m/<A[^>]+?\bHREF\s*=\s*["']?([^'" >]+?)['"]?\s*>/ig;
  • $_内のミドルネームを抽出する
$initial = /^\S+\s+(\S)\S*\s+\S/ ? $1 : "";
  • "..."を''....''に置き換える
s/"([^"]*)"/''$1''/g;
  • 文を抽出する(文の間には空白文字が2つ挿入されていなければならない)
{ 
  local $/ = "";
  while (<>) {
    s/\n/ /g;
    s/ {3,}/ /g;
    push @sentences, m/(\S.*?[!?.])(?= {2}|\Z)/g;
  }
}
  • YYYY-MM-DD形式の日付を検出する
m/\b(\d{4})-(\d\d)-(\d\d)\b/;         # YYYYは$1, MMは$2, DDは$3
  • 電話番号(北米方式)を検出する
m/ ^
  (?:
   1 \s (?: \d\d\d \s)?     # 1または1とエリアコード
   |                                        # または。。。
   \(\d\d\d\) \s               # 丸括弧付きのエリアコード
   |                                        # または。。。
   (?: \+\d\d?\d? \s)?     # 国番号(オプション)
   \d\d\d ([\s\-])             # エリアコード
  )
  \d\d\d (\s|\1)                # プレフィックス(およびエリアコードの区切り文字)
  \d\d\d\d                         # 変換
  $
/x;
  • "Oh my God"などを検出する
m/\boh\s+my\s+gh?o(d(dess(es)?|s?)|odness|sh)\b/i;