- 1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
- 【正規表現道場の掟】
・言語不問 ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現と関係ない話・質問は他スレへどうぞ。
- 242 名前:nobodyさん mailto:sage [2007/12/11(火) 20:35:33 ID:???]
- すみません、ヘルプをお願いします。
PHPにて、特定の画像ファイル名を持つ<IMG>タグを抽出するという正規表現を作りたいのですが 上手く行かなくて困っております。 どなたか、お助けください。。。
- 243 名前:nobodyさん mailto:sage [2007/12/12(水) 01:18:37 ID:???]
- >>242
もちっとくわしく。src属性以外に属性をもつのかとか。 多分alt属性がついていそうだけど。 preg_match('/<img .*?src=(["¥'])特定のファイル名を表す正規表現¥¥1 .*?>/', src); とかか。今適当に作ったのでうまく動くかどうかはわからんけど
- 244 名前:nobodyさん [2007/12/19(水) 16:38:31 ID:H15tWjcK]
- PHPのpreg_replaceなんですが、おたたすけ願います。
特定の文字列で囲まれた文字列を変換しない正規表現を教えてください。 たとえば preg_replace("/aaa/", "[\1]", "aaa aaa aaa aaa aaa") だと結果は "[aaa] [aaa] [aaa] [aaa] [aaa]" になりますが preg_replace("/aaa/", "[\1]", "aaa{{{aaa aaa aaa}}}aaa") となっていたときに "[aaa]{{{aaa aaa aaa}}}[aaa]" という結果を取得したいんですが 思うように出来ません。 答えを直接出なくてもいいのでヒントだけでも教えてください。
- 245 名前:nobodyさん mailto:sage [2007/12/19(水) 18:16:44 ID:???]
- >>244
後読み表明は量指定子を含められないから、もしpreg_replaceだけでやろうとするなら、 それ以外の部分を食わせておいて置き直すという、やや気持ち悪いことになると思う。 例えばこんなふうに preg_replace('/(.*?(?:\\Q{{{\\E.*?\\Q}}}\\E.*?)*)(aaa)/', '$1[$2]', "aaa{{{aaa aaa aaa}}}aaa"); 分解してから対象の部分だけ処理する等の方法も検討した方が宜しいかと。
- 246 名前:nobodyさん mailto:sage [2007/12/19(水) 18:44:19 ID:???]
- 大田区ホームページ:職員の不祥事について(処分の公表)
www.city.ota.tokyo.jp/oshirase/mokutekibetsu/other/fusyouji_syobun/index.html 当区職員が傷害の容疑で逮捕されるという事件につきましては、新聞等での報道やホームーページで公表したところですが、今回、事実関係が明らかになり、以下のとおり懲戒処分を行いましたので公表いたします。 区民の皆様の信頼を裏切ることとなり、誠に申し訳ありません。あらためて、お詫びいたします。 懲戒処分とは 職員が一定の義務違反を犯した場合に、公務の規律と秩序を維持することを目的として、その責任を追及するために制裁として行う処分です。 大田区では懲戒処分の公表基準に基づき、免職処分をした場合や特に区民の関心が大きい事案又は社会的影響が大きい事案について、個別の懲戒処分を公表します。 (懲戒処分の制度の詳細は、大田区人事白書をご参照ください。) 処分発令日 平成19年12月19日 被処分者氏名 建築調整課 吉原 幸光 処分の内容 停職3月 処分の理由 一般非行関係(法令に違反し、全体の奉仕者たるにふさわしくない非行があったため) 事件の概要 この職員は、平成19年11月16日(金曜日)、勤務時間終了後、東神奈川駅周辺で飲食した後、帰宅途中のJR京浜東北線川崎―蒲田間の電車内において、乗客男性に全治4週間の怪我を負わせる暴行を働き、傷害の容疑により蒲田警察署に現行犯逮捕されました。 同職員は、東京簡易裁判所に起訴され、罰金刑を申し渡されています。
- 247 名前:nobodyさん [2007/12/22(土) 08:43:52 ID:KKfYoqPi]
- すみません、教えてください。
PHPで携帯電話に文字列を表示する際に、 電話番号の部分をteltoリンクにしたいと思い以下のように書きました。 $bodySTR = preg_replace('/([-0123456789]+)/', '<a href="tel:\\1">\\1</a>',$bodySTR); 当然ながらこれだと、「100円」や「〒123-4567」にも反応してしまいます。 そこで、 「03-1234-5678」「090-1234-5678」「03−1234−5678」等にマッチして 「100」や「123-4567」にはマッチしない正規表現は可能でしょうか?
- 248 名前:nobodyさん mailto:sage [2007/12/22(土) 14:06:28 ID:???]
- 可能です
- 249 名前:nobodyさん mailto:sage [2007/12/22(土) 16:17:35 ID:???]
- /(0¥d+-¥d{1,4}-¥d{4})/
でどうよ
- 250 名前:nobodyさん [2007/12/22(土) 17:39:05 ID:6MoMAQ1+]
- perlの正規表現について質問です。
>>244の方と同じ様なものなのですが "test <a href="test.jp"> test" の様な文字列があった場合、タグ内のtestは変更せずに "[test]<a href="test.jp">[test]" という形にしたいのですが、どのようにすれば宜しいでしょうか。 一度置換した後、<>タグ内の物は[]を外す方法も考えてはみたのですが、 思うように動作させる事が出来ず。ご教授の程、宜しくお願い致します。
- 251 名前:nobodyさん mailto:sage [2007/12/22(土) 17:52:18 ID:???]
- s/(<.*?>|test)/$1?$1:"[$2]"/ges
- 252 名前:250 mailto:sage [2007/12/22(土) 18:04:13 ID:???]
- >>251
なるほど、どうも有難う御座いました!
- 253 名前:nobodyさん [2008/01/14(月) 12:16:38 ID:6AXqvVgD]
- 時間(13:00:00〜18:00:00)までを正規表現であらわしたいのですが、
1[3-8]:[0-5][0-9]:[0-5][0-9] という感じに今なっています 誰が見てもわかりやすいしこれでもいいのですが、もっと短い書き方はないものでしょうか? [0-5][0-9]ここが反復なので、([0-5][0-9]:?){2}とか思いつくのですが、 これだと最後にコロンが入っててもマッチしてしまうので回避できるような書き方はないものかなぁと。
- 254 名前:nobodyさん mailto:sage [2008/01/14(月) 13:51:53 ID:???]
- 1[3-8](?::[0-5]\d){2}
- 255 名前:nobodyさん [2008/01/15(火) 02:35:00 ID:HyHnFj45]
-
私が小学生の頃、 日本中でノストラダムスの予言が大流行していた。 「1999年の7月に人類は滅亡する!」 という例のお騒がせ終末予言である。 大人になって社会に出て働きだして、 あくせくと忙しく日々を過ごしながら、 1999年は、 ありふれた日常の中であっさりと過ぎていった。 人類は滅ばなかった。 これからここで、 1999年に起こるかもしれなかった人類の壊滅的破局を、 誰にも知られずにこっそりと回避させた人たちがいた... という設定で、 荒唐無稽なストーリーを描いてみたい。 無論、100%完全なフィクションである。 www5.diary.ne.jp/logdisp.cgi?user=532063&log=200705
- 256 名前:nobodyさん [2008/01/20(日) 11:20:53 ID:TPbCvsXG]
- /([^>|\+|\s]+)\s*([>|\+]?)\s*/g
この正規表現はどういうことでしょう? 何にマッチさせようとしているのでしょうか。 JavaScriptです。
- 257 名前:nobodyさん mailto:sage [2008/01/20(日) 11:37:26 ID:???]
- []の中で|を使ってOR条件にしてるから書いた人は勘違いしてる
- 258 名前:nobodyさん [2008/01/20(日) 12:50:55 ID:TPbCvsXG]
- 本来なにをしたかったんでしょうか・・・。
- 259 名前:nobodyさん mailto:sage [2008/01/21(月) 16:00:34 ID:???]
- PHPの正規表現についての質問です。
2chのdatを各要素毎にキャプチャしたいのですが、 preg_math_all('/((.*)<>)*/', $dat, $match); と書いて実行すると全体が丸々$matchへ格納されます。 $datへは「 要素1<>要素2<>要素3<>要素4<>要素5 」という形式のデータが入っており要素5は1行目にのみ存在します。 また、各要素は空欄の場合もあります。 初歩的な質問で申し訳ありませんが、よろしくお願いします。
- 260 名前:nobodyさん mailto:sage [2008/01/21(月) 16:01:39 ID:???]
- >>258
こちとらお前さんにそれを聞きてえぐらいだよ。
- 261 名前:nobodyさん mailto:sage [2008/01/21(月) 16:03:38 ID:???]
- >>259
preg_split で "<>" で配列にばらした方が扱いやすいかも。
- 262 名前:259 mailto:sage [2008/01/21(月) 16:15:53 ID:???]
- >>261
レスありがとうございます。 確かにphpには要素を分解する為の便利な関数が始めから用意されておりますが、今回はあえてpreg_matchを用いて自身で分解してみたく思います。 自分にはハードルが高い気もするので、手始めに要素5だけを取り出そうと挑戦してみたのですが、 /<>(.+)$/ と書くと要素3<>要素4<>要素5がキャプチャされてしまいます。 やはり当方の正規表現に対する解釈が根本的に間違っているのでしょうか。 連投になり大変申し訳ないのですが、こちらの質問へのみご回答お願いいたします。 (>>259は回答を得ましても自分には理解の範疇を超えていると判断しましたので)
- 263 名前:nobodyさん mailto:sage [2008/01/21(月) 19:42:35 ID:???]
- [^<>]
- 264 名前:259 mailto:sage [2008/01/21(月) 20:27:24 ID:???]
- 自己解決しました
- 265 名前:nobodyさん mailto:sage [2008/01/21(月) 22:14:14 ID:???]
- >>264
どう解決したかくらいは書いてもバチは当たらなくってよ。
- 266 名前:nobodyさん mailto:sage [2008/01/30(水) 11:50:28 ID:???]
- perlのgrepで大文字小文字の区別をつけて検索したいです。
@hitlist = grep(/$search_word/i, @search_list); これを、 @hitlist = grep(/$search_word/$serch_option, @search_list); ($serch_optionにはiやgを事前に設定) こんな感じにしたいのですが、なんかいい案はありますか? if文で分岐させるしかないですか?
- 267 名前:nobodyさん mailto:sage [2008/01/30(水) 13:19:43 ID:???]
- 大小文字区別つけて検索したいならオプションなしで固定でいいでしょ
そこでgオプション使うケースなんてないでしょ
- 268 名前:nobodyさん mailto:sage [2008/01/30(水) 16:28:40 ID:???]
- >>266
質問が要領を得てないんだろうけど、 大文字小文字区別つけるかつけないかを切り替えたい、って話ではないかと。 どうすれば良いのかは知らないけど。
- 269 名前:266 mailto:sage [2008/01/30(水) 17:01:36 ID:???]
- 質問の要領が悪くて申し訳ありません。
正規表現のオプションをうまいこと制御できないかなと思いまして。 特に大文字小文字にこだわってるわけではないです。
- 270 名前:nobodyさん mailto:sage [2008/01/31(木) 03:02:38 ID:???]
- >>269
大小文字の違いを無視して検索したいときに、パターンの先頭に (?i) 埋めときゃいい。 $pat = ($icase ? "(?i)" : "") . $search_word; @hitlist = grep /$pat/, @search_list; とか
- 271 名前:nobodyさん mailto:sage [2008/01/31(木) 15:56:15 ID:???]
- proxomitron の正規表現(?)が独自過ぎて、イライラしてくるんだが…
- 272 名前:nobodyさん [2008/02/25(月) 06:25:28 ID:PeKKba69]
- 2008-03 発売(予定)
「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳) ISBN 978-4-87311-359-3 定価 5,040円
- 273 名前:nobodyさん mailto:sage [2008/02/25(月) 12:38:04 ID:???]
- 高いね。今は Web で検索すればいいからねぇ…今更そんなの出して売れるのか。
- 274 名前:nobodyさん [2008/03/03(月) 22:23:33 ID:3LUWkmBW]
- 質問です!
PHP 5.2.5で、<br>以外のタグ削除を下記のようにしたところ do { $res = str_replace( $result_tag[1], '', $res ); } while ( mb_ereg( '(<[a/][^>]+>)', $res, $result_tag ) ); 所々で効いてません。 前のサーバー(PHP 4.4.4)では正常に動いていました。 よろしく御指南ください。
- 275 名前:nobodyさん mailto:sage [2008/03/03(月) 23:15:55 ID:???]
- >>274
初心者なので間違ってたらごめんなさい。 strip_tagsで、タグ除去と除外タグ指定が可能なはずです。
- 276 名前:nobodyさん mailto:sage [2008/03/04(火) 02:59:10 ID:???]
- >>275
ありがとう! 思い通りになりました。 感謝です。
- 277 名前:nobodyさん mailto:sage [2008/03/05(水) 17:20:52 ID:???]
- <a href="jumpres/read.cgi/newsplus/1204390523/1">>>1</a>
<a href="jumpres/read.cgi/dqnplus/22043905235/34">>>34</a> スレッドまとめサイトの作成においてアンカーのタグだけ外したいのです よろしくお願いします
- 278 名前:nobodyさん mailto:sage [2008/03/05(水) 18:23:39 ID:???]
- >>277
実装言語が Perl と仮定して (Perl でなければ >>1 を読んでちょ) 、こんなかんじ? s/<a href=".+?">(.+?)<\/a>/$1/g;
- 279 名前:nobodyさん mailto:sage [2008/03/05(水) 18:52:35 ID:???]
- ありがとうございます
- 280 名前:nobodyさん mailto:sage [2008/03/16(日) 09:40:37 ID:???]
- PHPの正規表現はバグバグなのでバージョンが違えば動作が変わる上に、難しいパターンになるとすぐ落ちる。
- 281 名前:nobodyさん mailto:sage [2008/03/16(日) 12:34:04 ID:???]
- 嘘書くなよ。
- 282 名前:nobodyさん mailto:sage [2008/03/16(日) 20:44:54 ID:???]
- パターン修飾子にパラメータを渡して、長い文字列を検索するとボロボロ落ちる。常識だよ。
- 283 名前:nobodyさん mailto:sage [2008/03/17(月) 06:09:10 ID:???]
- rubyのutf-8判定とかもやばそうだね
- 284 名前:nobodyさん mailto:sage [2008/03/17(月) 08:59:29 ID:???]
- pcreのバグだね。
pcre-devのメーリングリストでもよんどいて損はない ttp://www.exim.org/lurker/list/pcre-dev.ja.html
- 285 名前:nobodyさん [2008/03/19(水) 14:02:11 ID:6LA3ff9b]
- 初めて書き込みさせていただきます。
たとえば文字列が {if(a)} あああ {if(b)} いいい {/if} {/if} と入れ子があったときはどのようにマッチさせたらいいでしょうか? PHPでお願いします。
- 286 名前:nobodyさん mailto:sage [2008/03/19(水) 15:32:59 ID:???]
- 入れ子のマッチは正規表現 (だけ) では無理。と憶えておくと良いことがあるらしい。
- 287 名前:ジョアン [2008/03/28(金) 16:46:01 ID:FsCFbn2K]
- perl の正規表現をPHPに書き直しているのですが、どうしてもわかりません。
Perlではマッチした前後を $` $' で取得できますがPHPではどうして取得するのでしょうか?
- 288 名前:nobodyさん mailto:sage [2008/03/29(土) 12:12:17 ID:???]
- つマニュアル
- 289 名前:nobodyさん mailto:sage [2008/04/12(土) 11:24:34 ID:???]
- 見 れる
- 290 名前:nobodyさん mailto:sage [2008/04/13(日) 12:03:16 ID:???]
- >>287
括弧
- 291 名前:nobodyさん mailto:sage [2008/04/26(土) 13:57:41 ID:???]
- age
- 292 名前:nobodyさん mailto:sage [2008/05/04(日) 23:26:54 ID:???]
- オライリーの正規表現三版
ほしいけど高いね
- 293 名前:nobodyさん mailto:sage [2008/05/19(月) 20:19:05 ID:???]
- phpでhoge("****","*****");の****と*****を[1][2]に入れたいのですがどうすればいいでしょうか?
- 294 名前:nobodyさん mailto:AGE [2008/05/23(金) 20:19:21 ID:???]
- AGE
- 295 名前:nobodyさん mailto:AGE [2008/05/23(金) 20:19:44 ID:???]
- AGE
- 296 名前:nobodyさん [2008/06/05(木) 16:44:59 ID:0yepAPED]
- すみません、FC2ブログのIPブロック条件のために、正規表現を書かなければならなくなりました。
そこで、合っているか教えてくださいー。 IP 61.78.0.0〜61.85.225.225 をブロックしたいのです。 このための表現として、私のつたない知識を使って書いてみると ^61\.[78-85]\.[0-9]+\.[0-9]+ なのかなと思ってますが、あってますか? どうぞよろしくお願いします。
- 297 名前:nobodyさん mailto:sage [2008/06/05(木) 17:25:51 ID:???]
- ^61\.(?:7[89]|8[0-5])\.
こうじゃないかな
- 298 名前:nobodyさん [2008/06/05(木) 18:12:26 ID:0yepAPED]
- >>297
ありがとうございます。 ^61\.[78-85]\. のところが、^61\.(?:7[89]|8[0-5])\. って言う意味ですよね? なるほど。78-85じゃダメなんですね。ありがとうございます!
- 299 名前:nobodyさん mailto:sage [2008/06/06(金) 03:25:44 ID:???]
- これが一番わかりやすい。以上
^61\.(78|79|80|81|82|83|84|85)\..*
- 300 名前:nobodyさん mailto:sage [2008/06/08(日) 17:41:28 ID:???]
- PHPで、1ページ分のHTMLのソースが$sに入っているとします。
ここで、この$sから特定のタグだけを削除したいのですが、うまくいきません。 例えば<meta 〜〜〜 />というタグが複数あったとして、これをすべて取り除いたソースを作りたいのです。 $s = eregi_replace("<meta.*?>", "", $s); とやってみたのですが、$sが空になってしまうのです。 ご指南ください。
- 301 名前:nobodyさん mailto:sage [2008/06/08(日) 22:40:27 ID:???]
- 2過去ログぐらい嫁という言葉は一見突き放しているように見えて
その質問の答えはこのスレの中にあるよという、ヒントを出しているわけで まぁ、ツンデレなわけです。
- 302 名前:nobodyさん mailto:sage [2008/06/09(月) 02:40:38 ID:???]
- >>300
ereg は最短マッチの芸当はできない。 pregでもつかっとけ。
- 303 名前:nobodyさん mailto:sage [2008/06/09(月) 06:50:27 ID:???]
- >>300
'<meta[^>]*>'
- 304 名前:nobodyさん mailto:sage [2008/06/09(月) 23:50:23 ID:???]
- 300です。
ありがとうございます! そうなんです、最短マッチが動かないなぁと思っていて、まさかeregが 最短マッチできないとは思いませんでした。 pregでやって解決しました!!
- 305 名前:nobodyさん mailto:sage [2008/06/11(水) 15:58:44 ID:???]
- 300と似てるかもしれないのですが
<a href="aa">11</a><a href="bb">22</a> こういう文字列があるとき 11と22だけを取り出したいと思い preg_match_all("/<a(.*)>(.*)<\/a>/", 元, $test) とやってみたところ、取り出せたのが href="aa">11</a><a href="bb"と22になってしまいました。 ?をつけてみてもうまくいきませんでした。 意図したように取り出したい場合どのように記述すればいいのでしょうか? 使用している言語はphpです。
- 306 名前:nobodyさん mailto:sage [2008/06/11(水) 21:01:33 ID:???]
- >>305
色々間違えてる。 まず、Aタグで囲んでる部分だけ抜き出すなら( )のペアは一個でいいはず。 次に?を使ってみたと言うが多分何か勘違いしてる。 300はわかってて最短マッチさせてるが305わかってないだろう? *を?に置き換えたりしてないか?
- 307 名前:nobodyさん [2008/06/12(木) 00:47:05 ID:Hj50XmAm]
- JavaScriptで下記のようなデータを取得したいです。
hogehoge[1]→1 hogehoge[123]→123 hogehoge[1243][]→1243 []の中身を取得したく、[]が2つあった場合は最初の[]の中身を取得します。 (ただし、2個目の[]は常に空です。) hogehogeは任意の文字列で、[]の中身は何桁か分からない数字の繰り返しです。 以上ご鞭撻の程お願いします。
- 308 名前:nobodyさん mailto:sage [2008/06/12(木) 08:16:53 ID:???]
- >>307
スレタイ
- 309 名前:nobodyさん mailto:sage [2008/06/12(木) 14:43:44 ID:???]
- /\[([1234]+)\]/
- 310 名前:nobodyさん mailto:sage [2008/06/12(木) 14:53:37 ID:???]
- GJ
- 311 名前:nobodyさん [2008/06/28(土) 08:39:36 ID:9QUTsyON]
- PHP質問スレから誘導されてきました。
使用言語はPHPです。 以下のような変数があります。 $str = <<<EOM あああ<br /> いいい<br /> ううう<br /> <!--S--> えええ<br /> おおお<br /> <!--E--> EOM; このうち<!--S-->と<!--E-->で囲まれている<br />だけを削除したいのですが、 正規表現を使って綺麗に書けるでしょうか? 以下のように試したのですが、<!--S-->と<!--E-->が消えるだけでした。 $str = preg_replace("/<!--S-->([\W\w]+)<!--E-->/",str_replace("<br />","","\\1"),$str); また、<!--S(E)-->で囲まれている部分は改行や半角英数字などが含まれる場合があります。 どなたかご教示いただけますでしょうか。よろしくお願いいたします。
- 312 名前:nobodyさん mailto:sage [2008/06/28(土) 10:12:28 ID:???]
- substr_replaceとstrposでできそうな気がするが
- 313 名前:311 mailto:sage [2008/06/28(土) 12:26:16 ID:???]
- >>312
ありがとうございます、おかげで解決しました!
- 314 名前:nobodyさん mailto:sage [2008/07/02(水) 18:58:36 ID:???]
- ,"/web/sendmail.php","10","10","2000"
こういう感じの文章の ,"2000" のみ抽出したいんですが、どう書けばいいんでしょうか? ",".*[0-9]"$ だと"10","10","2000"まで拾っちゃうんです・・・。
- 315 名前:nobodyさん mailto:sage [2008/07/02(水) 21:54:01 ID:???]
- ,\"[0-9]{4}\"
- 316 名前:314 mailto:sage [2008/07/03(木) 15:40:28 ID:???]
- >>315
ありがとうございます。 確かに、それで例は拾えましたが、10と2000の部分は変動するんです。 桁も4桁だったり5桁だったりと様々なので、どうしたもんかなと・・・。
- 317 名前:nobodyさん mailto:sage [2008/07/03(木) 15:46:05 ID:???]
- ,\"[1-9][0-9]*\"
- 318 名前:314 mailto:sage [2008/07/03(木) 15:53:01 ID:???]
- >>317
ありがとうございます。 それだと ,"10","10","2000" まで拾ってしまいます・・・。 書き忘れていましたが、秀丸を使って一括選択しています。
- 319 名前:nobodyさん mailto:sage [2008/07/03(木) 16:04:08 ID:???]
- > 10と2000の部分は変動するんです
どう変動するんだよ とり出したい場所の条件を日本語で書いてみ >315を5桁にも対応させるだけなら ,\"[0-9]{4,5}\"
- 320 名前:nobodyさん mailto:sage [2008/07/03(木) 16:05:46 ID:???]
- >>318
,\"[1-9][0-9]*\"$
- 321 名前:314 mailto:sage [2008/07/03(木) 16:14:35 ID:???]
- >>320
ありがとうございます!!!出来ました!!! ありがとうございましたー。 >>319 ありがとうございます。 >>320で解決しましたが、極端な話1〜99999999の間で変動します。
- 322 名前:nobodyさん mailto:sage [2008/07/03(木) 16:21:37 ID:???]
- >>321
自然数と言え
- 323 名前:nobodyさん mailto:sage [2008/07/03(木) 18:01:39 ID:???]
- 314 は情報小出し厨という事が解ったから、はやく死ね
- 324 名前:nobodyさん mailto:sage [2008/07/03(木) 19:43:29 ID:???]
- そもそも正規表現スレで「こういう感じの文章」なんて質問する時点で(ry
- 325 名前:nobodyさん mailto:sage [2008/07/03(木) 20:01:56 ID:???]
- 抽象的な表現の質問はスルー
- 326 名前:PHP [2008/07/04(金) 18:37:34 ID:DM0Om0jz]
- PHP 正規表現
PHPの正規表現を勉強しているのですが、どうもうまくいきません。今回は一番簡単な正規表現をつくったのですが、どうやったらよいのでしょうか。 $h = '(名前)様の会員IDは(abc12)で、(5)番目に偉い方です。'; とあったら、名前、会員ID、番号を抜き出すには、どのようにしたらよいのでしょうか? 実際に()は使用しません。 また、$1 や $2 などを使いたいのですが、解説までできればお願いしたいです。 一応自分なりに考えました。 preg_match('/^*.([a-zA-Z0-9]){2}([0-9]+)','名前$2.ID$1 $3 番目に偉い'); ()を使えば、2つマッチさせたいときなどに分けることができるのでしょうか? (名前)様は(数字) 例:太郎様は5 このとき太郎様という日本語の文字を取得するには/^(+.)([0-9])$/ ここで名前は$1になり、数字は$2になるのでしょうか? どのような時に$1や$2がどっちがどっちなのかは、どのようにしたらわかるのでしょうか? 長々した質問すいません。わかるかた教えてください。
- 327 名前:nobodyさん mailto:sage [2008/07/04(金) 23:02:41 ID:???]
- www.php.net/manual/ja/book.pcre.php
取り敢えず、ここを *よく読んで理解* しろ。
- 328 名前:nobodyさん [2008/07/15(火) 00:11:32 ID:PMHjKbcP]
- 質問させて下さい。
PHP5を使っています。 PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません <INPUT maxLength=20 name=id value=""> このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」 を取得したいのです。 全文に対して繰り返し取得したいのでpreg_match_allを使っています。 preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs ) このように書いたのですがヒットしてくれません。 ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが 文字列に関してはどのようにすればよいのでしょうか? アドバイス頂ければ幸いです。 宜しくお願い致します。
- 329 名前:nobodyさん mailto:sage [2008/07/15(火) 02:02:18 ID:???]
- >>328
悪いこたいわないから二段階で抽出しとけ。 先読みを使えば書けないこともないけど、メンテできなくなるぞw
- 330 名前:328 [2008/07/15(火) 03:07:47 ID:PMHjKbcP]
- >>329
レス有り難う御座います。 一段階目は preg_match_all( "/(<input 「typeを含まない文字列にマッチするような正規表現」[^<]>)/is", $data, $matchs ) となると思うのですが、この部分はどのようにして書けばよいのでしょうか? はじめ、二段階抽出も考えたのですが、結局 「typeを含まない文字列にマッチするような正規表現」がどうしてもわからずでした。
- 331 名前:328 mailto:sage [2008/07/15(火) 08:05:16 ID:???]
- 自己レスですが、夜通し色々試していたらいけました。
お騒がせしました。 取りあえず、該当範囲をpreg_match_allで取得後、preg_matchでtypeがあるか判定して二段回抽出しました。
- 332 名前:nobodyさん [2008/07/17(木) 17:35:14 ID:LcfXPY+p]
- <<が出てきて、その後初めて<br><br>が出るところまでのマッチ方法を教えてください。
pregです。 例えば、 hogehoge<<hogehogeh<br>oge<br><br>hogehoge<br><br>hoge<<hoge の ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ の部分です。
- 333 名前:nobodyさん mailto:sage [2008/07/17(木) 17:53:17 ID:???]
- <<.*?<br><br>
- 334 名前:332 mailto:sage [2008/07/19(土) 19:22:36 ID:???]
- >>333
333おめです なぜか、 hoge<<hogehog eh<br>oge<br><br>hoge だとマッチしないのですが。
- 335 名前:nobodyさん mailto:sage [2008/07/19(土) 19:32:09 ID:???]
- <<【¥S¥s】*?<br><br>
- 336 名前:nobodyさん mailto:sage [2008/07/20(日) 09:34:06 ID:???]
- できました。スマソ
- 337 名前:nobodyさん mailto:sage [2008/07/20(日) 11:43:35 ID:???]
- 携帯絵文字をすべて
「絵」に置き換えすることはできないのでしょうか? preg_replace("/[ - ]/","絵",$hoge);
- 338 名前:nobodyさん [2008/07/20(日) 12:01:15 ID:LU799vx+]
- >>337
キャリアは?
- 339 名前:nobodyさん mailto:sage [2008/07/20(日) 12:03:54 ID:???]
- >>338
SoftBankです。 余裕があればau,DoCoMoもですが。。。
- 340 名前:nobodyさん mailto:sage [2008/07/20(日) 12:18:57 ID:???]
- >>337
置き換える事はできるけど、正規表現だけでは無理
- 341 名前:nobodyさん mailto:お願いします [2008/07/20(日) 12:27:01 ID:???]
- >>340では、正規表現以外のものもOKなので、
教えていただきたいです。
- 342 名前:nobodyさん mailto:sage [2008/07/20(日) 13:09:57 ID:???]
- 絵文字 変換 preg とかでググればいくらでも出てくるだろ。。。
ここで聞くより100倍速い。
|

|