1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY] 【正規表現道場の掟】 ・言語不問 ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現と関係ない話・質問は他スレへどうぞ。
16 名前:()と(?:)の違い mailto:sage [2007/01/22(月) 07:00:19 ID:???] >>12 TurboLinux Server 8.0 (Viper) での挙動も調べてみました。 preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m); preg_match('"^(/(?:[a-z]*))*$"', "/a/abca", &$m); いずれもマッチします。 PHP 4.2.3 PCRE 3.4 22-Aug-2000 です。 やはり Debian GNU/Linux etch の PHP5 5.2.0-8 だけが PCRE 6.7 04-Jul-2006 を使っていて挙動が変みたいなんで、 Debian GNU/Linux の BTS (バグ報告)に挙げようとおもうんですが、 >>12 の結果も引用させてもらって構いませんでしょうか?
17 名前:13 mailto:sage [2007/01/22(月) 11:21:28 ID:???] >>14 ありがとう。指摘通り誤読していた。 拡張表記をみてわかったよ。 やっぱLarryは偉いな。 ところでかっこの内と外で繰り返し指定が 連続するパターンは組み合わせの爆発が 怖くて自分はできるなら使わないように しているんだけど、みんなはそんなこと 気にしない?
18 名前:()と(?:)の違い mailto:sage [2007/01/22(月) 12:31:13 ID:???] >>17 DFAだからとりあえずえらいことにならないうちに停止するだろう、 とか自分では思い込んでるんですが、NFAなら延々とバックトラック しながらはまり込むとかあるんですかね。
19 名前:10 mailto:sage [2007/01/22(月) 21:04:29 ID:???] >>16 どうぞお使いください。 でも、phpのソースにpcreが同梱されてるようだけれど報告先ディストリでいいのかな…
20 名前:()と(?:)の違い mailto:sage [2007/01/22(月) 21:51:33 ID:???] >>19 ありがとうございます。 むしろ PHP のバージョンごとあげてもらえればと。 って、最新バージョンのソースに入ってるのか orz ちょっと PHP のソース眺めながら思案してみます。
21 名前:20 mailto:sage [2007/01/23(火) 00:05:58 ID:???] >>19 I've reported this issue to PHP bug report. bugs.php.net/bug.php?id=40195 Complete report and examination results are in geeklog.windy.cx/article.php/20070122224722545 I'm in my Linux box without Japanese environment :-p
22 名前:20 mailto:sage [2007/01/23(火) 07:47:35 ID:???] Nuno Lopes さんからリプライがあり、修正対象となりました。 [22 Jan 9:43pm UTC] nlopess@php.net I confirm this is a bug in pcre. so let's ask Andrei to upgrade PCRE to version 7, maybe for PHP 5.2.2 (assign back to me if you want me to do it).
23 名前:nobodyさん mailto:sage [2007/01/23(火) 17:36:48 ID:???] >>21-22 これは模範としたいバグ報告。乙です。
24 名前:nobodyさん [2007/01/23(火) 21:15:28 ID:EGIjqz4P] perl質問厨よろしくです。 @array = split(/(hoge(.))\2/, $line); この2番目の括弧だけ@arrayに含めないことはできますか? '----hoge11-----' ↓ ('----', 'hoge1', '-----') という風に取り出したいのです。
25 名前:nobodyさん mailto:sage [2007/01/23(火) 22:31:38 ID:???] すいません。別の方法で解決しました。
26 名前:nobodyさん mailto:sage [2007/02/01(木) 17:35:44 ID:???] pc10.2ch.net/test/read.cgi/tech/1156413899/ 終了
27 名前:20 mailto:sage [2007/02/14(水) 08:22:19 ID:???] [9 Feb 7:58pm UTC] nlopess@php.net bundled pcre upgrade to version 7.0.
28 名前:nobodyさん mailto:sage [2007/02/17(土) 11:34:20 ID:???] PHPで正規表現 www.pahoo.org/e-soul/webtech/php05/
29 名前:nobodyさん mailto:sage [2007/02/18(日) 02:46:46 ID:???] マルチで宣伝か?
30 名前:nobodyさん mailto:age [2007/02/20(火) 02:12:09 ID:???] 質問よろしくお願いします ABCと続く場合を除くABという文字列を指定したい場合は どのように書いたらよいでしょうか・・・
31 名前:nobodyさん mailto:sage [2007/02/20(火) 02:21:35 ID:???] 正規表現ってどんなメリットあるの? 覚えなくても良いんでしょ? よく、書く行数が減る⇒デバッグの時に楽って言うけど、 ロジック設計を完璧にするほうが大事じゃないかなーなどと思ってしまいます(ドシロウトですが) そんなのとうに完璧って人がチャレンジすることなんですかねー
32 名前:nobodyさん mailto:sage [2007/02/20(火) 02:23:50 ID:???] >>30 Rubyでは(おそらくPerlやPHPのpreg_*系でも) AB(?!C)
33 名前:nobodyさん mailto:sage [2007/02/20(火) 02:26:48 ID:???] >>31 文字列のパターンを記述するために特化した言語なので、 覚えれば非常に楽ができる。 ロジックで100行とか費やすようなパターンを、 正規表現では1行で表すことも可能(かもしれない)。 覚えなくてもいいが、覚えた方がはるかに楽ができるよ。
34 名前:nobodyさん mailto:sage [2007/02/20(火) 07:20:03 ID:???] >>31 ロジック組めないやつが楽をするためだよ 文字列から数字の部分だけ抜き出して表示とか正規表現なら簡単に出来るが 使わないでやれとかいわれたら時間がかかる。おまけにバグる。
35 名前:nobodyさん mailto:sage [2007/02/20(火) 08:24:42 ID:???] 数字だけ抜き出すのが何かものすごい魔法のような技術のように思っているらしいw
36 名前:nobodyさん mailto:sage [2007/02/20(火) 08:27:41 ID:???] あるいは「おれってすげえ気の利いたこと言った?」とか思ってるのかなwww
37 名前:nobodyさん mailto:sage [2007/02/20(火) 08:35:59 ID:???] 【心の】旦那には絶対言えない過去4【奥に】既婚女性板 human6.2ch.net/test/read.cgi/ms/1168957905/ 7 名前:可愛い奥様[] 投稿日:2007/01/18(木) 03:03:54 ID:iE8GVdnP 援交10回、中絶2回、デリヘル、ソープ1年、整形2か所 12 名前:可愛い奥様[] 投稿日:2007/01/19(金) 22:43:01 ID:s7dkuHKN0 高校生の頃から喫煙。不倫経験あり。 旦那は私にとって7人目の彼氏。(旦那には3人目と嘘ついた) 酒に酔った勢いでワンナイトラブの経験あり。 25 名前:可愛い奥様[] 投稿日:2007/01/26(金) 04:08:25 ID:IfNo5kNWO 中絶4回、イメクラ一年、二重整形、大学中退、性病2回、同棲3回。 45 名前:可愛い奥様[sage] 投稿日:2007/02/04(日) 14:24:40 ID:PBhJa6V+0 自分の預金が旦那の年収の7倍くらいあること。 学生のとき、ちょっとした事業起こして大成功w そのことも話してない。 47 名前:可愛い奥様[] 投稿日:2007/02/04(日) 17:16:59 ID:CaAW9Ko50 うーん。堕胎。母子手帳に記載しないといけないから…そこは糊で貼付けた。 義母にはバレているだろう。でも回数が…1回多いとは…永遠の秘密。 92 名前:可愛い奥様[] 投稿日:2007/02/09(金) 23:46:04 ID:QRXcETQYO セクキャバでバイト経験あり。援交しまくり時代もあり。ヤッた数は100人くらい。 私バツイチで今の旦那には元夫の浮気が原因で離婚したの。とか言ったけどほんとは逆。 好きな人できて夫捨ててのりかえた。浮気しまくりだった。 すごくいい夫だったのにすごく最低な事したって思う。 106 名前:可愛い奥様[] 投稿日:2007/02/18(日) 09:56:13 ID:wIf/65Md0 半年前、万引きして捕まった事。嘘泣きして逃がしてもらった(^^v
38 名前:nobodyさん [2007/02/20(火) 19:16:13 ID:W7lgDSO2] /tatakanamk/ と言う文字列があって/から/までの検出をするにはどう書けばよいでしょうか? /と/も含めて12文字を検出したいのです。 超初歩的ですがよろしくお願いします。
39 名前:nobodyさん mailto:sage [2007/02/20(火) 19:38:28 ID:???] >>1 の >使用言語を書くのを忘れずに。 くらいは守ってくれ。処理系によって正規表現は千差万別だからな。
40 名前:nobodyさん mailto:sage [2007/02/20(火) 19:56:10 ID:???] エスパー見習いの漏れが使用言語は Perl と推測。 バックスラッシュを前置してエスケープする。 /\/tatakanamk\//
41 名前:nobodyさん mailto:sage [2007/02/20(火) 22:52:27 ID:???] >>32 ありがとうございました!
42 名前:nobodyさん mailto:sage [2007/02/21(水) 02:10:45 ID:???] >>40 m{/tatakanamk/} みたいにやたらとエスケープ連発しないですむ方法を教えろよ…
43 名前:nobodyさん mailto:sage [2007/02/21(水) 03:35:33 ID:???] エスケープを知らないのも問題だから両方教えるべきだとおも
44 名前:40 mailto:sage [2007/02/21(水) 10:00:30 ID:???] だってもし他の言語だったとしても応用が一番効きそうじゃん。 と言い訳。
45 名前:42 mailto:sage [2007/02/22(木) 01:40:37 ID:???] >>43 そりゃ確かにそうだね。 必要のないところまでエスケープしているような正規表現見てると 腹が立ってくるんだよw >>44 わかった、わかったw
46 名前:nobodyさん mailto:sage [2007/03/02(金) 01:04:13 ID:???] 保守
47 名前:nobodyさん [2007/03/10(土) 16:03:45 ID:VXyj5Dh3] <? $str = "/get/data/&country=2&url=www.example.com/?url=http://www.example.com"; このデータの中ではじめの url= 以降の文字列を取得するにはどうすればいいのでしょうか?ちなみにurl=以降の文字列にも再度url=が含まれていますが、これを無視してすべて取得したいです。 どうぞよろしくお願いします。
48 名前:nobodyさん mailto:sage [2007/03/11(日) 04:44:19 ID:???] >>47 url=www.example.com/?url=http://www.example.com がとれりゃあいいのか? url=.*$ で何か不都合ある?
49 名前:nobodyさん [2007/03/12(月) 12:20:51 ID:DmSqMrCU] php使ってます。 文字列中の?を抽出するにはどう記述したらいいのでしょう? ¥? じゃだめなことはわかりましたorz
50 名前:nobodyさん mailto:sage [2007/03/12(月) 12:48:47 ID:???] バックスラッシュを前に置く。
51 名前:nobodyさん [2007/03/12(月) 14:27:04 ID:DmSqMrCU] ばっちですた!
52 名前:nobodyさん [2007/03/18(日) 21:25:07 ID:7HFdTRo7] 教えてください。 $in=ユーザーからの入力 $str='abc%ghi'; $str=preg_replace('/(\w+)%(\w+)/',"\1$in\2",$str); ユーザーからの入力を'def'にしておくと、abcdefghiになります。 ですがユーザーからの入力が'123'の場合、ghiになります。 たぶん、置換後の文字列が「\1123\2」と、繋がって解釈されているからだと思います。 {\1}のように囲むとか、なにか繋がらないように解釈してもらう方法はないですか? 二段階に分けて置換するとかすれば回避できなくはないですがスマートではなさそうなので。
53 名前:52 mailto:sage [2007/03/18(日) 21:25:46 ID:???] すいませんphp4です。
54 名前:nobodyさん mailto:sage [2007/03/18(日) 22:00:48 ID:???] こうしたらこうなるって結果を一行にまとめて
55 名前:nobodyさん mailto:sage [2007/03/19(月) 08:43:07 ID:???] >>52 "\\1" . $in . "\\2" "\\1{$in}\\2" というか普通に\\1と\1を間違えてるだけじゃない?
56 名前:52 mailto:sage [2007/03/20(火) 00:34:39 ID:???] >55 >普通に\\1と\1を すいません間違いでした。(ここに貼ったあと直しましたが動作変わらず。) そのうえ↓を書いてて解決しました。手間取らせてすいません。 $in='123'; $str=preg_replace('/(abc)%(def)/',"\\1$in\\2",$str); //これが $str=preg_replace('/(abc)%(def)/',"\\1123\\2",$str); //こうなってしまうので $str=preg_replace('/(abc)%(def)/',"def",$str); //\\1123はないので消えて\\2だけ置換され print $str; //defが出力される と思うので、{$in}でくくっても結果は同じでした。 一番いいのは\\1側を{\\1}くくる方法だと思うのですが。 →phpだと\\1は\$1でもいいので、"\${1}$in\$2"で解決しますた。ほんとすいません。
57 名前:nobodyさん [2007/03/23(金) 00:39:31 ID:P+rVOV8A] $str = "foo@=barfoo@=bar"; $str = preg_replace('/foo.*(=)bar/', "a\\1b", $str); を実行した場合の結果をa=ba=bにしたいのですが、 実際はa=bになってしまいます。 どこが間違っているのでしょうか?
58 名前:nobodyさん mailto:sage [2007/03/23(金) 02:15:09 ID:???] >>57 .* が何にマッチしているのか確かめてみ。
59 名前:57 [2007/03/23(金) 10:16:39 ID:P+rVOV8A] >>58 .*を bar と続く文字列以外の任意の文字列に変えればいいというのはわかるのですが、 $str = preg_replace('/foo[^(bar)]*(=)bar/', "a\\2b", $str); としてもうまくいきません。 エロイ人よろしくお願いします。
60 名前:nobodyさん mailto:sage [2007/03/23(金) 10:45:01 ID:???] 「ある文字列を含まない文字列」の正規表現はめんどいので最短マッチ .*? で。
61 名前:57 mailto:sage [2007/03/23(金) 16:57:03 ID:???] >>60 おお!それでできました。 ありがとうございます。
62 名前:nobodyさん mailto:sage [2007/03/24(土) 01:11:05 ID:???] >>59 foo[^(bar)]*(=)bar ブラケットの中とかどこでこんな書き方覚えてくるんだよ… 今回の場合、barまで見ないでも = までみりゃあいいんじゃないの? 不用意に最短マッチ使ってるとパフォーマンスで泣くよ? foo[^=]*=bar を a=b に置換でいいじゃん。 =をキャプチャするのも意図がわからん。
63 名前:nobodyさん [2007/03/24(土) 12:15:47 ID:yU007f6l] <html> <head> <title>テスト</title> </head> <body> <!-- ここから --> あああああああああああ<br /> あああああああああああ<br /> あああああああああああ<br /> あああああああああああ<br /> あああああああああああ <!-- ここまで --> </body> </html> このようなhtmlをPHP5のfile_get_contentsで読み込んで <!-- ここから -->〜<!-- ここまで -->を取得したいのですが どうすれば良いですか? "/<!-- ここから -->(.*)<!-- ここまで -->/" で読めませんでした
64 名前:nobodyさん mailto:sage [2007/03/24(土) 13:41:28 ID:???] >>62 > 不用意に最短マッチ使ってるとパフォーマンスで泣くよ? kwsk
65 名前:nobodyさん mailto:sage [2007/03/24(土) 16:11:22 ID:???] $text = file_get_contents(なんちゃらかんちゃら); mb_ereg("<!-- ここから -->(.*)<!-- ここまで -->", $text, $data); echo $data[1]; 改行に邪魔されてるんだろう
66 名前:nobodyさん mailto:sage [2007/03/25(日) 02:07:05 ID:???] >>65 その記述だとパターンの部分でエラーがでない?
67 名前:nobodyさん [2007/04/07(土) 00:58:14 ID:YCq54Nw2] 始めまして。 C#で、正規表現でyyyy/mm/dd書式をどう表現するのでしょうか? ちなみに、.NETの正規表現はPerl互換だそうです。
68 名前:nobodyさん mailto:sage [2007/04/07(土) 04:03:00 ID:???] >>67 Datteクラスかなんかに文字列食わせて、例外飛ぶかどうかで 判定したら? 正規表現でやると 9999年13月35日をうけつけてもいいってのなら \d{4}/\d{2}/\d{2} かな。 月と日は頑張ればなんとかできるけどめんどくさいからやらない。
69 名前:nobodyさん [2007/04/08(日) 02:12:40 ID:EVMLEL7f] >>68 ありがとうございます。 実は、正規表現Validatorを使っているのです。
70 名前:nobodyさん mailto:sage [2007/04/08(日) 16:37:48 ID:???] >>68 ああ、そういうことなのね。 一応注意しておくけど、C#の文字列のエスケープも\を使うので プログラムに書くときは "\\d{4}..." のように\を重ねるか、 @"\d{4}.." のような\が特別扱いされない形式にしてね。
71 名前:nobodyさん [2007/04/15(日) 02:12:22 ID:v7Ys668x] php5です。ファイルのフルパスをディレクトリ,ファイル名,拡張子に分割してその配列を返したくてこう書きました。 $pattern1 = '`^(.*)(?:[/\\\](.*)){1}$`'; preg_match($pattern1, $fullpath, $match1); $pos = strpos($match1[2], '.'); if($pos === false){ return array($match1[1], $match1[2]); }else{ $pattern2='`^(.*?)\.(.*)$`'; preg_match($pattern2, $match1[2], $match2); return array($match1[1], $match2[1], $match2[2]); } 必ず拡張子があるなら一度のpreg_matchでキャプチャ出来たのですが 拡張子無しファイル混じりだった場合の正規表現がうまく思いつかずに二段階(三段階?)になってしまいました でもpreg_matchやってその中で'.'探して、あったらさらにpreg_matchというのはまわりくどいように思います この処理を一度にこなす正規表現の考え方のヒントをください
72 名前:nobodyさん mailto:sage [2007/04/15(日) 02:14:51 ID:???] ああ半角空白の連続ダメなんだっけ インデント消えちゃた
73 名前:nobodyさん mailto:sage [2007/04/15(日) 03:03:32 ID:???] >>71 jp.php.net/manual/ja/function.dirname.php 及び関連項目を参照。
74 名前:73 mailto:sage [2007/04/15(日) 03:04:35 ID:???] あ、ごめん。正規表現スレだったね。無視して。
75 名前:73 mailto:sage [2007/04/15(日) 03:10:35 ID:???] で、考えてみたんだけど、 $path = '/abc/def.g/eee.txt'; preg_match('/(.*?)¥/([^¥/]*)¥.([^¥/.]*$)/', $path, $match); print_r($match); こんな感じでどう?
76 名前:73 mailto:sage [2007/04/15(日) 03:17:28 ID:???] これじゃ拡張子のない場合に対応できないか。 /(.*?)¥/([^¥/]*?)(¥.[^¥/.]*)?$/ でどうかな。スレを汚してしまってすまん。
77 名前:nobodyさん mailto:sage [2007/04/15(日) 09:05:07 ID:???] PHPなら、dirnameとbasenameつかえば正規表現なんか使う必要一切ないだろ
78 名前:nobodyさん mailto:sage [2007/04/15(日) 11:13:03 ID:???] >>77 >>73-74
79 名前:71 mailto:sage [2007/04/15(日) 11:28:41 ID:???] 正規表現無しだとこんな感じでした $p = pathinfo($fullpath); $temp = explode('.',$p['basename'],2); $p['name'] = $temp[0]; if(isset($temp[1])){ $p['ext'] = $temp[1]; } >>76 を参考にして正規表現で書けました $pattern = '`^(.*)[/\\\]([^.]*?)(?:\.(.*))?$`'; preg_match($pattern, $fullpath, $match); ありがとうございました
80 名前:nobodyさん [2007/05/03(木) 19:11:49 ID:meD6A7ah] phpで携帯電話の絵文字を取り除くようpreg_replaceを使っているのですが、 絵文字が複数含まれた文字列?などでうまく取り除けません。 こんな感じにしているのですが原因やおかしな点などご教示ください。お願いします。 $str = '絵文字が含まれる文字列'; $emojiSjisChars = '(?:[\x00-\x7F\xA1-\xDF]|(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]))'; #DoCoMoの場合 $str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])|(?:\xF9[\xB1-\xFC])/', '$1', $str); #AUの場合 $str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:[\xf3\xf6\xf7][\x40-\xfc]|\xf4[\x40-\x8d])/', '$1', $str); #Softbankの場合 $str = preg_replace('/\G(' .$emojiSjisChars. '*?)\x1B\x24[E-G].*?\x0F/', '$1', $str);
81 名前:80 [2007/05/03(木) 19:17:55 ID:meD6A7ah] すいません。↑の$emojiSjisCharsは$sjisCharsの命名間違えです。
82 名前:nobodyさん mailto:sage [2007/05/03(木) 19:26:15 ID:???] ちゃんと読んでないけど (?:絵文字のコード) な部分を (?:絵文字のコード)+ にするだけではないの?
83 名前:80 [2007/05/03(木) 20:24:41 ID:meD6A7ah] >>82 レスありがとうございます。 下のように+を入れましたがダメでした。 色々考えているとどんどん分からなくなってきました... おかしな点があれば引き続きご教示お願いします。 #DoCoMoの場合 ※見にくいので表示上改行します。 $str = preg_replace( '/\G(' .$emojiSjisChars.'*?) (?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])+| (?:\xF9[\xB1-\xFC])+/', '$1', $str);
84 名前:nobodyさん mailto:sage [2007/05/04(金) 00:29:52 ID:???] オライリーの詳細正規表現の本って 通常のと第2版ってのがあるけどどっちがいいのよ?
85 名前:nobodyさん mailto:sage [2007/05/04(金) 03:16:56 ID:???] >>84 通常のって初版のことかい? そりゃあ新しい方が。 具体的にどう変わったか覚えてないのでオライリーのサイトを見たけど、 Perlの対象が5.8にあがっているのと、.JAVAとNETの説明が増えたとからしい。
86 名前:nobodyさん mailto:sage [2007/05/10(木) 19:57:43 ID:???] php4.3.11です --------------------------------- $str = <<< DOC_END あああああ いいいいい <html_start> ううううう えええええ <html_end> おおおおお DOC_END; $pattern = "/<html_start>(.*)<html_end>/"; $replacement = 'aaaabbbb'; $res = preg_replace($pattern, $replacement, $str); print_r($res); --------------------------------- と出力してみましたが何も表示されませんでした。 ホントは「あああああいいいいいaaaabbbbおおおおお」と出て欲しかったのですが…。 最終的には<html_start><html_end>で囲まれた範囲に PHPのhtmlspecialchars()やnl2br()関数を適用して出力したいです。
87 名前:nobodyさん mailto:sage [2007/05/10(木) 20:35:51 ID:???] >>86 > $pattern = "/<html_start>(.*)<html_end>/"; 「 ^ や $ があるってことは正規表現って行単位?複数行の場合は?」とか思いながら $pattern = "/<html_start>(.*)<html_end>/s"; にして試す。で、「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。 うちのPHP5さんでは元のコードでも「何も表示されない」にはならなかったな。 ブラウザ出力: あああああいいいいい うううううえええええ おおおおお ソース: print_r($str) な感じ
88 名前:nobodyさん mailto:sage [2007/05/10(木) 20:51:04 ID:???] >>87 s修飾子で動作しました!ありがとうございます。 >「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。 関数のページばかりみて jp.php.net/manual/ja/ref.pcre.php jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php のページの存在に気がつきませんでした…。 あとは関数を適用する方法を探してみますっ!
89 名前:nobodyさん mailto:sage [2007/05/10(木) 21:18:19 ID:???] 案外この手の質問したい人もいるんだね
90 名前:86 mailto:sage [2007/05/14(月) 15:45:03 ID:???] 後方置換する時に関数かましたくマニュアル眺めてたら「e修飾子」をみつけたのですが >>87 の「S修飾子」と同時に使おうと $pattern = "/(.*?)<html_start>(.*)<html_end>(.*?)/se"; $replacement = "'\\2''\\1''\\3'"; こんなコードを書いてみた所 Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING Failed evaluating code: といった感じで怒られます 修飾子2個は同時に使えないのでしょうか…?
91 名前:86 mailto:sage [2007/05/14(月) 17:55:10 ID:???] >>86 ですが 自分で見返してたらこれは既に正規表現でなくPHPの質問な気がしてきましたので該当スレに 移動しますです。 スレ違、申し訳ありませんでした。
92 名前:nobodyさん mailto:age [2007/05/17(木) 13:08:20 ID:???] IPを正規表現でチェックしたいのですが 210.000.111.1〜210.000.111.255 215.100.000.1〜215.100.000.255 の2つに当てはまる場合、TRUE(int1)をかえすにはどうすればいいでしょうか? 以下のようにやってみたのですが他のIPでもint(1)がかえってきます。 preg_match('/^210\.000\.111\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ || ^215\.100\.000\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $_SERVER['REMOTE_ADDR'])
93 名前:nobodyさん mailto:sage [2007/05/17(木) 13:53:20 ID:???] >>92 正規表現で foo || bar みたいなのはないっしょ。 /^(210...(中略)...|215...(中略)...)$/ みたいな。 アドレスの範囲のチェックをするなら正規表現使わない方が良いと思うけどね。
94 名前:おながいします [2007/06/06(水) 13:28:10 ID:iKhV2zih] すみませんが、価格にマッチする正規表現を教えていただけないでしょうか。 例 \1,000,000,000 \12,345 \1,230 \200 \10 数字3つごとに、カンマが入り、先頭に円マーク(\)のくるものです。 判らないためググッたのですが、正規表現に関する本ばかり検索結果として出てきまして…。
95 名前:おながいします [2007/06/06(水) 13:29:35 ID:iKhV2zih] 上の>>94 ですが、使用言語はPHPです。
96 名前:nobodyさん mailto:sage [2007/06/06(水) 13:41:59 ID:???] それは、「\12,1232,32」みたいなのははじきたいの?
97 名前:nobodyさん mailto:sage [2007/06/06(水) 13:49:54 ID:???] 「正規表現 カンマ」とかでぐぐってみると・・・
98 名前:nobodyさん mailto:sage [2007/06/06(水) 14:54:17 ID:???] >>98 穴だらけだけどこんなんのこと? $hoge = "\1,000"; if(ereg(".*[0-9,\\]",$hoge)): echo "ok"; else: echo "ng"; endif;
99 名前:nobodyさん mailto:sage [2007/06/06(水) 15:08:26 ID:???] >>98 つ[ www.google.co.jp/search?hl=ja&q=%E9%87%91%E9%A1%8D%E3%80%80%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&lr= ]
100 名前:94 mailto:sage [2007/06/06(水) 17:22:28 ID:???] >>96 >>97 >>98 >>99 皆様、ありがとう御座いました。 「価格 正規表現」、「値段 正規表現」でググってました(汗)
101 名前:nobodyさん mailto:sage [2007/06/30(土) 13:42:20 ID:???] (?:pattern),および(?>=pattern)が認識されないエディタにおいて、 $obj->method();の「method」のみにマッチさせるにはどうすればいいでしょうか。 ちなみに(?=pattern)は使えます。
102 名前:nobodyさん [2007/07/09(月) 23:51:58 ID:jN4+J6ks] VB.NETで正規表現を書いています。 条件としては、「A0123」のように、先頭がアルファベットのAでその他が数字4桁という正規表現と、 「01234」のような数字5桁という二種類のどちらかにマッチする正規表現を作っています。 正規表現は苦手で困っています。 どなたかご教授下さい。 よろしくお願いします。
103 名前:nobodyさん mailto:sage [2007/07/10(火) 01:52:51 ID:???] >>012 [A\d]\d{4} とか。 あと「教示」な。
104 名前:nobodyさん [2007/07/13(金) 17:31:53 ID:lsKPRG81] phpで文中の郵便番号の部分を置き換える正規表現を書いているのですが 電話番号(携帯など)も引っかかってしまいます どのように直せばいいのでしょうか? mb_ereg_replace('([0-90-9]{3}[\-−ー‐]+[0-90-9]{4}|[0-90-9]{7})',"郵便番号",$data)
105 名前:nobodyさん mailto:sage [2007/07/14(土) 04:11:15 ID:???] mb_ereg って戻り読み使えなかったんだっけ? (\D)\d{3}-\d{4}(\d{3})?(?!\D) を \1郵便番号 で置換。でどう? 面倒くさいので全角数字とかハイフンの類は自分で調整して。
106 名前:nobodyさん [2007/07/20(金) 05:15:36 ID:wp5plGkY] $textにHTMLタグを含んだ文字列が入っていて、 <>外部の< > " をそれぞれ < > " に置換したい(<>内部はそのまま) のです。以下のように、まず全ての<>"を置換し、HTMLタグの<>だけを 元に戻してみましたが、うまくいきません。どなたかご教授願います。 言語はあとでPHPでも同様のものを作成する予定ですが、今はPerlです。 $text = "tt\"tt<3bbb\nst<a gg&tg;gg href=\"aaa\">bbb<\n"; print "before=\n"; print $text."\n\n"; $text =~ s/</</g; $text =~ s/>/>/g; $text =~ s/\"/"/g; $text =~ s/<([^(>)]*)>/<$1>/g; while ($text =~ /<([^>]*)\"\;([^>]*)>/) { $text =~ s/<([^>]*)\"\;([^>]*)>/<$1\"$2>/g; } print "after=\n"; print $text."\n"; ↓このように置換されることを想定しています。 tt"tt<3bbb st<a gg&tg;gg href="aaa">bbb<
107 名前:nobodyさん mailto:sage [2007/07/20(金) 05:26:31 ID:???] 久しぶりに実体参照の地雷を踏みまくってる投稿を見た。
108 名前:106 [2007/07/20(金) 05:38:28 ID:wp5plGkY] 「このように置換されることを想定しています。 」の部分で 実体参照の部分がそのまま表示されてしまったので全角で修正します。 よろしくお願いします。 tt&quot;tt&lt;3bbb st<a gg&tg;gg href="aaa">bbb&lt;
109 名前:nobodyさん mailto:sage [2007/07/20(金) 08:47:21 ID:???] 何がやりたいのかさっぱりだ。 どこまでがタグか解析してタグ以外のタグ文字を実体参照化したいということ? それ元のテキストを生成してる時点で何か間違ってるだろ
110 名前:nobodyさん mailto:sage [2007/07/20(金) 12:57:58 ID:???] 何かの内側と外側を判定するのは結構面倒だよなぁ。こないだ<a 〜>から</a>までの 間だけを操作しようと3分考えて、ネストがありえることに気付いて挫折した。
111 名前:nobodyさん mailto:sage [2007/07/20(金) 13:08:08 ID:???] って>>106 読んでなかった。>>109 に同感。 それじゃあどこからどこまで切れば良いのかわからない。 xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz の時、何が保証されていて、どこからどこまでをタグと見なせばいいの。
112 名前:106 [2007/07/21(土) 01:21:27 ID:VYWED9XA] ごめんなさい。説明が足りませんでした。 掲示板で投稿された書き込みに対して、上記のような処理をしたいと考えています。 >>106 のスクリプトは処理を掲示板に組み込む前に処理の部分だけテストするために作成したものです。 $textは書き込み内容と想定しています。 一番内側の<>をタグと見なしたいです。 xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz この場合ですと、<fhg>と<qq>をタグとみなし、他は実体参照化したいと考えています。
113 名前:nobodyさん mailto:sage [2007/07/21(土) 02:45:37 ID:???] つまりタグの定義は <[^>]*> ということですね。
114 名前:106 [2007/07/21(土) 08:55:35 ID:VYWED9XA] >>113 左様です。
115 名前:nobodyさん mailto:sage [2007/07/21(土) 09:30:47 ID:???] 違うだろ、<[^<]*?>だろ、112の定義なら。 それ以前に106はエスケープ、エンコード、サニタイズ処理で何か間違ってる use HTML::Entities; $tag_re = qr/<[^<]*?>/; $text =~ s/($tag_re)|(.)/$1||encode_entities($2)/eg; print $text;
116 名前:nobodyさん [2007/07/21(土) 13:10:23 ID:7GHIEbSO] PHPで localhost/index.htm https://localhost/index.htm test.com/index.htm から /index.htm /index.htm /index.htm これを出力したい場合 ereg_replace('^https?://(localhost|test.com)' ,'' ,$line); これでは間違ってるでしょうか? どなたか教えて下さい。お願いします