- 1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
- 【正規表現道場の掟】
・言語不問 ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現と関係ない話・質問は他スレへどうぞ。
- 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倍速い。
- 343 名前:nobodyさん [2008/07/24(木) 00:50:31 ID:/c2OsNI4]
- example.htmlに書かれた
<table>
- 344 名前:nobodyさん [2008/07/24(木) 00:58:57 ID:/c2OsNI4]
- >>343
誤爆した。。申し訳ない。。 example.htmlに書かれた <table> <tr><th>2ちゃんねる</th><td>WebProg板</td></tr> </table> をphpのfopen, fgetsで1行ずつ読み取っています。 <tr>から始まった行の「2ちゃんねる」とWebProg板「WebProg」部分のみ抽出したいので preg_replace("/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i","$1$2",$str); としたのですが、うまく抽出できません。 アドバイスをいただければありがたいです
- 345 名前:nobodyさん mailto:sage [2008/07/24(木) 01:43:31 ID:???]
- /^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i
正規表現が / で始まってるから / で終わることになるわけだけど、途中に</th>ってのがあるわけよ m#<t[dh][^>]*>(.*?)</t[dh]><t[dh][^>]*>(\w+)#i こんな感じになるかな
- 346 名前:nobodyさん mailto:sage [2008/07/24(木) 23:33:27 ID:???]
- デリミタの問題だけじゃないの?
preg_replace("/^<tr><th>(.*?)<\/th><td>([a-zA-Z])<\/td>/i","$1$2",$str);
- 347 名前:nobodyさん mailto:sage [2008/07/25(金) 08:54:32 ID:???]
- これって[a-zA-Z]、[a-zA-Z]+こうしなくてもいいの?
- 348 名前:nobodyさん [2008/07/27(日) 01:11:32 ID:sEx2Pn85]
- 質問させてください。
サクラエディタに鬼車5.9.1を搭載して正規表現の勉強をしているのですが、手元にある詳説正規表現には (<)?\w+(?(1)>) このような例があり、<があれば>のマッチを試みる?ということができるみたいです。 ただ、鬼車はこの表現をサポートしていないみたいです。 www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt 同様のことを鬼車でも実現する方法ってあるのでしょうか?
- 349 名前:nobodyさん mailto:sage [2008/07/29(火) 05:43:25 ID:???]
- 一番最初に出てきた「=」だけ反応するにはどうしたらいいでしょうか。
C#です。
- 350 名前:nobodyさん mailto:sage [2008/07/29(火) 19:46:22 ID:???]
- 行頭の=という意味なら
/^=/m だけどC#での正規表現の使い方は知らんので応えられん。
- 351 名前:nobodyさん [2008/08/06(水) 01:01:06 ID:hVakYDWk]
- PHP5覚えたての初心者です
スレ冒頭に()と(?:)の違いについて質問されてましたが ?:の意味ってなんですか? わかりやすい解説ページなどもあれば教えてください。
- 352 名前:nobodyさん mailto:sage [2008/08/06(水) 02:34:12 ID:???]
- google
- 353 名前:nobodyさん mailto:sage [2008/08/06(水) 19:40:10 ID:???]
- >>351
?:じゃ?と:だよ。 (?:〜)で意味をなす。
- 354 名前:nobodyさん [2008/08/21(木) 14:34:46 ID:wSsr/o3s]
- 質問させて下さい。
PHP5を使用しています。 文字列内にマルチバイト文字が一つでも含まれていれば真と言う正規表現を行いたいのですが どのようにすればよいでしょうか? ドキュメント等から調べてみて、 mb_ereg("[0-9a−zA−Zあ−んア−ン]", $str ) のようにしてみたのですが、これでは漢字にヒットしません。 アドバイス頂ければ幸いです。 宜しくお願い致します。
- 355 名前:nobodyさん mailto:sage [2008/08/21(木) 14:44:38 ID:???]
- 単純に先頭ビットがおったってるかどうか見ればよくない?
[\x80-\xff]
- 356 名前:nobodyさん mailto:sage [2008/08/21(木) 15:28:45 ID:???]
- >>355
ありがとうございます。 やってみます。
- 357 名前:nobodyさん mailto:sage [2008/08/22(金) 02:32:16 ID:???]
- >>354
1バイト文字を列挙したのを否定すれば? あと、文字コードによっては半角カナがマルチバイトだったり そうじゃなかったりするんだけど、どうするのかな?
- 358 名前:nobodyさん [2008/08/25(月) 10:35:16 ID:P/JycA8t]
- htmlのタグを削除するのに、ふつうは
$line =~ s/<\/?[^>]+>//g; ----(1) だと思うけど、どこかで見た方法では、 $line =~ s/<[^>]*(>|$)//g; ----(2) となってた。これ動作は同じなのかな?(2)の意味がイマイチ分からない。
- 359 名前:nobodyさん mailto:sage [2008/08/25(月) 20:52:33 ID:???]
- (1)の \/? は書いても意味ない(/は[^>]に含まれるから)
(2)の (>|$)は、$lineという変数名から推測するに行単位で読み込んで逐次処理した 場合に、タグの途中で改行されていて>が見つからなくても行末まで削除する為? でもそうしたら次の行で処理がうまく行われないしよくわからん 行単位だとタグ途中で改行される場合もあるから全部読み込んで一気に処理がいい s/<.*?>//g; s/<[^>]*>//g; などなど・・
- 360 名前:359 mailto:sage [2008/08/25(月) 21:09:55 ID:???]
- 間違った、s/<.*?>//g;だと改行に対応できないから
s/<[\s\S]*?>//;みたいになるね
- 361 名前:nobodyさん mailto:sage [2008/08/25(月) 21:28:12 ID:???]
- いや、s使うだろ、普通。
- 362 名前:nobodyさん mailto:sage [2008/08/25(月) 22:34:46 ID:???]
- >>358
(2)はSGMLのショートタグの対応とか? ttp://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/appendix/notes.html#h-B.3.7 開始タグで前のタグを閉じる以外は、メジャーなブラウザは対応してなかったはずなので、 あまりこだわらなくてもいいと思うけど。
- 363 名前:358 mailto:sage [2008/08/25(月) 23:08:43 ID:???]
- ありがとうございました。
改行文字の件とか、勉強になりました。 プログラム上では、どちらも同じ動作なので、気になってたもので。
- 364 名前:nobodyさん [2008/08/27(水) 15:31:16 ID:j0h2/LpG]
- 正規表現で悩んでいます。
preg_match_all( "/((aaa|bbb|ccc).*?)(aaa|bbb|ccc|$)/is", $str, $maches ) このような形にて以下のような内容の繰り返し文を部分的に抜き出そうとしているのですが一部上手くいきません --------------------- aaa あいうえお bbb かきくけこ ccc さしすせそ --------------------- 上記正規表現では aaa あいうえお bb かきくけこ cc さしすせそ と言うように一つ目以降のパターンマッチ文字列の先頭がbbやccとして一文字かけてしまいます。 本来はbbb、cccとちゃんとヒットさせたいのですが、これが行えません。 マッチ後の文字列ポインタを「三歩歩いて二歩下がる」のようにずらす事をするか、何か他のパターンマッチ構文を 書けばいけそうだと思うのですが、どうにもよい方法が思いつきません。 お力添え頂ければ幸いです。
- 365 名前:nobodyさん mailto:sage [2008/08/28(木) 12:04:03 ID:???]
- テストしてあげるからそのままコピペできるコードに書き換えてここに載せて
- 366 名前:nobodyさん [2008/08/28(木) 18:14:41 ID:Gzy07epa]
- あいうえお かきくけこ
さしすせ そたちつてと なに ぬねの はひふへほ この 「あいうえお」「さしすせ」「なに」 を太字に置き換えるにはどうすればいいですか? (PHP) $hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge); じゃうまくいきません。。。
- 367 名前:366 mailto:sage [2008/08/28(木) 18:25:55 ID:???]
- すいません。
自己解決しました。
- 368 名前:nobodyさん mailto:sage [2008/08/28(木) 18:44:08 ID:???]
- 解決策を書いて下さい。
- 369 名前:nobodyさん mailto:sage [2008/08/28(木) 18:50:35 ID:???]
- いやぁ
$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge); $hoge = str_replace("<br>","<br>\n",$hoge); って書いてましたwww
- 370 名前:364 [2008/08/29(金) 11:10:56 ID:rNMP0NTC]
- >>365
レスありがとうございます。 もう一度考え直してみて書き直すとこのようなコードになりましたPHP5になります。 // 対象文字列 $str = "ABCDaaaEFGaaaaHIJKaaaaa"; // 正規表現 preg_match_all( "/([A-Z]+?aaa.*?)([A-Z]|$)/is", $str, $maches ); // 結果表示 $c = count( $maches[1] ); for ( $i = 0; $i < $c; $i++ ) { print "=> {$maches[1][$i]}\n"; } => ABCDaaa => FGaaa => HIJKaaa これを => ABCDaaa => FGaaaa => HIJKaaaaa と表示させたいのです。 どうか宜しくお願い致します。
- 371 名前:nobodyさん mailto:sage [2008/08/29(金) 11:57:14 ID:???]
- 以前と仕様変わってるようだけど・・・
詳しい仕様を書いてないからわからんけど 先頭が一つ以上の?英大文字がつづくだけマッチして 次にa小文字が3つ以上?つづくだけマッチ を繰り返すってこと? isオプションがあるのはどういうことかわからんが /([A-Z]+aaa+)/
- 372 名前:364 mailto:sage [2008/08/29(金) 12:11:28 ID:???]
- >>371
・・・!申し訳ありません。 色々考えて試している内に頭が混乱して有らぬ方向になってしまっていたみたいです。 ちゃんともう一度考えて仕様も伝えられるようにしてから書き込ませて頂きます。 お手間をおかけいたしましてすみません><
- 373 名前:nobodyさん mailto:sage [2008/08/29(金) 12:39:10 ID:???]
- 新入社員の研修みたいでほほえましい。
- 374 名前:nobodyさん [2008/09/01(月) 15:52:31 ID:ME+mffWY]
- 使用言語はPHP4です。
PHPスレから誘導されて来ました。よろしくお願いします。 $str = '<a href="entry-1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3-18.html">パイナップル</a> <br />'; この文字列の中からリンク先の特定の数字とリンクテキストを抽出したく preg_match_all ( "/"."<a href=\"entry-(.*)-18\.html\">(.*)<\/a>"."/i", $str, $match ); このような正規表現を書いたのですが、実行結果は [0] => Array ( [0] => <a href="entry-1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3-18.html">パイナップル</a> ) [1] => Array ( [0] => 1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3 ) [2] => Array ( [0] => パイナップル ) となります。
- 375 名前:nobodyさん [2008/09/01(月) 15:53:28 ID:ME+mffWY]
- 下記のような実行結果にしたいのですが、正規表現の書き方を教えて下さい。よろしくお願いします。
[0] => Array ( [0] => <a href="entry-1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3-18.html">パイナップル</a> ) [1] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [2] => Array ( [0] => りんご [1] => バナナ [2] => パイナップル )
- 376 名前:nobodyさん mailto:sage [2008/09/02(火) 00:14:52 ID:???]
- <a href="entry-(\d+)-18.html">(.*?)</a>
- 377 名前:nobodyさん [2008/09/02(火) 09:20:23 ID:gwaiq/Cc]
- >>376
うまく動きました ありがとうございました
- 378 名前:nobodyさん [2008/09/02(火) 17:55:54 ID:IiWNBMxF]
- バイオインフォマティックスに詳しい方いらっしゃいますか?perlを使って突然変異前後における終止コドンのカウントをしたいんですが、初心者なのでまったく分かりません・・・(涙)
- 379 名前:nobodyさん mailto:sage [2008/09/02(火) 18:31:39 ID:???]
- 先頭にhttpまたはttpを含まない
という正規表現はどう書けばいいでしょうか
- 380 名前:nobodyさん mailto:sage [2008/09/02(火) 18:35:50 ID:???]
- !/^h?ttp/
- 381 名前:nobodyさん mailto:sage [2008/09/02(火) 18:37:44 ID:???]
- ^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))
- 382 名前:nobodyさん mailto:sage [2008/09/02(火) 19:18:50 ID:???]
- >>380
>>381 助かりました 有難うございました
- 383 名前:nobodyさん mailto:sage [2008/09/03(水) 09:02:07 ID:???]
- ^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))
だとhとかttにマッチしない罠。 ^($|[^ht]|h($|[^t]|t($|[^t]|t($|[^p])))|t($|[^t]|t($|[^p])))) 普通は380のようにするけどな。
- 384 名前:nobodyさん mailto:sage [2008/09/04(木) 10:49:47 ID:???]
- ^p^
- 385 名前:nobodyさん mailto:sage [2008/09/04(木) 10:50:59 ID:???]
- ^w^
- 386 名前:nobodyさん [2008/09/04(木) 19:48:29 ID:ZxHTo/La]
- codezine.jp/article/detail/1573
こんな問題集を見つけたんだが 正規表現道場に近いな
- 387 名前:nobodyさん [2008/09/04(木) 21:53:09 ID:AVvRqwBM]
- $が肯定先読みというのは目から鱗。
- 388 名前:nobodyさん [2008/09/17(水) 17:44:57 ID:TGrFERMS]
- 質問させてください。
OSはubuntu8.04で正規表現を勉強し始めの者です。 電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ 抽出するという条件なんですが、 郵便番号はxxx-xxxx(xは0-9の数字)、電話番号はxx-xxxx-xxxx(xは0-9の数字) で、grep -E [0-9]\{3\}-[0-9]\{4\} とやっても電話番号も全て抽出されてしまいます。 どこが間違っているのでしょうか。
- 389 名前:nobodyさん mailto:sage [2008/09/17(水) 17:54:16 ID:???]
- その正規表現だと電話番号にもマッチしちゃうからね。
具体的には、 xx-xXXX-XXXX の大文字Xであらわしたところ まあ宿題なんだろうからもうすこし良く考えましょう。
- 390 名前:nobodyさん mailto:sage [2008/09/17(水) 19:24:47 ID:???]
- >>389
grep -E ^[0-9]{3}-?[0-9]{4}$ でうまくいきました。ヒント有難うございます。
- 391 名前:nobodyさん mailto:sage [2008/09/22(月) 18:03:26 ID:???]
- 質問です。
下記のような配列の中から、 (2)〜(4)までのみを抽出したいと思っています。 (1) testa@hoge (2) _testb@hage (3) _testc@noge (4) _testd@nage (5) _teste@n_ge ルールとしては、 ・頭に[_]が付いている事、 ・@の後ろに[n_]が付いていない事 です。上記前提で下記のように書いたのですが、 これですと(2)しか抽出されませんでした。 $test =~ /^_.*@[^(n_)]/ @の後ろの正規表現が悪いのだと思うんですが、 この場合どのように書けばいいんでしょうか。 ご教示お願いしますm(_ _)m
- 392 名前:nobodyさん mailto:sage [2008/09/22(月) 18:09:42 ID:???]
- >>391
それじゃ文字クラスだよ。こういうときは否定先読みだろ。
- 393 名前:nobodyさん mailto:sage [2008/09/22(月) 18:13:12 ID:???]
- /^_\w*\@\w+$/ and !/\@n_/
先頭_と@の間はどんな文字でもいいのか、@以降はどんな文字でもいいのかとか 詳しいルールはわからないが、素直に分けたほうがいいと思う
- 394 名前:nobodyさん mailto:sage [2008/09/22(月) 18:18:30 ID:???]
- >>392-393
ありがとうございます! とりあえず、>>392さんの方法で抽出できました。 $test =~ /^_.*@(?!n_)./ ありがとうございました。
- 395 名前:nobodyさん [2008/09/25(木) 14:22:28 ID:bEreCYy4]
- 使用言語はPHP5です
html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたいと思い 以下の置き換えを行い成功したのですが、 $html = preg_replace('{<img (.*?)>}' ,'<img $1 />' ,$html); 元々imgタグ内にスペースとスラッシュが最後に入っているのもありますので、それ以外ということで $html = preg_replace('{<img (.*?)^\/>}' ,'<img $1 />' ,$html); このように記述してみましたが、これですと全部のimgタグに置き換えが効かなくなりました どういう記述をすればよいのでしょうか?
|

|