Pattern


POINT Pattern 結合演算子 SYNTAX =~ DESC 左辺に指定されたデータに 右辺のパターン処理の結果を代入する


置換(Substitute)


SYNTAX s/regexp/置換文字列/
# this is a book $str = "This is a pen."; # 置換した結果で 左辺に代入される $str =~ s/pen/book/; POINT 区切り文字は / 以外も OK ( m と同じ )
# () で "くくる" こともできる s/text/txt/ s(text)(txt) s(text)/txt/
# e を指定すると Perl の式 として扱われる # print があるため出力される # s/(.+)\..{3}/"print \1\n"/e;



照合(Match)


SYNTAX m/PATTERN/OPT RET true : マッチ false : マッチせず POINT m の直後の区切り文字は任意 英数字 + " " 以外 [^[:alnum:] ]
# path を指定するなら [/] 以外を使うこと # MetaCharacter を指定すると MetaCharacter としての意味がなくなる $ret =~ m|/var/foo/.*| # Default "/" を指定するなら m は不要 # $ret =~ m/^foo/ $ret =~ /^foo/ # 左辺を省略すると $_ 扱いになる #
$_ =~ m/^foo/ m/^foo/ /^foo/
# 修飾子 i : Insentive o : Once ( Pattern 中の変数展開を一度しかしない ) g : Global ( 照合を Global にする == 繰り返す ) m : Multi Line 文字列を複数行として扱う s : Single Line 文字列を単一行として扱う x : Xtended ( Comment が利用可能な Regexp ) # i がないと 煩雑になる <(H|h)(R|r)> # これで OK <HR> # Pattern 中の 変数展開 を一度にすることで高速化する # 再評価が必要なら, o をつけないこと # RET # /var/log # /maillog # $str = "/var/log/maillog"; while ( $str =~ m|/.*?log| ) { print "$1\n" } # m が指定されていると \n を含む場合 # 複数行としてみなす # ^$ にマッチする # $str = foo\nbar\ngoo # これと同じ foo bar goo # s # \n があっても [.] のマッチの対象になる # str = "foo\nbar\ngoos\nfoo\nbar\ngoos"; while ( $str =~ m/.+?s/sg ) { print "$& \n"; } # x # indent など comment の記述も可能になる # " " は無視 # " " を指定するなら \ する # []文字クラス内なら " "扱い while ( $str =~ m| ( / # Directory 区切り文字 / .*? # 任意の文字列 log # 文字列 log で終わる ) |xg) { print "\1\n"; }



文字変換(Translate)


SYNTAX tr/SRC/DST
$str = "abc"; $str =~ tr/abc/xyz/; # 文字クラスの表記もできる $str =~ tr/a-z/A-Z/; # Modifier c : Complement d : Delete ( 検索リストの文字が変換リストになければ削除 ) s : 重複した場合 1 つにまとめる