0
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 3 years have passed since last update.

PHPの正規表現でHTMLタグ”以外”の検出

Last updated at Posted at 2020-05-19

HTMLタグ”以外”の検出

PHPの正規表現でHTMLタグ”以外”を検出するために少々調べたのでまとめます。

与えられた文字列に
「HTMLタグが含まれていなければオッケー」
みたいなことをしたかったわけです。

アホみたいな書き方せずにもうちょっとちゃんと書くと、
与えられた文字列にHTMLタグが含まれていなければ
preg_match()1を返す
ということです。

パッと調べてみた感じ、HTMLタグをみつける正規表現はすぐでてきたのですが、
”以外”となると意外とみつからなかったです。いがいなだけにね。うん。

で、結果を先に書くと以下の通り

^(?!.*<("[^"]*"|'[^']*'|[^'">])*>).*$

正直、正規表現むっず〜となって途中で理解を断念したので、
完璧には理解できていませんが分かってることだけ書いておきます。

HTMLタグの検出

これは調べたらすぐに出てきました。

<(".*?"|'.*?'|[^'"])*?>

参考: iPentac.com

説明は参考に飛んでいただければすぐ出てくるのでそちらで。
要は<>に囲まれていて、中になにか書いてればそれはHTMLタグだ!っていうことです。

”以外”の検出

こちらも調べたら色々出てきましたが、否定先読みという言葉があるようですね。
詳しく知りたい方は正規表現 否定先読みで調べていただければもりもり出てくると思います。

こちらを参考にというかもうコピペして完成しました。
参考: taketiyo.log

確認のために使用したサービス

確認に使ったサービスはこちら。
PHP Live Regex
同様のページはたくさんありますが、
見やすくてなんだかかっこよかったので今後はこれを採用します。
おめでとう!ありがとう!

(追記 2020/05/21)
このサービスすごい。
Regexper
アホな自分でも視覚的に一発で理解できました。

今回適用した正規表現だとこんな感じになりました。
image.png
下の問題点にも挙げてますが、このままだと<>だけでも認識してしまいますね。
ということが一発でわかっちゃうのでとっても便利。

問題点

どうやらこの書き方だと<>だけでもHTMLタグとして認識するようです。
なんとなくもう少し良い書き方あるんじゃないかと思うのでなにか分かったら追記します。

まとめ

以下でHTMLタグ”以外”を検出できちゃ〜う!

^(?!.*<("[^"]*"|'[^']*'|[^'">])*>).*$

正規表現あんまわからん。
精進します。

0
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
0
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?