PHPで、一定の文字列から、[]でくくられた文字列(中身だけ)を$sakujoに入れた上で、[]も含めて全て削除する方法([、]という記号も削除)を教えて下さい。

また、HTMLタグが可能な投稿CSM(ブログの記事投稿画面など)からURLのみを完全削除する方法を教えて下さい。

回答の条件
  • 1人2回まで
  • 登録:2010/01/29 19:03:14
  • 終了:2010/02/05 19:05:03

ベストアンサー

id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512010/01/30 06:47:27

ポイント35pt

preg_match_allで対象の文字列を配列に入れてから、preg_replaceで置換してはいかがでしょうか?

http://php.net/manual/ja/function.preg-match-all.php

http://www.php.net/manual/ja/function.preg-replace.php

$text = "ここに[、]対象のテキスト[(文章)]を入れてください。";
$pattern = "/\[(.+?)\]/";
preg_match_all($pattern, $text, $sakujo);
// [0]にはパターン全体にマッチする文字列が入っているので、[1]を使用します。
print_r($sakujo[1]);
echo "<br />";

// 元のテキストから抽出した文字列をすべて削除します。
$text = preg_replace($pattern, '', $text);
echo $text ."<br />";

CMSは何を使用しているのでしょうか?

記事投稿・編集画面のテキスト入力欄(TEXTAREA)のURLを削除したい場合は、次のようなブックマークレットを使用すると可能です。

javascript:(function(){
 var d=document;
 function r(s){
return s.replace(/(http:\/\/.+)\r*\n*/g,'');
} if(d.selection{
 d.selection.createRange().text = r(d.selection.createRange().text);
}else{
 var ta= d.getElementsByTagName('TEXTAREA');
 for(var i=0;i<ta.length;i++){
 if(ta[i].value){
 var s=ta[i].selectionStart;
 var e=ta[i].selectionEnd;
 var v=ta[i].value;
 var t=v.slice(s,e);
 if(t){
 ta[i].value=v.slice(0,s)+r(t)+v.slice(e);
}}}}})();

※テキスト入力欄(TEXTAREA)で、選択した範囲内にあるURLをすべて削除します。

※IE7、Firefox3.5.xおよび3.6で動作しました。

自分の日記ですが、人力検索でHTMLタグを表示したい時のお助けツールで紹介したブックマークレットを少しだけ改変して作りました。

お望みの事と違う場合は、何をしたいのかもう少し具体的に教えてください。

その他の回答(1件)

id:km1967 No.1

km1967回答回数541ベストアンサー獲得回数402010/01/29 19:45:26

ポイント35pt

$strは元の文字列

preg_replace("/\[" . $sakujo . "\]/", "", $str);
id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512010/01/30 06:47:27ここでベストアンサー

ポイント35pt

preg_match_allで対象の文字列を配列に入れてから、preg_replaceで置換してはいかがでしょうか?

http://php.net/manual/ja/function.preg-match-all.php

http://www.php.net/manual/ja/function.preg-replace.php

$text = "ここに[、]対象のテキスト[(文章)]を入れてください。";
$pattern = "/\[(.+?)\]/";
preg_match_all($pattern, $text, $sakujo);
// [0]にはパターン全体にマッチする文字列が入っているので、[1]を使用します。
print_r($sakujo[1]);
echo "<br />";

// 元のテキストから抽出した文字列をすべて削除します。
$text = preg_replace($pattern, '', $text);
echo $text ."<br />";

CMSは何を使用しているのでしょうか?

記事投稿・編集画面のテキスト入力欄(TEXTAREA)のURLを削除したい場合は、次のようなブックマークレットを使用すると可能です。

javascript:(function(){
 var d=document;
 function r(s){
return s.replace(/(http:\/\/.+)\r*\n*/g,'');
} if(d.selection{
 d.selection.createRange().text = r(d.selection.createRange().text);
}else{
 var ta= d.getElementsByTagName('TEXTAREA');
 for(var i=0;i<ta.length;i++){
 if(ta[i].value){
 var s=ta[i].selectionStart;
 var e=ta[i].selectionEnd;
 var v=ta[i].value;
 var t=v.slice(s,e);
 if(t){
 ta[i].value=v.slice(0,s)+r(t)+v.slice(e);
}}}}})();

※テキスト入力欄(TEXTAREA)で、選択した範囲内にあるURLをすべて削除します。

※IE7、Firefox3.5.xおよび3.6で動作しました。

自分の日記ですが、人力検索でHTMLタグを表示したい時のお助けツールで紹介したブックマークレットを少しだけ改変して作りました。

お望みの事と違う場合は、何をしたいのかもう少し具体的に教えてください。

  • id:rouge_2008
    URL削除のブックマークの方がなぜか動作しませんでしたので、もう一度貼り付けます。

    javascript:(function(){
    var d= document;
    function r(s){
    return s.replace(/(http:\/\/.+)\r*\n*/g,'');
    } if(d.selection){
    d.selection.createRange().text = r(d.selection.createRange().text);
    }else{
    var ta = d.getElementsByTagName('TEXTAREA');
    for(var i=0;i<ta.length;i++){
    if(ta[i].value){
    var s = ta[i].selectionStart;
    var e = ta[i].selectionEnd;
    var v = ta[i].value;
    var t = v.slice(s,e);
    if(t){
    ta[i].value = v.slice(0,s)+r(t)+v.slice(e);
    }}}}})();


    一応ブックマークの登録方法も記載します。

    Firefox:
    「ブックマーク」→「ブックマークの管理」を開いて、適当な場所(ブックマークツールバーなど)に「新しいブックマーク」を作成してください。
    名前の欄には適当に分かりやすい名前を入力して、URLの欄に上記のコードを入力するだけです。

    IE:
    「お気に入り」→「お気に入りに追加」を実行して、適当な名前で適当な場所に保存します。
    次に、追加したお気に入りの「プロパティ」を開いて、URLの欄を上記のコードに変更します。
    ※IEの場合は、1行ずつしかペーストできないので、ちょっと不便です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません