• 締切済み

至急*正規表現教えて下さい

お世話になります。 正規表現で次のようにしたい場合の記述を教えてください。 1.HTMLタグ全てを削除 現在は <("[^"]*"|'[^']*'|[^'">])*> と指定しています。 2.「2012.1.1」や「2012.1.10」など一桁の数字だけ「2012.01.01」「2012.01.10」と二桁にしたい。 「2012.12.12」などは二桁のままにしたい 現在 (\d{4}).(\d{1-9}).(\d{1-9}) を $1.0$2.0$3 としたら 2012.1.10が2012.01.01 と下一桁が無視されてしまいました… 3.HTMLタグと文字全て 現在 ^.*$ 使用したい場所はYahoo!pipesです。 宜しくお願いします!

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

(1)タグすべて削除 タグをはずだけならこんな感じ、タグではさまれた文字まで消す場合は もう少し工夫が必要 <?PHP $str="<hoge>fuga</hoge>piyo"; print htmlspecialchars($str)."<hr>"; $pattern="/<.*?>/"; $replacement=""; $str=preg_replace($pattern,$replacement,$str); print htmlspecialchars($str)."<hr>"; ?> (2)1桁を2桁に <?PHP $str="1a23b4c567"; print $str."<hr>"; $pattern="/(?<!\d)\d(?!\d)/mis"; $replacement="0$0"; $str=preg_replace($pattern,$replacement,$str); print $str."<hr>"; ?> (3)すべて これってやる意味あるのですか?

全文を見る
すると、全ての回答が全文表示されます。
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

すみません。タグを裸にするんじゃなくて削除でしたね。 $tmp='<http://okwave.jp/qa/q7360156.html>至急*正規表現教えて下さい</a>'; print $tmp=preg_replace('/<([^>]+)>/','',$tmp);

全文を見る
すると、全ての回答が全文表示されます。
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

$tmp='http://okwave.jp/qa/q7360156.html'; print $tmp=preg_replace('/<([^>]+)>/','$1',$tmp); print '<br>'; $tmp='2012.02.10'; print $tmp=preg_replace('/(?<=\d{4}\.)(\d{1,2})\.(\d{1,2})/e','sprintf("%02d.","$1")'.'.'.'sprintf("%02d","$2")',$tmp);

tse-sie
質問者

お礼

早速ありがとうございます。 ひとまず日付のところが一番てこずっていて先に日付の部分をやっているのですが まず検索は (?<=\d{4})\.(\d{1,2})\.(\d{1,2}) でできました。 でも回答にある("%02d.","$1")'.'.'.'sprintf("%02d","$2") の部分はそのまま出てきてうまくいきませんでした… http://d.hatena.ne.jp/dacs/20080422/1208868051 こういう感じの記述方式でお答え頂く事はできますでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正しい正規表現を教えてください

    お世話になります。 正規表現で次のように指定しているのですが、正確か自信がありませんので 正しい表記を教えてください。 1.全てのHTMLタグ <.*?> 2.「2012.1.1」または「2012.01.01」のような数字の羅列 (\d{4}).(\d{1,2}).(\d{1,2}) 3.「<img src="~」から始まる部分 <img src=" 4.「<div class="release">」を含む部分 <div class="release"> 5.HTMLタグと文字全て ^.*$ 全て色々なサイトで調べて表記したのですが、処理に時間がかかってて間違っている気がします。 yahoo!pipesのregexモジュールの部分で使用していて、デバッガーのTime takenに時間がかかっている場合、正しくない正規表現が原因らしいのです。 どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現で

    例えば 1234# 2345$ 2467# 2579$ 等の4桁の数値の後、#か$がくる文字列があるとして この数値の部分だけを抜き出す正規表現って可能でしょうか? 記号を含めていいなら [\d]{4}[#|\$] な感じになると思うのですが 数値のみ、1234,2345,2467,2579といった感じで選択したいのです。 宜しくお願いします。

  • 正規表現

    if(str.match(/^[-+]?\d+$/)) alert("matched !"); この正規表現(先頭に+か-かをつけてあとは数字という表現です。)で 全体が//で囲まれてますがどうしてでしょうか? オプションとしてgとかiがあるのならわかるのですがないみたいです。 また^と$をつかった表現で例えば^AB$とした場合どうしてACBは含まれないのでしょうか?

  • matches()での正規表現

    現在、Stringクラスのmatchesメソッドを使用して、入力値のチェックをしようと思っているのですが、 正規表現で質問をさせてください。 正しいパターンは → 「00XX-XX」です。(Xは任意の数字) 頭は0が2個、Xが2個、ハイフン、Xが2個、です。 これを正規表現で表すと、 「^(00)\\d{2}\\-\\d{2}$」としているのですが、ハイフンの前の\\を除去して、 「^(00)\\d{2}-\\d{2}$」でも結果が変わらない様な気がします。 この二つの違いは何なのでしょうか?? 具体的にどちらかがtrueとなる入力値等があったら教えてください。 よろしくお願いします。

  • 正規表現について

    いま.Netで正規表現にチャレンジしているのですが、どこが問題なのか分からず、投稿させていただきました。 正規表現のパターンです。 \\[Cc]\[(?<$0>[0-9]+),(?<$1>[0-9]+),(?<$2>[0-9]+)\] で、マッチさせたい文字列は、 \C[255,255,255] です。「[255,255,255]」の数字の部分は、一桁から三桁までの数字であれば何でもOKです。 マッチしないことは、http://jsregex.com/を使って調べました。 どうぞよろしくお願いします。

  • 正規表現

    正規表現で身長、体重の入力チェックをしたいのですが、 うまくいきません。 ↓がんばったのですが。。 /^\d\d\d?\.?\d*$/ 整数部3桁まで、小数部はDBで1桁に丸めるので何桁でもOKです。 どなたかアドバイスをお願いします。

  • 正規表現のm{}

    正規表現の記述で、m{}と書くサンプルを目にしたのですが、このmと中括弧は何を意味するのでしょうか? 以下、Hタグにマッチするかをテストする正規表現のサンプルです。 $_ = "<H3>ヘッダ3</H3>"; if ( m{<(H\d)>(.+)</\1>} ) { print "found!!"; }

    • ベストアンサー
    • Perl
  • 「半角数字」と「+」を許可する正規表現の書き方

    「半角数字」と「+」(半角プラス)を許可する正規表現を書きたいです。 検索していて このような電話番号のチェックはよく見掛けます。 preg_match('/^\d{2,5}-?\d1,5}-?\d{3,5}$/', $tel) 今回は、下記のデータを許可したいです。 1+ 1254+ 21+1000+ 5154+45+987+201+ 桁の指定は不要で、+の後ろには数値が無い場合もあります。 「+」は数字の後に必ず付いてきます。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現

    数字と大文字、小文字のアルファベットは入力OK。 記号も入力OK。でも、記号の中でも「”」、「.」は ダメ。しかも、10桁くらい入力できるようにする。 を表す正規表現は [a-zA-Z0-9&&[\"\.]]* と思ったのですが、 正しく表す正規表現はどの様なものになるのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • 正規表現の初心者です

    正規表現初心者です。 なぜ、 [0-9]+ という正規表現が下記の112にあたらないのでしょうか? 0-9(数字)の一文字以上の繰り返しなので、複数桁の数字にマッチすると思ったのですが・・。 echo 112|grep -e "[0-9]+" > (マッチせず)