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

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

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

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

正規表現

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

Q&A

解決済

1回答

1212閲覧

Re:phpの正規表現がわかりません!(preg_replaceを使ってます!)

.yuukun

総合スコア10

PHP

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

正規表現

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

0グッド

0クリップ

投稿2017/08/12 07:52

編集2017/08/12 08:10

前回の質問で解決にしたのですが、思い通りの動作をしていなかったので再度質問します!
前回の質問:https://teratail.com/questions/87971

やりたいこと
phpの正規表現を使ってhtmlのタグを消したい!

php

1//例1 2$html = '1<script>2</script>3<script>4</script>5'; 3$txt = preg_replace(正規表現,'',$html); 4var_dump($txt); //135 ←と表示したい。 5 6//例2 7$html = 'a<script>s</script>b<script>-</script>c'; 8$txt = preg_replace(正規表現,'',$html); 9var_dump($txt); //abc ←と表示したい。

↑が成り立つような正規表現を探しています。

状況
htmlを取得してきて分け合って改行文字を消している。
strip_tagsを使ってhtmlのタグを消しているが

<script></script>の間が残ってしまう。

正規表現を使ってこの間を消去する。

php

1//前回の課題 2$html = '1<script>2</script>3<script>4</script>5'; 3$txt = preg_replace('<script.*<\/script>','',$html); 4var_dump($txt); //15 と表示されてしまう。 5 6//前回の解決例 7$html = '1<script>2</script>3<script>4</script>5'; 8$txt = preg_replace('<script>[^(<\/script>)]*<\/script>','',$html); 9var_dump($txt); //135 と表示されてOK! 10 11//今回の課題 12$html = 'a<script>s</script>b<script>-</script>c'; 13$txt = preg_replace('<script>[^(<\/?script>)]*<\/script>','',$html); 14var_dump($txt); //a<script>s</script>bc と表示されてしまう。

どうやら
[^(/?script)]
と書いてはいるが
[^/?script]
と同じ処理をしてるっぽい。

よろしくお願いします!

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のように行ってはいかがでしょうか?

PHP

1<?php 2$html = '1<script>2</script>3<script>4</script>5'; 3$txt = preg_replace("/<script>.*?<\/script>/s", '', $html); 4var_dump($txt); //135 ←と表示したい。 5 6//例2 7$html = 'a<script>s</script>b<script>-</script>c'; 8$txt = preg_replace("/<script>.*?<\/script>/s", '', $html); 9var_dump($txt); //abc ←と表示したい。

投稿2017/08/12 08:02

s8_chu

総合スコア14731

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

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

.yuukun

2017/08/12 08:12

<script>.*?<\/script>ですと 一番最初の<script>と一番最後の</script>を見て正規化してしまうみたいで 出力が『15』になってしまうんです。(例2は『ac』と表示されてます。)
.yuukun

2017/08/12 08:44

すいません。 ご指摘どおり、?を付けていませんでした。 開発環境がネットに繋がっていないため手打ちをしていたのですが、 ?に重要性を感じず付けていませんでした。 本データの方でも動作確認をしたところ正しい値を取得できました。 s8_chuさん、ありがとうございます。そして、申し訳ありませんでした。 KiyoshiMotokiさん、ご指摘ありがとうございました。 .*と.*?の違いを調べてみよう思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問