質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2814閲覧

正規表現で いくつかの文字列以外 にマッチさせるためには?

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/07/23 09:33

編集2015/07/23 09:48

閉じタグが必要なのに閉じタグが無いものを探そうとしています。
※loadHTMLを利用しているので<iframe></iframe>などは必ず <iframe /> という空要素になります。
http://php.net/manual/ja/domdocument.loadhtml.php

<iframe>などは次に続く要素を取り込んで(?)しまい、正しく表示されなくなります。 そこで非空要素タグで <xxxx />となっているものを正規表現で見つけようとしています。

空要素の空要素タグは下記の方法で見つけることができました。

php

1preg_match_all("/<(area|base|colgroup|col|command|embed|hr|img|input|keygen|link|menuitem|meta|pram|source|track|wbr)[^>]*\/>/s",$str,$matches);

しかし、目的となる「非空要素で空要素となっているタグ」を見つける方法がわかりません。下記のような正規表現を作りましたがヒットしませんでした。

php

1preg_match_all("/<[^(area|base|colgroup|col|command|embed|hr|img|input|keygen|link|menuitem|meta|pram|source|track|wbr)][^>]*\/>/s",$str,$matches);

発見後は、閉じタグを追加するように書き換える予定です。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

hirohiro様が殆ど答えを出していますが・・・

PHP

1$r = array(); 2preg_match_all("/<(?!area|base|colgroup|col|command|embed|hr|img|input|keygen|link|menuitem|meta|pram|source|track|wbr)[^>]*\/>/s",$str,$matches,PREG_SET_ORDER); 3foreach($matches as $v) { 4 $r[] = $v[0]; 5}

これで$rに非空要素で空要素となっているタグが入ってくる…はずです。一応動作検証済ですが(汗

投稿2015/07/23 15:27

編集2015/07/23 15:29
yu-ri

総合スコア634

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/07/24 03:58

コードありがとうございます。このまま動作させることができました。 PREG_SET_ORDER という引数があったんですね。これ便利です。
guest

0

ベストアンサー

<[^(base)]* />この記述は「b」も「a」も「s」も「e」も含まないタグといった解釈をされそうに思います。
候補に「img」や「link」があるのでiframeも除外されているものと思います。
否定は面倒なので、非空要素のリストを作成したほうが簡単かもしれません。

ライブラリ次第で動作したりしなかったりするかも知れませんが、否定を使うなら次のような感じでいけるかも知れません。
<(?!base|hr)[^>]*?/>
※phpのライブラリは否定の先読みって動作しましたっけ?

投稿2015/07/23 13:30

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問