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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

2756閲覧

PHP正規表現で不特定のプロパティの置換削除

sika

総合スコア52

PHP

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2017/11/21 21:12

HTMLのタグ内にあるonclick属性及び中身がユニーク文字列のプロパティの文字列を削除(空白に置換)するための参照元の正規表現が書けません。

置換元のHTMLタグ

html

1<div id="alertText01" title="テキスト1" onclick="window.alert('アラートテキスト1')">テキスト</div> 2<div id="alertText02" title="テキスト2" onclick="window.alert('アラートテキスト2')">テキスト</div> 3<div id="alertText03" title="テキスト3" onclick="window.alert('アラートテキスト3')">テキスト</div>

php

1$result = ""; 2foreach($array as $key=>$val ){ 3 $alert= '\<div id=\"(.*?)\" title=\"(.*?)\" onclick=\"(.*?)\">(.*?)</div>'; /* 置換前のタグ*/ 4 $nonalert= '\<div id=\"(.*?)\" title=\"(.*?)\">(.*?)</div>'; /* 置換後のタグ*/ 5 $str= str_replace($alert, $nonalert, $val); 6 $result .= $str; 7} 8return $result;

上記コードの変数$alertにはonclick属性を含めた置換前のタグ
変数$nonalertにはonclick属性を取り除いた置換後のタグを指定しているのですが上手くいきません
最終的には

html

1<div id="alertText01" title="テキスト1">テキスト</div> 2<div id="alertText02" title="テキスト2">テキスト</div> 3<div id="alertText03" title="テキスト3">テキスト</div>

となってくれるのが理想です。
ご教授宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

まず、str_replace正規表現の使えない関数です。

そして、書かれたように決まった形のものなら、正規表現で処理もできますが、プロパティの有無や順序まで違うものにヒットさせようとすれば、かなりめんどくさいことになります。

php

1$pattern = '/(<div\s+id=".*?"\s+title=".*?")\s+onclick=".*?"/u'; 2 3$result = preg_replace($pattern, '\1 ', $input);

投稿2017/11/21 23:17

maisumakun

総合スコア145183

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

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

sika

2017/11/22 09:21 編集

ご回答ありがとうございます。 もしかしてとは思ったのですが、やはり使えないのですね プロパティの有無や順番は上記の型で確定なのですが、タグの数はユニークに動的に出力されるためループ内での書き換え処理が必須な状況でした。
guest

0

ベストアンサー

PHP

1$str=<<<eof 2<div id="alertText01" title="テキスト1" onclick="window.alert('アラートテキスト1')">テキスト</div> 3<div id="alertText02" title="テキスト2" onclick="window.alert('アラートテキスト2')">テキスト</div> 4<div id="alertText03" title="テキスト3" onclick="window.alert('アラートテキスト3')">テキスト</div> 5eof; 6$pattern="/(<div .*?)( +onclick=([\"']).*?\3)(.*?>)/"; 7$str=preg_replace($pattern,"$1$4",$str); 8print "<pre>"; 9print htmlspecialchars($str);

投稿2017/11/22 00:36

yambejp

総合スコア114773

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

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

sika

2017/11/22 09:21 編集

すべての構文の意味は理解できていませんが 理想の形としての出力ができました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問