preg_replaceで加算する方法

例えば、「ファイル1」という文字列を「ファイル2」へ置換する場合。

// 失敗
preg_replace( '/(\d+)$/', '$2 + 1', 'ファイル1' );
// 成功
preg_replace( '/(\d+)$/e', '"$2" + 1', 'ファイル1' );

重要なのは修飾子「e」。

PHP: 正規表現パターンに使用可能な修飾子 – Manual

e (PREG_REPLACE_EVAL)

この修飾子を設定すると、preg_replace()
は、置換文字列において後方参照に関する通常の置換を行った後、PHP コードとして評価し、検索文字列を置換するためにその結果を使用します。置換された後方参照においては、単引用符や二重引用符、バックスラッシュ (\)および NULL 文字はバックスラッシュでエスケープされます。

で、僕が本当にやりたかったのは「ファイル名-1」を「ファイル名-2」へと置換すること。-(ハイフン)がマイナスと判定されるので少し戸惑った。解決法は以下。

// 計算する部分を()で囲む
preg_replace( '/(-)(\d+)$/e', '"$1".("$2" + 1)', 'ファイル名-1' )

バックスラッッシュつけたりいろいろやって上記で解決。引用符も試行錯誤でエラーが出なくなったものを掲載してるので、もっとスマートな囲み方があるかも。

  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。