正規表現道場@2ch Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/24 22:57ID:LrbVcl3Yこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
リンクなどは>>2-5のあたりに。
0002nobodyさん
02/11/24 22:58ID:???http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
http://www.sixnine.net/regexp/
ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
http://www2.famille.ne.jp/~akio1998/l_grep.html
0003nobodyさん
02/11/24 23:00ID:???正規表現道場@2ch
http://pc.2ch.net/test/read.cgi/php/996105815/
0004nobodyさん
02/11/25 00:15ID:oyWFxt5Hコード書く度に思い出すはめんどい。ていうか忘れてる。
0005あぼーん
NGNG0006Name_Not_Found
02/11/29 22:13ID:/ULd/3Z00007nobodyさん
02/12/05 05:07ID:5X+JpwfGどうやるんでしょうか?
例えばテキスト中の「パーマン」は全部「プーヤン」に置換したいんだけど、
「パーマン3号」だけはスルーする、という風にするには。
一度全部「プーヤン」に変換してから「プーヤン3号」から「3号」を取る、
という方法しかないんでしょうか?お願いします。
0009nobodyさん
02/12/05 06:15ID:5X+JpwfGやりたいことは掲示板にurlを書くと自動リンクになるようにしたいんですけど、
後で修正しようとすると先ほど自動で貼ったアンカータグの中のurlも、
そのアンカータグで囲まれたurlにも再度アンカータグを貼ってしまいます。
(?!3号)みたいにして括弧で囲んで?!を付ければ無視されるのかなと思い、
$comment =~ s/(?!<a href=\")(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)(?!<\/a>)/<a href=\"$1\:$2\" target=\"_blank\">$1\:$2<\/a>/ig;
としてみたのですが無理でした。
説明不足ですいません。
0010Name_Not_Found
02/12/05 06:32ID:???0011nobodyさん
02/12/05 07:02ID:5X+JpwfGそれを修正します。
0012nobodyさん
02/12/05 07:44ID:???すいません、質問の意味がわかりました。
cgiで表示させるだけなら、その時にだけ自動リンクを使えばいいですよね、
でも一日ずつhtmlファイルで保存してそれを読み込んでくるタイプなので、
元ファイルにすでにアンカーが貼られてるんですよ。
だからそれを修正しなければならない、とこういうわけです。
掲示板というよりニュースサイトのようなものを作ってます。
001312
02/12/05 07:47ID:???× アンカー
○ <a href=""></a>
0014Name_Not_Found
02/12/05 08:16ID:0NYAnUxi一日目:
これすごい http://www.aaa.com/article.pl?id=11
二日目:
<a href="http://www.aaa.com/article.pl?id=11">これすごい</a>
もっとすごいの発見 http://def.ghi.com/?bbs=a
三日目:
<a href="http://www.aaa.com/article.pl?id=11">これすごい</a>
<a href="http://def.ghi.com/?bbs=a">もっとすごいの発見</a>
....
以前の記事を修正しないなら、
追加分の生データだけパースして html に追加してく処理考えたほうがいいと思う。
で、アンカータグの中身、というよりタグの中身を処理対象外にする方法は
http://www.din.or.jp/~ohzaki/regex.htm を参照。
001512
02/12/05 10:00ID:5X+JpwfGありがとうございます、やりたかったのは確かにそんな感じです。
正確には、
一日目
これすごい http://www.aaa.com/article.pl?id=11
二日目:
これすごい <a href="http://www.aaa.com/article.pl?id=11">http://www.aaa.com/article.pl?id=11</a>
もっとすごいの発見 http://def.ghi.com/?bbs=a
といった感じです。
で、その大崎さんという方のサイトを見て修正したのですが、
確かにタグの中のurlはそのままになったんですが、タグに囲まれたurlの方が
修正するたびに二重に<a href></a>で囲まれていきます(;´Д`)。
<a href>と</a>の間にあるもの以外を全て置換しろ、という正規表現が書ければいいのですが
自分の力量ではとても、、、。
難しいです。
001612
02/12/05 10:05ID:???0017nobodyさん
02/12/05 10:20ID:???0018Name_Not_Found
02/12/05 10:45ID:0NYAnUxiそれはもう処理の内容を考え直した方がいいと思われ。
基本的に追加なんだろうし。
html をこんな風にして、
<!-- news here -->
これすごい <a href="...">...</a>
で、追加分を html に変換後、
出力ファイルの <!-- news here --> をサーチして追加分をそこに足す、
みたいなやりかたはどう?
過去記事も頻繁に修正する可能性があるなら元データを残すやり方にするべき。
もっとも、リクエスト毎に html に変換するんではなく、
スタティックな html をあらかじめ作っておくってやり方はそのままでいいと思う。
0019Name_Not_Found
02/12/05 10:48ID:???0020nobodyさん
02/12/05 17:44ID:???それじゃ<br>が入ってる場合は最初の行しか置換されないし、
その最初の行も最後の一文字が無視される罠。
002112
02/12/05 19:13ID:5X+JpwfG今17さんのでやってみたのですが、確かに20さんがおっしゃるような結果が出てしまいました。
あと、メールアドレスが置換されないみたいです。
>15
まさにそのやり方です、<!-- news here -->のようなコメントをサーチする。
ただ、僕は修正がすごく多いです、、、。
元データを残すやり方は、人様のスクリプトを改良してるので
一からやり直しになるし、またバージョンアップ版が出た時の互換性とか考えると
ツライですねぇ。
もちろん、著作権表示と改造表示は出してます。
002212
02/12/05 19:37ID:???0023nobodyさん
02/12/06 00:05ID:0LEQc9+/とりあえず10分ほどやってみたが出来なかった、
ウチの上司なら出来ると思うが昨日から出張‥‥
0024nobodyさん
02/12/06 00:14ID:???一旦アンカータグ消せばいいんジャネーノ?的外れ?
0025nobodyさん
02/12/06 00:40ID:???修正用のテキストエリアに読み込む時に、元ファイルが例えば
<a href="http://www.yahoo.co.jp/">http://www.yahoo.co.jp/</a>
こういうのばっかだったらそれでいいかも知れんが、実際は
<a href="http://www.yahoo.co.jp/">これヤフー</a>
みたいのも混ざってるってことでしょ。
0026nobodyさん
02/12/06 00:42ID:???0027Name_Not_Found
02/12/06 03:26ID:N6C9SdnH追加と修正は別フェイズにするの。
修正時は余計な変換処理無しで html を直接弄って、
追加の時は追加分だけ変換処理して <!-- news here --> につっこむの。
ただ、直接 html 弄れるフォームがあるってのは
心理的に好きじゃないなぁ。
なんだか正規表現と関係なくなってきたなぁ…
0028nobodyさん
02/12/06 05:06ID:???「変数$newsの中から、アンカータグの中のものと、アンカータグに囲まれた部分は
無視してそれ以外を置換する」
ということがサクっと簡単に出来るものだと思ってました。
長く引っ張ってしまって申し訳ないです、正規表現、一から出直して勉強してきます。
0029nobodyさん
02/12/06 12:37ID:???$msg =~s{<a href=".*?"><a href=".*?">(.*?)</a></a>}{<a href="$1">$1</a>}g;
0030Name_Not_Found
02/12/06 14:31ID:???そういう処理しなきゃいけない状況が不毛なんだってば。
0033Name_Not_Found
02/12/07 04:46ID:705rdiGCおばかなプログラムが増えていく状況を助長してはいけません。
「ライトついてますか?」でも読んでくれ。
0035Name_Not_Found
02/12/07 11:04ID:???0036nobodyさん
02/12/08 12:52ID:???<code></code>で囲んだ間は、オリジナルタグを無効になるように処理したいです。
でも、<code>〜</code>〜</code>こういう風に書かれたら
途中で終わってしまて困ってます。
どうしたら良いでしょうか?
003836
02/12/08 13:40ID:???簡単に言うと、
<code>〜</code>hogehoge</code>
これを
<blockquote>〜</code>hogehoge</blockquote>
こうやって置き換えをしたいのですが、
<blockquote>〜</blockquote>hogehoge</code>
になってしまいます。
s/<code>(.*?)<\/code>/i;
$t =$1;
$t =~ /</</i;
$t =~ />/>/i;
s/<code>(.*?)<\/code>/<blockquote>$t</blockquote>/i;
ソースはこんな感じです。どうしたらいいでしょう…
0039nobodyさん
02/12/08 14:16ID:???>こういう風に書かれたら
っていうことはユーザーの入力を処理するってこと?
それならまずタグの閉じ忘れチェックをすればいいんじゃないかな。
004037
02/12/08 15:01ID:???s#<code>(.*)</code>#'<blockquote>'.(($_=$1)=~s/(<|>)/$conv{$1}/g,$_).'</blockquote>'#e;
004137
02/12/08 15:03ID:???@conv{qw(< >)}= ('<', '>');
s#<code>(.*)</code>#'<blockquote>'.(($_=$1)=~s/(<|>)/$conv{$1}/g,$_).'</blockquote>'#e;
0042nobodyさん
02/12/08 15:05ID:???$t =~ s/<code>(.*)<\/code>/<blockquote>$1<\/blockquote>/i;
print $t ;
これでどうよ?
0043nobodyさん
02/12/08 15:09ID:???その辺は適当に読み直してくれといいつつ書いてみる。。
$t = '<code>〜</code>hogehoge</code>';
$t =~ /</</i;
$t =~ />/>/i;
$t =~ s/<code>(.*)<\/code>/<blockquote>$1<\/blockquote>/i;
print $t ;
間違ってたらごめんよ。
0044nobodyさん
02/12/08 15:13ID:???$t =~ /</</g;
$t =~ />/>/g;
$t =~ s/<code>(.*)<\/code>/<blockquote>$1<\/blockquote>/i;
痛いな、漏れ。
0045Name_Not_Found
02/12/08 17:44ID:cySwFV0Oとかの場合、どこからどこまでが blockquote?
どういうシチュエーションなのかよくわからんちん。
textarea に書き込まれた文字を処理するのか
テンプレートファイルでの処理用のタグを導入してるのか…
■ このスレッドは過去ログ倉庫に格納されています