- 1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
- 【正規表現道場の掟】
・言語不問 ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現と関係ない話・質問は他スレへどうぞ。
- 652 名前:nobodyさん mailto:sage [2010/10/03(日) 17:27:45 ID:???]
- 『a*a/a/*/a*a/a/*/a*a/a*a/a/*/a*a/a/*/a*a/a*a/a/*/a*a/a/*/a*a/a*a/a/*/a*a/a/*/a*a/a』
この文字列の /* ~~~ */ で囲まれた部分それぞれを全て正規表現で抜き出せるのですか?
- 653 名前:652 mailto:sage [2010/10/03(日) 17:28:53 ID:???]
- すいません。使用言語はPHP5.1.6です。
- 654 名前:652 mailto:sage [2010/10/03(日) 17:53:37 ID:???]
- 事故解決しました。
- 655 名前:nobodyさん mailto:sage [2010/10/20(水) 18:27:58 ID:???]
- 「/index.php/blog/new/id/17」
から、phpファイル名(/index.php)のみ削除するにはどうすればいいでしょうか? ファイル名は変わることがあります。
- 656 名前:nobodyさん mailto:sage [2010/10/20(水) 22:18:19 ID:???]
- s{/[^/]+?\.php}{}
- 657 名前:655 mailto:sage [2010/10/21(木) 01:50:09 ID:???]
- PHPのpreg_replace()に渡してみたのですが、
>Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in と言われてしまいます。。。
- 658 名前:656 mailto:sage [2010/10/21(木) 02:29:25 ID:???]
- どういう引数を渡したのかちょっと知りたい。
<?php $str = '/index.php/blog/new/id/17'; // $pattern = '/\/[^\/]+?\.php/'; // デリミタが / のときはエスケープ $pattern = '{/[^/]+?\.php}'; // デリミタは { と } $replace = ''; echo preg_replace($pattern, $replace, $str); ?>
- 659 名前:nobodyさん [2010/11/13(土) 19:09:08 ID:peMm7xtt]
- PHPで、例えば
こう言った文章を考えるのは、たのしい。 わたしは、「こんにちは」と言いました。 「この文章は、なかなか面白いですね。とても正確な正規表現を考える必要があるんです。」 「では、そんな正規表現をどうやって見つけるのでしょうか?そうだ、質問してみましょうよ!。」 「なるほど?。それは面白いアイディアだ。」と、もう一人は言った。 という文章があったときに、 "こう言った文章を考えるのは、たのしい。", "わたしは、","「こんにちは」","と言いました。", "「この文章は、なかなか面白いですね。","とても正確な正規表現を考える必要があるんです。」", "「では、そんな正規表現をどうやって見つけるのでしょうか?","そうだ、質問してみましょうよ!。」", "「なるほど?。","それは面白いアイディアだ。」","と、もう一人は言った。" という感じに分割して配列にしたいと思っています。 現在使っている正規表現は $contents = array(); preg_match_all('/.*?。|.*?「/m',$content,$contents); という感じで書いてみました。 $contentがもとの文章で、$contentsが新しく得る配列です。 どうも複雑でどうしたら良いのかわからないので質問させていただきます。よろしくお願いします。
- 660 名前:nobodyさん mailto:sage [2010/11/14(日) 09:26:59 ID:???]
- 一度にやろうとしないで分けてやればいいと思うよ
- 661 名前:nobodyさん [2010/11/14(日) 22:54:16 ID:xJLLsuw0]
- 正規表現での重複行の削除について
質問させてください みかん みかん みかん (空白行) りんご → りんご なし なし なし (空白行) なし (空白行) かき かき というかんじで 重複行は空白のままで残したいのですが どうすべきでしょうか?
- 662 名前:nobodyさん mailto:sage [2010/11/14(日) 22:55:28 ID:???]
- スクリプト言語でやったほうが楽じゃね?
- 663 名前:nobodyさん [2010/11/14(日) 23:35:35 ID:xJLLsuw0]
- できればこんなかんじで
エディタの検索置換でやりたいです ↓ d.hatena.ne.jp/seuzo/20080531/1212228668
- 664 名前:nobodyさん mailto:sage [2010/11/15(月) 00:12:15 ID:???]
- でこぽん
みかん りんご りんご みかん みかん りんご でこぽん こんな風に離れた行に重複がある場合はどうすんだろ?ソート済みなのかな。
- 665 名前:nobodyさん [2010/11/15(月) 00:48:49 ID:AfSBC14n]
- エクセルでソートしてあるます
- 666 名前:nobodyさん [2010/12/06(月) 23:51:24 ID:k5Tua1Td]
- メールアドレスが正しいかマッチング。
ただし、@gmail.com、@googlemail.com、@livedoor.comの場合は @の前に「+」「.」が含まれている場合は除外する。 これって正規表現1発でできたりしますか?
- 667 名前:nobodyさん mailto:sage [2010/12/06(月) 23:53:00 ID:???]
- yes
- 668 名前:nobodyさん mailto:sage [2010/12/08(水) 14:11:59 ID:???]
- メールアドレスの妥当性の判定はどのぐらい厳密にやるのだろう
- 669 名前:nobodyさん [2010/12/20(月) 16:51:11 ID:Qb400/Ia]
- php5で、tableタグ内の改行(<br />)を全て削除したいのです。
どうしたら良いんでしょう。 ●置換前 <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br /> <tbody><br /> <tr><br /> <td><br /> </td><br /> </tr><br /> </tbody><br /> </table> ●置換後 <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"> <tbody> <tr> <td> </td> </tr> </tbody> </table>
- 670 名前:nobodyさん mailto:sage [2010/12/20(月) 20:03:43 ID:???]
- >>669
str_replaceでおk
- 671 名前:nobodyさん mailto:sage [2010/12/20(月) 20:48:53 ID:???]
- 普通はstrip_tagsじゃね?
- 672 名前:nobodyさん mailto:sage [2010/12/21(火) 08:13:01 ID:???]
- テーブル外のbrは削除したくないんだろ
- 673 名前:nobodyさん mailto:sage [2010/12/24(金) 08:47:52 ID:???]
- この手のことをやりたい人は沢山いると思うので
散々既出の可能性がありますが、 参考ページでも構いませんので教えてください UWSCのコードを書くのにK2Editorを使っています 仕上げたコードの可読性をあげるために 演算子の前後にスペースを入れたいです 例 x+y=z x + y = z K2Editorの正規表現はBREGEXP.DLLを使っています 以下の置換をマクロで行います "([^ ])([\+\-\*<])","$1 $2" "([^ <])>","$1 >" "([\+\-\*=])([^ ])","$1 $2" "([^ <>])=","$1 =" "<([^ =>])","< $1" ">([^ =])","> $1" "([^ \/])\/([^\/])","$1 /$3" "([^\/])\/([^ \/])","$1/ $3" " "," " " +"," " "([,=\+\-\*\/\(<>]|mod|and|or|xor) - ","$1 -" 正規表現はド素人でネットで検索しながら書いたので まずい部分も多いと思いますがそれは置いといて、 本題はダブルコーテーションで括られた文字列内は 置換したくないのですが、何か方法はありますか?
- 674 名前:nobodyさん mailto:sage [2010/12/29(水) 07:28:15 ID:???]
- 性器表現難しいよね
- 675 名前:nobodyさん [2011/01/06(木) 22:08:59 ID:y0rS3N6j]
- 質問です。PHP5.3でpreg_matchを使っているのですが、例えば
「次章(第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては・・・」 という文章より法律名称や条などをwhileループで拾い上げたいのですが、 /([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/ で拾い上げると、法律名称(上の文章だと「建築基準法」)が抜けてしまうので /([建築基準法|建築基準法施行令]*)([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/ と言う形で拾うと、なぜかpreg_match($match, $text, $arr)の$arrの中に、なぜか「第」という文字が拾われてきません。 これは何故なんでしょうか?? もし理由が分かる方がいらっしゃったら、お教え願います。
- 676 名前:nobodyさん mailto:sage [2011/01/07(金) 03:55:37 ID:???]
- 性器表現で痴漢する
- 677 名前:nobodyさん mailto:sage [2011/01/07(金) 03:58:44 ID:???]
- $text = '次章(第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては';
$pat1 = '/([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/'; $pat2 = '/([建築基準法|建築基準法施行令]*)([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/'; preg_match($pat1, $text, $arr); var_dump($arr); preg_match($pat2, $text, $arr); var_dump($arr); array(7) { [0]=> string(62) "第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては" [1]=> string(2) "第" [2]=> string(2) "20" [3]=> string(2) "条" [4]=> string(1) "3" [5]=> string(0) "" [6]=> string(53) "、第1節の3、・・・除き、建築基準法第80条の2にあっては" } array(8) { [0]=> string(62) "第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては" [1]=> string(0) "" [2]=> string(2) "第" [3]=> string(2) "20" [4]=> string(2) "条" [5]=> string(1) "3" [6]=> string(0) "" [7]=> string(53) "、第1節の3、・・・除き、建築基準法第80条の2にあっては" } 第が拾われないってどこの話? あと関係ないけど複数拾いたいならpreg_match_all
- 678 名前:nobodyさん mailto:sage [2011/01/07(金) 08:16:20 ID:???]
- [マルチバイト] この時点でおかしいやろ
- 679 名前:nobodyさん mailto:sage [2011/01/07(金) 08:35:43 ID:???]
- u 修飾子つきじゃないのかな?
[第]* は量指定子も含めてどうかと思うけどね。
- 680 名前:nobodyさん mailto:sage [2011/01/07(金) 11:13:33 ID:???]
- PHPのPerl互換正規表現で、連続した文字を判定したい(3文字以上)
下のではだめ? preg_match("/(.)\1{3,}/", $hoge) 例→AAA、bbb、111、あああ他なら引っかかるようにしたい、ということ
- 681 名前:nobodyさん mailto:sage [2011/01/07(金) 11:42:34 ID:???]
- >>680
考え方はいいけど、最初の(.)で1文字食われるから繰り返し回数が 1回多い。それじゃ4文字以上になっちゃうぞ。
- 682 名前:nobodyさん mailto:sage [2011/01/07(金) 12:06:39 ID:???]
- >>681
4文字以上連続した文字だとしても、想定したように動かない・・・ ↓OK(Perl) my $hoge = 'aaaa'; if ($hoge =~ /(.)\1{3,}/) { print 'OK'; } else { print 'NG'; } ↓NG(PHP) $hoge = 'aaaa'; if (preg_match("/(.)\1{3,}/", $hoge)) { echo 'OK'; } else { echo 'NG'; } PHPは\1って表現できない?
- 683 名前:nobodyさん mailto:sage [2011/01/07(金) 12:28:18 ID:???]
- "..."の中だから¥¥1と書かないと駄目だろ。
- 684 名前:nobodyさん mailto:sage [2011/01/07(金) 13:39:43 ID:???]
- $hoge = 'aaaa';
echo preg_match('/(.)\1{3,}/', $hoge) ? 'OK' : 'NG'; // OK "\\1" か '\1' だよね。
- 685 名前:680 mailto:sage [2011/01/07(金) 14:21:39 ID:???]
- あたしばかよね・・・
ありがとうございました uも付けて完動です
- 686 名前:675 [2011/01/08(土) 22:00:49 ID:GTa36OYO]
- 返事遅くなりまして申し訳ありません。
/uを追加したら見事に機能しました。 というか、今までさんざん正規表現を日本語に適用していたのですが、/uのことを全く知りませんでした。 お恥ずかしい限りです。 お教えいただき、ありがとうございました。
- 687 名前:675 [2011/01/17(月) 22:15:13 ID:Br3WLX+O]
- 更に質問です。
「...にあっては国土交通大臣が定めた安全上必要な技術的のうちその指定するに係る部分に限る。)、第119条、第5章の4(第129条の2の5第1項の2第6号...」 という文章から、第○○条の○○の○○などを抜き取り、かつその前後の文章も取得したいと考えています。 そこで 「/^(.+)*([第])([1-9]+[0-9]*)*([条]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/u」 というパターンでpreg_matchで拾いだそうと思うのですが、全く思うように拾いだせません。 何が問題なのでしょうか?? プログラムとしては、 <?php $text = 'にあっては国土交通大臣が定めた安全上必要な技術的のうちその指定するに係る部分に限る。)、第119条、第5章の4(第129条の2の5第1項の2第6号の文章'; print 'text : ' . $text . '<br>'; $match = '/^(.+)*([第])([1-9]+[0-9]*)*([条]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/u'; print 'match : ' . $match . '<br>'; preg_match($match,$text,$arr); print 'arr : '; print_r($arr); print '<br>'; ?> こんな感じです。 もし分かる方がいらっしゃったら、お教え願います。
- 688 名前:nobodyさん mailto:sage [2011/01/17(月) 22:47:22 ID:???]
- 問題を切り分けてから質問してくれ
- 689 名前:マッチした文字列を小文字にしたい [2011/01/17(月) 22:59:46 ID:e71m2/yA]
- PHPにおける正規表現に関する質問です。
下のサンプルプログラムでは$3が両方とも大文字の「US」になりますが、 最初の$3だけを小文字の「us」にする方法があれば教えてください。 OSはWindows、PHPは5.3です。 元の文字列の例 Country: US 変換後に得たい文字列の例 Country: <a href="ja.wikipedia.org/wiki/.us">US</a> サンプルプログラム <?php $result = ''; $text = 'Country: US'; $pattern = '/(Country):(\s+)([A-Z]{2})/i'; $replace = "$1:$2<a href=\"ja.wikipedia.org/wiki/.$3\">$3</a>"; $result = preg_replace($pattern, $replace, $text); echo $result; ?>
- 690 名前:nobodyさん mailto:sage [2011/01/17(月) 23:51:56 ID:???]
- 手元のエディタでは\Lでできるんだけどな
PHPで使える置換パターンが良く分からない e修飾子つけちゃうとか
- 691 名前:689 mailto:sage [2011/01/18(火) 01:02:24 ID:???]
- そうですね。Perlだと\lで次の文字が小文字になるとかあるみたいですが、
PHPにはないんですかね? ほかの方法でもかまいませんので、 引き続き、回答をお待ちしております。
- 692 名前:nobodyさん mailto:sage [2011/01/18(火) 01:17:36 ID:???]
- >>689
$pattern = '/(Country):(\s+)([A-Z]{2})/ie'; $replace = '"$1:$2<a href=\"ja.wikipedia.org/wiki/." .strtolower($3). "\">$3</a>"'; 書いてみたら引用符がすっきりしない感じになってしまった。
- 693 名前:nobodyさん [2011/01/18(火) 19:32:41 ID:sm74ERjN]
- あの正規表現ですが、今までうまくつかえていないというか下手
です。で、勉強しようと思うのですが、 反復学習ソフト付き 正規表現書き方ドリル これいいですかね? オライリーとどっちがいいかなって思うんですけど。
- 694 名前:nobodyさん mailto:sage [2011/01/18(火) 22:59:06 ID:???]
- >>693
Webでおk
- 695 名前:nobodyさん mailto:sage [2011/01/19(水) 10:36:15 ID:???]
- >>693
良いと思うよ。 オライリーも良い本だけど、ひととおり基礎ができてからで良いと思う。
- 696 名前:689 mailto:sage [2011/01/19(水) 21:20:53 ID:???]
- >>692
できました。 ただ、「DO」というドミニカの国別コードの時、予約語と重なってエラーになったので、 ダブルクォートにしました。 $pattern = '/(Country):(\s+)([A-Z]{2})/ie'; $replace = '"$1:$2<a href=\"ja.wikipedia.org/wiki/." .strtolower("$3"). "\">$3</a>"'; どうもありがとうございました。
- 697 名前:nobodyさん mailto:sage [2011/01/19(水) 21:48:50 ID:???]
- >>690でe修飾子と言っているのに
- 698 名前:nobodyさん [2011/01/19(水) 23:40:21 ID:zqG6AlFK]
- 抽象的な質問で申し訳ないんですが、本の話が出たのでついでに伺いたいんですが。
今まで表計算ソフトやデータベースソフトなど普通に習得し、 更に興味が出てきたのでMySQLとPHPを使ってプログラミングしたり、 apacheやPostFixなども何とか使えるようになり、何となく分かってきた感じがしてるのですが、 正規表現に関しては、未だに「どうにか使っているけど、理解は出来ていない感じ」がします。 とりあえずやってみて、だめで違う手を試してみたりして.... まるで別種類な考え方が必要な気がします。 なので質問なのですが、正規表現を理解するのに一番良い本とか、 正規表現について「目から鱗が落ちた!!一皮むけた!!理解が深まった」 って思えるような本とかあったら、紹介いただけないでしょうか?? それとも忍耐強く、失敗しては考える繰り返しでなければ、習得できない物なのでしょうか?? 当方今年で三十路なので、頭が固くなってきてるのかもしれませんが、いまいち頭にしみ込みにくくなってるような気がしてます。 もしよろしければお教え願います。
- 699 名前:nobodyさん mailto:sage [2011/01/20(木) 00:05:42 ID:???]
- >>698
何となく分かった気になっている時は何も分かってないからもっと簡単なのからやれ
- 700 名前:693 [2011/01/20(木) 01:01:52 ID:973KUxXQ]
- >>695
ありがとうございます。 基礎から勉強したいので、買います。
- 701 名前:nobodyさん mailto:sage [2011/01/20(木) 13:16:18 ID:???]
- 正規表現のスレ (プログラム板や UNIX 板にもある) のログを見て、
質問のお題を片っ端から解いていくと、結構良い練習になると思う。
- 702 名前:nobodyさん [2011/01/20(木) 23:13:37 ID:LxK6uyro]
- 次の正規表現でhogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換しております。
RewriteRule ^/hoge(.*)/(.*).html$ example.com/hoge/$1/i/$2.html [L] 下記のような場合は問題ないのですが example.com/hoge → example.com/hoge/i/ example.com/hoge/saitama/2011/01/index.html → example.com/hoge/saitama/2011/01/i/index.html ↓のようにhogeで始まるディレクトリまでも変換されてしまいます。 example.com/hogehoge/kankeinai.html hogeフォルダ配下のみ変換されるようにするには、どうしたらいいでしょうか? 環境は CentOS5 Apache2
- 703 名前:nobodyさん mailto:sage [2011/01/21(金) 00:15:43 ID:???]
- /hoge/(.*)〜にすればいいじゃん
- 704 名前:nobodyさん mailto:sage [2011/01/21(金) 18:26:53 ID:???]
- >>698
頭の良い人だとまた違うのかもしれないけど、 我々のような凡人は繰り返しやって経験値を積むしかないかなあ、って気がする。 で、何か読んで一つ山を越えたいなら、現状ではオライリー本の一択しか無いと思う。
- 705 名前:nobodyさん mailto:sage [2011/02/10(木) 13:57:44 ID:???]
- 対象の文字列にハングル文字が含まれるかどうかを判断したいのですが
よい方法が思い浮かびません。 javascriptです。
- 706 名前:nobodyさん [2011/02/27(日) 08:37:54.94 ID:GexZY7hJ]
- 1. preg_match('/[\(]{2}?(.*?)\:(.*?)[\)]{2}?/', $text, $match)
この変換を変数展開で実行したいのですが、 正規表現で使える記号の変数展開のやりかたを教えてください。 2.$exprString = '/[\(]{2}?(.*?)\:(.*?)[\)]{2}?/'; preg_match("/$exprString/", $text, $match); これだとうまく行きません。
- 707 名前:nobodyさん mailto:sage [2011/02/27(日) 09:01:28.34 ID:???]
- "/$exprString/"を展開したら"//[\(]{2}?(.*?)\:(.*?)[\)]{2}?//"になるぜ?
- 708 名前:706 mailto:sage [2011/02/27(日) 09:23:38.46 ID:???]
- >>707
解決しました。全く気がつかずに悩んでました。ありがとうございます。
- 709 名前:nobodyさん [2011/02/27(日) 16:36:06.93 ID:KOnmSusx]
- 反復学習ソフト付き 正規表現書き方ドリル
やりました。 非常に勉強になりました。楽しかったし、なんかパズルをといている みたいで、ただ残念ながらソフトはうごきませんでした。
- 710 名前:nobodyさん [2011/03/03(木) 19:14:51.88 ID:v/2VFVai]
- 以下はqdmail_receiver.phpというメール受信のプログラムの一部で、
添付ファイルのファイル名を取得している部分になります。 しかし、ファイル名に半角スペースがあると、半角スペースで文字列が切れてしまう という現象があります。 半角スペースで途切れないようにするのはどのようにすればよいのでしょうか? preg_match('/name\s*=\s*"?([^"\s\r\n]+)"?\r?\n?/is',$header['content-type'] , $matches ) よろしくお願いします。
- 711 名前:nobodyさん mailto:sage [2011/03/03(木) 20:18:10.39 ID:???]
- [^"\s\r\n]+
"でもスペースでも改行でもない文字が続く限り〜 って自分で書いてるやん
- 712 名前:nobodyさん mailto:sage [2011/03/04(金) 10:24:26.15 ID:???]
- ここで聞いてるくらいだから [^"\r\n]+ こう書き換えれって教えないと
- 713 名前:710 [2011/03/04(金) 13:32:58.16 ID:8WvXj1g+]
- >>712
ありがとうございます。 うまくいきました。 <(_ _)>
- 714 名前:712 mailto:sage [2011/03/04(金) 16:50:29.72 ID:???]
- うまくいったならいいけど、ファイル名抜き出し部分の後続がすべて?だから
もし"で囲まれてないのが来たらアウトだけどな /name=(?:"([^"\r\n]+)"|([^\s\r\n]+))/i でマッチさせて if (empty($matches[1])) $matches[1] = $matches[2]; みたいにしたほうが手堅いかもな
- 715 名前:nobodyさん mailto:sage [2011/03/06(日) 18:00:58.46 ID:???]
- 【言語】PHP5.3
【OS】XP 自前のBBSをもっていますが、最近、レス番号にリンクをつけたく思い、「>>1」のようなレスをpreg_matchでリンクタグ生成しようと試みました。 preg_match('/>>[0-9]+/',$text,$link); preg_replace('/>>[0-9]+/','<a href="#">'.$link[$n].'</a>',$text); この関数では最初にマッチするレスしか変換できませんでした。 何かよい案がありましたらお願いします。
- 716 名前:nobodyさん mailto:sage [2011/03/08(火) 00:32:23.62 ID:???]
- preg_match_all 使えば?
- 717 名前:nobodyさん [2011/06/04(土) 18:19:07.23 ID:GeFi3irL]
- <html>......<div class="list">画像リスト<br>1枚目<br><img src="example.com/aaa.jpg"><br>
2枚目<br><img src="example.com/bbb.jpg"><br> 3枚目<br><img src="example.com/ccc.jpg"><br>もっと見る<br></div>........</html> これで<div class="list">と</div>の間のアドレスだけ抜き出すのってどうやりますか? ........の中にも画像アドレスがあります。そっちはマッチさせないようにしたい。 preg_match_all("/list\".+?src=\"(.+)\".+</div>/", $html, $m);
- 718 名前:nobodyさん mailto:sage [2011/06/04(土) 19:29:38.67 ID:???]
- 2段階に分けるべし
- 719 名前:nobodyさん mailto:sage [2011/06/04(土) 19:32:39.30 ID:???]
- >>717
なんでそれを正規表現でやろうとするのかがわからん。視野狭窄か。
- 720 名前:nobodyさん mailto:sage [2011/06/04(土) 22:11:24.15 ID:???]
- >>717
php.net/manual/ja/function.preg-replace-callback.php
- 721 名前: 忍法帖【Lv=4,xxxP】 mailto:sage [2011/06/04(土) 22:38:07.91 ID:???]
- 質問者が言語を指定していない時点でお察し下さいレベル。
- 722 名前:nobodyさん mailto:sage [2011/06/04(土) 23:04:45.68 ID:???]
- preg_match_all は PHP の関数
- 723 名前:nobodyさん [2011/06/05(日) 14:02:49.98 ID:uEzVCQDA]
- >>717
正規表現一発でできそうな気がするんですが、無理ですか? 固定単語--- この中を検索 ---固定単語 こんな場面てよくあるような
- 724 名前:nobodyさん mailto:sage [2011/06/06(月) 08:01:30.97 ID:???]
- >>709
win7HP?
- 725 名前:nobodyさん [2011/06/16(木) 23:36:27.10 ID:SYj2PUn3]
- phpでpreg使っています。
あるファイル内の <td width="71%" valign="top" align="center"><div align = "center"> を <td width="71%" valign="top" align="center"> だけに変換したいとおもい $regTxt = "/<td ([a-z0-9\"=\s\%]+)><div ([a-z0-9\"=\s\%]+)>/is"; preg_match($regTxt,$x,$exchangeArr); で$exchangeArr[1]を削除するため、preg_replaceを使おうと思っています。 ただ、最初のpreg_matchでマッチしません。 どうしたら出来るのでしょうか?? どなたかお教えください。お願いします。
- 726 名前:nobodyさん mailto:sage [2011/06/16(木) 23:41:03.98 ID:???]
- preg_matchで$exchangeArr[1]を削除するためpreg_replace?
日本語でおk
- 727 名前:nobodyさん [2011/06/16(木) 23:44:03.44 ID:SYj2PUn3]
- <div align = "center"> を削除するため
でお願いします。
- 728 名前:nobodyさん mailto:sage [2011/06/16(木) 23:45:43.17 ID:???]
- preg_matchとpreg_replaceを併用する必要があんの?
- 729 名前:nobodyさん [2011/06/16(木) 23:52:34.42 ID:SYj2PUn3]
- <td....>が様々な形をとっているため、まずはそれらを取り出す必要があるかと思い、そうしてます。
<td....><div...>という形で、<td...>も<div...>のそれぞれの...が、様々な形をとっているけど、<td...>だけをきれいに残したいのです。 ただ、<div...>だけのもの(前に<td...>がついていない)は変換したくないのです。 こんな説明でわかります?
- 730 名前:nobodyさん mailto:sage [2011/06/16(木) 23:56:08.62 ID:???]
- 正規表現を細分化して問題の切り分けしてみるといいと思うよ
- 731 名前:nobodyさん mailto:sage [2011/06/18(土) 14:34:02.52 ID:???]
- >>725,729
その様々な形を正規表現で指定すればいいと思うけどね。 $string = '<td width="71%" valign="top" align="center"><div align = "center">'; $string = preg_replace('/(<td [^>]+><div) [^>]+/', '$1', $string);
- 732 名前:nobodyさん mailto:sage [2011/06/18(土) 14:41:26.83 ID:???]
- 閉じタグのことは無視かい
- 733 名前:731 mailto:sage [2011/06/18(土) 17:07:20.38 ID:???]
- >>732
それは俺も思った。 divがネストしていたら対応関係がおかしくなるはずなんで開始タグは残すべきだと思うな。
- 734 名前:nobodyさん [2011/06/30(木) 00:52:32.34 ID:hWRw8zI0]
- PHP5.3のpreg_replaceで
/<td[^>]+><div[^>]+/とかで正規表現をやっても、全く変更されません。 preg_matchでやってみると<td[^>]+>までならmatchするけど、「<」以降を入れると、全く引っかかってきません。 何か思い当たること、ないでしょうか?
- 735 名前:nobodyさん mailto:sage [2011/06/30(木) 06:05:38.15 ID:???]
- 対象としている文字列にその正規表現にマッチする部分が存在しない
- 736 名前:nobodyさん mailto:sage [2011/06/30(木) 07:23:46.62 ID:???]
- 何か勘違いしているとか見落としているとしか思えない
- 737 名前:nobodyさん mailto:sage [2011/06/30(木) 21:31:52.67 ID:???]
- 量指定子を'+'から'*'にしてみたらマッチしました、みたいな話な気がしてならない。
- 738 名前:734 [2011/07/03(日) 22:32:36.09 ID:8QAPbG3u]
- どうやら正規表現は問題なかったみたいです。
phpでファイルをfopenで読み込んで、 while ($x = fgets($fp,1092)) {...}で変換をさせているんだけど、 <td..>部分と<div..>部分の間に改行が入っているから、変換できないらしい。 どうしたらいいでしょう??
- 739 名前:nobodyさん mailto:sage [2011/07/03(日) 22:39:11.31 ID:???]
- 工夫すれば?
- 740 名前:nobodyさん [2011/07/03(日) 23:37:07.72 ID:ypX399q3]
- $string = preg_replace('/<div align = \"center\"> /', '', $string);
$string = preg_replace('/<\/div>/', '', $string); か、 $string = preg_replace('/<div(.*?)> /', '', $string); $string = preg_replace('/<\/div>/', '', $string); じゃねえの
- 741 名前:734 [2011/07/03(日) 23:45:10.46 ID:8QAPbG3u]
- 全てのdivを削除したい訳でなく、<td....></td>間にある<div></div>を削除したいのです。
<td....></td>間にあるものは削除して、それ以外は改行したいのです。
- 742 名前:nobodyさん mailto:sage [2011/07/05(火) 00:46:35.42 ID:???]
- preg_replaceを連打して取りたいのだけ取ればええやん
- 743 名前:nobodyさん mailto:sage [2011/07/16(土) 18:02:18.22 ID:???]
- http://から最初の空白までを抽出する正規表現はどうなりますか?
- 744 名前:nobodyさん mailto:sage [2011/07/16(土) 22:16:17.55 ID:???]
- /http:\/\/[^ ]* /
- 745 名前:nobodyさん [2011/07/23(土) 20:12:09.44 ID:lXdqpzgT]
- Aの繰り返しはA+とかA{m,n}でマッチできますが、
繰り返された個数を元にAAAAAをA*5などに置換する「うまい」方法はあるでしょうか。 言語はとりあえずJavaScriptで考えています。 replace(/A+/g, 'A*'); //←ここから進まない。
- 746 名前:nobodyさん mailto:sage [2011/07/23(土) 20:22:41.87 ID:???]
- >>745
正規表現にはないのでJavaScriptスレへ
- 747 名前:nobodyさん [2011/07/23(土) 20:34:12.11 ID:lXdqpzgT]
- >>746
ありがとうございます。以下で質問し直しました。 hibari.2ch.net/test/read.cgi/hp/1311096825/90n
- 748 名前:nobodyさん [2011/07/24(日) 19:06:14.31 ID:/DoWXp9n]
- 「次の人」または「前の人」という文字列を文章内から拾う場合、どの様な書き方が良いのでしょうか??
[次の人 | 前の人] だと「の」一文字だけでも拾ってしまいます…
- 749 名前:nobodyさん mailto:sage [2011/07/24(日) 21:04:07.81 ID:???]
- "[abc]"は「『a』か『b』か『c』にマッチ」だぞ…。
君の書いた正規表現は「『次』か『前』か『の』か『人』か『|』か『 』にマッチ」だ。 多分"(次の人|前の人)"みたいなことがしたかったんだろうけど、 "[次前]の人"でいいと思う。
- 750 名前:nobodyさん mailto:sage [2011/07/24(日) 21:07:51.65 ID:???]
- あと、似たようなのでありがちなのが
"[^hogehoge]"で文字列の否定を指定したつもりになっちゃう人。 もちろん間違い。念の為。
- 751 名前:nobodyさん [2011/07/24(日) 22:38:19.38 ID:X7IDpmYo]
- >>750
では何が正しいのでしょうか?
- 752 名前:nobodyさん mailto:sage [2011/07/24(日) 22:54:58.14 ID:???]
- >>751
[次前]の人
|

|