2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】正規表現でHTMLの特定のclassを置き換える方法

Last updated at Posted at 2018-07-18

最近、正規表現を触る機会が増えてきまして、その中でタイトルの方法がなかなか見つからなかったので、
「無いなら自分で書いてみよう」ということで。

TL;DR

「before」を「after」に置き換えたい!

これを
<div class="before"> //単体
<div class="hoge before"> //前に他のクラスがついている場合
<div class="before fuga"> //後ろに他のクラスがついている場合
<div class="hoge before fuga"> //前後に他のクラスがついている場合
<div class="hoge_before fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge-before fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hogebefore fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge before_fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge before-fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge beforefuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
こうしたい!
<div class="after"> //単体
<div class="hoge after"> //前に他のクラスがついている場合
<div class="after fuga"> //後ろに他のクラスがついている場合
<div class="hoge after fuga"> //前後に他のクラスがついている場合
<div class="hoge_before fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge-before fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hogebefore fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge before_fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge before-fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge beforefuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)

#サンプルコード

サンプルコード
<?php
  $pattern = '/class=((?:\s|")?)(.*?)((?:\s|")+)before((?:\s|")+)(.*?)((?:\s|")?)/';
  $replacement = 'class=$1$2$3after$4$5$6';
  $html = <<<EOT
<div class="before"> //単体
<div class="hoge before"> //前に他のクラスがついている場合
<div class="before fuga"> //後ろに他のクラスがついている場合
<div class="hoge before fuga"> //前後に他のクラスがついている場合
<div class="hoge_before fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge-before fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hogebefore fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge before_fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge before-fuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
<div class="hoge beforefuga"> //置き換えたいクラス名を含む他のクラスがついている場合(これは置き換えない)
EOT;

$html = preg_replace($pattern, $replacement, $html);
print($html);

流れは下記を参照
image (1).png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?