HTMLタグ”以外”の検出
PHPの正規表現でHTMLタグ”以外”を検出するために少々調べたのでまとめます。
与えられた文字列に
「HTMLタグが含まれていなければオッケー」
みたいなことをしたかったわけです。
アホみたいな書き方せずにもうちょっとちゃんと書くと、
与えられた文字列にHTMLタグが含まれていなければ
preg_match()
が1
を返す
ということです。
パッと調べてみた感じ、HTMLタグをみつける正規表現はすぐでてきたのですが、
”以外”となると意外とみつからなかったです。いがいなだけにね。うん。
で、結果を先に書くと以下の通り
^(?!.*<("[^"]*"|'[^']*'|[^'">])*>).*$
正直、正規表現むっず〜となって途中で理解を断念したので、
完璧には理解できていませんが分かってることだけ書いておきます。
HTMLタグの検出
これは調べたらすぐに出てきました。
<(".*?"|'.*?'|[^'"])*?>
参考: iPentac.com
説明は参考に飛んでいただければすぐ出てくるのでそちらで。
要は<>
に囲まれていて、中になにか書いてればそれはHTMLタグだ!っていうことです。
”以外”の検出
こちらも調べたら色々出てきましたが、否定先読み
という言葉があるようですね。
詳しく知りたい方は正規表現 否定先読み
で調べていただければもりもり出てくると思います。
こちらを参考にというかもうコピペして完成しました。
参考: taketiyo.log
確認のために使用したサービス
確認に使ったサービスはこちら。
PHP Live Regex
同様のページはたくさんありますが、
見やすくてなんだかかっこよかったので今後はこれを採用します。
おめでとう!ありがとう!
(追記 2020/05/21)
このサービスすごい。
Regexper
アホな自分でも視覚的に一発で理解できました。
今回適用した正規表現だとこんな感じになりました。
下の問題点にも挙げてますが、このままだと<>
だけでも認識してしまいますね。
ということが一発でわかっちゃうのでとっても便利。
問題点
どうやらこの書き方だと<>
だけでもHTMLタグとして認識するようです。
なんとなくもう少し良い書き方あるんじゃないかと思うのでなにか分かったら追記します。
まとめ
以下でHTMLタグ”以外”を検出できちゃ〜う!
^(?!.*<("[^"]*"|'[^']*'|[^'">])*>).*$
正規表現あんまわからん。
精進します。