正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
1 :
nobodyさん :
03/11/19 21:42 ID:Kst3Nn4S
motu
nikomi
nabe
uma-
shika-
chou-
流れを断ち切るために9get。 $MyJob =~ s/仕事/労働/;
俺は数字が読めない馬鹿でした。
$Pay =~ s/残業代//;
初心者質問で申し訳ないです。 条文(第一条〜第九百九十九条)をアラビア数字(第1条〜第999条)に置き換える式を教えてください。
>>11 $arabic{'第一条'} = 1;
から、
$arabic{'第九百九十九条'} = 999;
まで入れといて、
対象文字列 $joubunn に対して置換してみるとか?
$joubunn =~ /$regexp/$arabic{$regexp}/ foreach my $regexp (keys %arabic);
効率悪そうな悪寒。。。
>>13 そういうハッシュテーブル使っていいなら、これでそんなに効率悪くないかと。
%arabic = ('一' => 1, ..., '九百九十九' => 999,);
$joubunn =~ s/(?<=第)(.+?)(?=条)/(defined($arabic{$1}))?$arabic{$1}:$1/ge;
てゆかそもそもそのハッシュテーブルの初期化が効率悪そうな悪寒。。。
文字コード Shift_JIS my %ichi = ("一"=>1, "二"=>2, "三"=>3, "四"=>4, "五"=>5, "六"=>6, "七"=>7, "八"=>8, "九"=>9); my %juu = ("十\"=>1, "二十\"=>2, "三十\"=>3, "四十\"=>4, "五十\"=>5, "六十\"=>6, "七十\"=>7, "八十\"=>8, "九十\"=>9); my %hyaku = ("百"=>1, "二百"=>2, "三百"=>3, "四百"=>4, "五百"=>5, "六百"=>6, "七百"=>7, "八百"=>8, "九百"=>9); $joubunn =~ s/第(.*?百)?(.*?十\)?(.*?)?条/ "第".($hyaku{$1}||"").($hyaku{$1}?$juu{$2}||0:$juu{$2}||"").($ichi{$3}||0)."条"/eg; # なんかこれって位取りの処理の仕方が肝で、正規表現とはあんまり関係なさそうな予感。
16 :
nobodyさん :03/11/23 02:27 ID:marqbBst
検索したい字句が存在してもしなくても マッチさせるにはどうしたらいいのでしょうか? <img src="オムレツ.jpg" alt="おいしい料理1"><b>料理の解説1</b> <img src="カツ丼.jpg"><b>料理の解説2</b> っというタグがあってこれから 1行目では、 \1 → オムレツ.jpg \2 → おいしい料理 \3 → 料理の解説1 2行目では \1 → カツ丼.jpg \2 → \3 → 料理の解説2 というようにしたいのです。 src="(.*?)".*?alt="(.*?)".*?<b>(.*?)</b> ↑のような正規表現を考えたのですが これを2行目にも正しくマッチできるように 修正していただけませんか?
src="(.*?)".*?(?:alt="(.*?)".*?)?<b>(.*?)</b>
>>17 希望通りの結果が得られました。
どうもありがとうございます。
>>11 のは、文字列として処理するより、いったん数値にするのがいいと思う
漢数字<->数値<->アラビア数字 で相互変換できればどういったケースでも使える
ちまり正規表現は数字文字列の抜き出しに使うくらいがいいね
正規表現の質問! 「改行も含めて全部」はどう表現すればよいのでしょう? 「.*」で「改行以外の任意の文字0個以上=改行含まない全文字列」 ですが 「改行も含めた任意の文字0個以上=改行も含めた全文字列」はどう表現すればよいのでしょう? 一応言語はJavaですが、PERLも同じらしいのですが・・
>>20 Perlなら /s オプション
または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
JavaScriptは知ってるがJava言語は知らん。
>>20 >> または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
>> JavaScriptは知ってるがJava言語は知らん。
Javaでも全部できたみたい!!
今から意味調べます。ありがとうございます!
PHPで質問です。
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform ">
<xsl:output omit-xml-declaration="yes" method="xml" indent="no" />
<xsl:template match="/block">!
<html lang="ja" xmlns="
http://www.w3.org/1999/xhtml " dir="ltr" xml:lang="ja">!
!
<xsl:apply-templates select="block_head"/>!
!
<xsl:apply-templates select="block_body"/>!
!
</html>!
</xsl:template>
</xsl:stylesheet>
というテキストがあって、<xsl:template>で囲まれた範囲の改行
("!"があるところ)だけを<xsl:text>\n</xsl:text>に置き換えるにはどう書けば
いいのでしょう。文字コードはUTF-8です。よろしくお願いします。
PHPのXSLT関数ってXSLファイル内のの改行を全部無視しちゃうので明示的に
改行を置かないと出力されるHTMLファイルが一行になっちゃうんですね。
>>24 もっとスマートな方法があるかもしれないけど、漏れだったらこうするかな。
1. <xsl:template /> の中だけ取り出す
2. 取り出したものを \n を <xsl:text>\n</xsl:text> に置換する
3. 置換したものを <xsl:template /> の中に戻す
>>25 の方法での結果
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform "><xsl:text>
</xsl:text><xsl:text>
</xsl:text><xsl:output omit-xml-declaration="yes" method="xml" indent="no" /><xsl:text>
</xsl:text><xsl:text>
</xsl:text><xsl:template match="/block">!<xsl:text>
</xsl:text><html lang="ja" xmlns="
http://www.w3.org/1999/xhtml " dir="ltr" xml:lang="ja">!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text><xsl:apply-templates select="block_head"/>!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text><xsl:apply-templates select="block_body"/>!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text></html>!<xsl:text>
</xsl:text></xsl:template><xsl:text>
</xsl:text>
perlで質問です。 --------------------- あ\n \n \n \n あ\n --------------------- \nは改行です。 上のようなテキストファイルから2つ以上の連続した空白行を一つにまとめたいと思い、 $対象文字列 =~ m/^\s*\n$/; (空白文字0個以上だけで構成され改行で終わる) にマッチしたらフラグをセットし、フラグがオンに間はファイルに出力せず、 フラグがオンかつマッチング対象が空白文字だけで構成されていなければフラグをオフにする。 としようとしたのですが、 対象に空白文字と改行以外の文字が含まれるというのをどうやって表現していいか分かりません。 よろしくお願いします。
28 :
27 :03/12/05 19:01 ID:???
[^\s\n]で簡単にできました はいどうも
何をしたいのかよくわからん
今日電車で置換されました。
31 :
nobodyさん :03/12/07 03:53 ID:ye6hWK3e
>>30 同じカバン持ってる奴にお前のカバンを持ってかれたのか?
s/財布//g かもしれん
33 :
:03/12/07 06:33 ID:???
>26 それはなかろう。
>>1 スレタイのRegExpが意図した通りに動かない恥ずかしいスレはここですか?
>>34 いつの世も正規表現とはそういうものなのです。
perlで変数$siteurlに入っているURLのドメインを$hogeに代入したいんですが、
・サブドメインがあればそれも
・ドメインに~が続いていたらそのユーザーID(?)まで
↑の条件付でして、思うようにいってくれなくて困ってます。
$siteurl =~ /^https?:\/\/(.*?)\/((.).*)/;
$hoge = $1;
$hoge .= "/$2" if ($3 eq "~");
こんな感じのとこまで考えたんですけどこれだと
http://hoge.hoge/~hoge http://hoge.hoge/hoge は意図したとおりなんですが、
ドメインより後ろに何も入ってないときは駄目だし・・
他にも色々調べながら試したんですが
ドメインの後にスラッシュがないと駄目だとか、
とにかく何か色々だめだめなんです。
正規表現からっきし駄目な僕に教えていただけませんでしょうか?
>>36 これでどうかな?
$hoge = $1 if ($siteurl =~ /^https?:\/\/([^\/]+(?:\/~[^\/]+|)).*/);
39 :
nobodyさん :03/12/09 16:14 ID:W6bkuxuf
プログラミング・・・ではないのかもしれないのですが、教えて頂けませんか?
gooの辞書から関連語句だけを集めて用語辞典を作りたいので、
「説明文から検索」の機能で抽出した後、
左側に出てきた見出しだけをテキストエディタにコピペして、
単語以外は全て削除したいと思っています。
メモ帳とワードの他にVisual C++があるのですが、
これらで何とかできませんか?
例えば・・・
http://dictionary.goo.ne.jp/search.php?MT=%CE%EB%CC%DA&kind=jn&mode=0 すずき 【鈴木】
姓氏の一。...
すずき-あきら 【鈴木朖】
(1764-1837) ...
すずきいせき ―ゐせき 【鈴木遺跡】
東京都小平市にある旧石器...
すずき-うめたろう ―うめたらう 【鈴木梅太郎】
(1874-1943) ...
上記の場合でいうと、
(半角スペース)【鈴木】・・・から行末まで削除、とか
(全角スペース)―ゐせき(半角スペース)【鈴木遺跡】・・・から行末まで削除、というふうに
とにかく最初のひらがな単語だけを残したいのです。
▼などの記号も混ざっているので、段階を踏まなきゃならないのかなとも思いましたが
「正規表現メモ」とか見ても
どうすればいいのかさっぱりなんです(´д`;
よろしくお願いします。
40 :
:03/12/09 16:21 ID:???
‘次の結果→’にはさまれてる‘<b></b>’の中を取得。 オジーオズボーン単車で事故ったって。
41 :
36 :03/12/09 16:36 ID:???
すいません、本屋行っててレス遅れました
>>37 さんのをちょっとだけテストさせていただいたところ
どうやら期待通りに動いてくれているようです。
それぞれ何をしているのかを調べながら、テストを重ねさせていただきたいと思います
>>38 さんの方は返ってくる値が、
>>36 で質問した
「今回ぼくがやりたいこと」とは期待していたものとは違ったんですが、
最終的にやりたいことが、
「後々入力されたほかのデータが、登録されているサイトのサーバー上にあるか、
というか、
そのサイト上のデータかどうかを調べる」
ということがしたかったので、ユーザーIDの自分の中での定義など、
なにか考え直す必要があるような無いような、そんな感じがしました。
・・何が言いたいのが良くわかりませんし、やたら長文で読みにくいと思いますが、
兎に角何がいいたいかといいますと、
本当に有難うございました。
timeで時間を取得して3の倍数の分なら処理をしようとしたんですが、ググッて調べた 下の書き方だとエラーが出てしまいます。どこか間違ってるんでしょうか? if ($min =~ ^(\d+)(?(?{$1 % 3})(?!))$){
43 :
:03/12/09 16:41 ID:???
正規表現を使おうとしてるところ?
44 :
:03/12/09 16:45 ID:5gjkqVTX
46 :
nobodyさん :03/12/11 14:45 ID:jBSAkNSo
テキストファイル中で「$replace[XXXXX]」となっている部分を 「XXXXX.html」に置き換えるような処理はどうすればよいでしょうか? XXXXXが可変です。
大括弧の中を取得して、それに.htmlを付加すればOK。
49 :
46 :03/12/11 15:14 ID:jBSAkNSo
一応でけました。 初心者なんで、最適化も何もない&さっき質問したのと話がちょっと違うけどお願いします。 文字列に含まれる$img[XXXXX]の中身XXXXXを関数に渡して、その処理結果で置き換える、ということです。 $test = 'aaa <a href="test.pl"><img src="$img[test1]"></a><img src="$img[test2]">'; $test =~ s/(\$img\[)(\w+)(\])/func($2)/ge; print $test; sub func{ local($id)=@_; if($id eq "test1"){ return "test1が渡されたよ"; } return "test2が渡されたよ"; }
>>49 おおう、いいんじゃない。前後はカッコ要らんけど。
$test =~ s/\$img\[(\w+)\]/func($1)/ge;
>>42 if ($min =~ /^(\d+)(?(?{$1 % 3})(?!))$/){
=~の右辺は正規表現だから、m/正規表現/、その省略形、/正規表現/
むむ?=~はパターンマッチ…
53 :
nobodyさん :03/12/14 11:28 ID:9SKP9sfi
その内容を要約してここに書きなさい。
55 :
nobodyさん :03/12/14 12:19 ID:9SKP9sfi
56 :
nobodyさん :03/12/14 12:29 ID:9SKP9sfi
POSTも知らない厨房が紛れ込んだスレはここですか?
59 :
nobodyさん :03/12/14 12:57 ID:9SKP9sfi
スレ違いだというのに真っ赤な顔をして書き込んでいる厨房がいるスレはここですか?
61 :
nobodyさん :03/12/14 13:01 ID:9SKP9sfi
正規表現に関係ないのに教える訳にもいかんだろーが…
64 :
nobodyさん :03/12/14 13:10 ID:9SKP9sfi
65 :
初心者 :03/12/15 04:53 ID:llm//hKN
"@"という文字と"word"のどちらかにヒットする正規表現 が分からないのですが、[@]wordではないし、どうなるのでしょうか。
正規表現の質問なんだから間違ってはいないだろう。
67=65
69 :
68 :03/12/15 09:05 ID:???
xorなら話変わるか。 なんで正規表現でやる必要があるのかよく分からんが。
70 :
nobodyさん :03/12/15 10:25 ID:8LAW+/sT
>>65 一つの正規表現に拘る必要はないと思うが、、、?
条件分岐だとして例えば
if($key_word=〜/@/ || $key_word=〜/word/){〜以下実行文
では駄目なのかな?
Read Only Memory : 書き換え不可の記憶媒体。 Read Only Member : 書き込まない利用者。
>>65 (@|word) とか。
なんでみんなどの言語で実装するか書かないのだろう?
それはどちらにもヒットする正規表現では。
75 :
nobodyさん :03/12/15 23:09 ID:8LAW+/sT
>>75 70は間違ってはいないよ、不充分かも知れんが。
そもそも65の質問がどういうシチュエーションでどういう動作の目的でどういうマ
ッチングをさせたいのかを詳細に述べていないという不充分な訊き方なので、70のよ
うな「充分用を足すかどうかは保証の限りではない」当たり障りのない答えが返って
きても当然だと思うが。
70の記述で取り敢えず「@」「word」が含まれていれば、その含まれている最初
の箇所マッチする。 複数含まれていて、それを全てマッチさせるのか、n回目まで
マッチさせるのかなどでオプション等の補助的記述が必要になって来るし、「含まれ
ている」ではなく「その単語そのもの独立だけに厳密マッチ」させるのならが、また
違う話になってくる、それをイチイチ説明していたら解説書になってしまう、それは
自分で読んでくれってことになる。
なんだ?こいつ。
不十分とか言う以前に正しい記述をしろってーの
>>78 >>75 は、元の質問が十分じゃないので正しい記述は不可能、と言いたいのだろう。
だが、アホなので放置で。
80 :
nobodyさん :03/12/18 18:53 ID:zzUoxnBB
小数点を含まない数値にマッチさせるパターンを教えて下さい。 X25.125 X12.1 X78. でなく X25 X789 にマッチさせたいんです。 御多忙中の所、誠に恐縮では御座いますが、 御教示いただければ幸いです。
>>80 > X25.125
Xとか入ってるけど,これって数値か?
83 :
nobodyさん :03/12/18 19:11 ID:zzUoxnBB
スミマセン Xは無視してもらっていいです。
perlの正規表現なんですが、 $hoge = "a(b(c))"; の時に、$hoge =~ m/(.*)\((.*)\)/ とすると、$1は"a(b"で、$2は"c)"になりました。 つまり文末から見ていることになるのですが、これを $1は"a"で、$2は"b(c)"になるようにするにはどうすればいいでしょうか。 よろしくお願いします。
>>80 は普通に
[0-9]+
じゃない?
全体なら^$つけるとか。
同意
88 :
nobodyさん :03/12/18 21:08 ID:zzUoxnBB
[0-9]+ ですと 例えば 10. 10.01 10 のうち、全ての"10"を拾います。 上記3つの数値のうち小数点を含まない 10(3つ目)のみにマッチさせたいんです。
>>88 >全体なら^$つけるとか。
^[0-9]+$
91 :
nobodyさん :03/12/19 06:15 ID:z9mYPuUz
ところが全て行末ではないんです。
92 :
nobodyさん :03/12/19 08:15 ID:tSEWBAlW
$perl -pe 's/(?<![\.\d])(X\d+)(?![\.\d])/##$1##/g;'
>>80 小数点を含まない数値にマッチさせるパターンを教えて下さい。
X25.125
X12.1
X78.
でなく
##X25##
##X789##
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
93 :
39 :03/12/19 10:20 ID:???
今頃ですが・・・
自力で検索したサイトは難しい所ばかりだった気がしたのですが、
>>1 のリンク先を一通りち回って、今回は何とかなりました。
たぶん答えるのもアホらしい低レベルな質問だったんでしょうね。
スレ汚し失礼しました。
>92 いいかげんにしろやカス
>>92 おらよ。
/(?:^|[^\d\.])(\d+)(?:[^\d\.]|$)/
/(?:^|[\d\.])([1-9]\d*)(?:[^\d\.]|$)/
>>92 お前さんのレベルじゃ,
込み入った正規表現に手を出すのはまだ早いんじゃないか?
とりあえずわかりやすい代替手段でも使っておけ。
my $f = 'fs4.5s5d.af56.156asd';
my @res = ();
foreach ( split(/[^\d.]/, $f) ){ push( @res, $_ ) if(/^[\d]+$/); }
if(! scalar(@res) ){ print "no match!\n"; }
elsif( scalar(@res) > 1 ){ print "too much match!\n"; }
else{ print "matched:[$res[0]]\n"; }
98 :
nobodyさん :03/12/21 23:40 ID:qD9UdeKR
[サッカー][蹴球]96 ATLANTA OLYMPIC BS1総集編 日本1-0ブラジル 前園 カヌー オルテガ [110m08s DivX5].avi dgju9h3hNw 731,862,992 53de508adb8dc5d557c4d83efde22799 nyのキー情報(↑みたいなの)を正規表現で表すことできますかね? ダウソ板のスレを全部取り込んで、 キー情報だけ抜き出してリストを作りたいです。
「みたいの」ってのが無理。
100 :
a :03/12/22 01:56 ID:???
いいから放置しとけ
YahooXXXX.bbtec.net からも xxx.xxxx.ap.so-net.ne.jp からもプロバイダ名を抽出させる方法を教えてください。
(\S+\.)?\S+\.[a-zA-Z]{2}[a-zA-Z]{2} と (\S+\.)?\S+\.[a-zA-Z]{3} 俺にはこんなものしか思いつかねーよ
>>102 ASAHIネットは www.ne.jp というホスト名を持っているわけだが、
ここからASAHIネットだと特定できる文字列をどうやって抽出しようかねぇ?
/
(?:
([0-9A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # 3rd LD
\.
)?
([0-9A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # 2nd LD
\.
([A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # TLD
\.?$
/x
>>102 常にドメイン名からプロバイダが抽出できると信じている時点でダメ。
「ISP名」ではなくて、XXXXX.XXX.XXX.2ch.netの 2ch.netを取得したいと仮定して答えても問題ないかな?
適当に答えてみる。 [-0-9a-zA-Z]+.[-0-9a-zA-Z]+$ 多分[-0-9a-zA-Z]じゃ足りないけどよく分からないので。識者よろ
適当すぎて・・・・・・・・・・・・・
hogehoge.XXX のように.の後が3文字なら 後ろから二つ目の.まで hogehoge.ne.XXのように.の後が2文字なら 後ろから三つ目の.まで .XXXのXがすべて\dならIPアドレスということで全部 とでもしておけばいいんじゃない?適当すぎですが
>>112 汎用 JP ドメインなんてのもあるがな。
115 :
nobodyさん :03/12/26 13:51 ID:icJ7Wsig
#!/usr/bin/perl $_ = << "EOD" ; <test> <test2>abc</test2> </test> <test> <test2>def</test2> </test> EOD /(<test>.+<\/test>)/s ; print "$1\n" ; テキスト中にある<test>文字列</test>を抽出したいと思ってるんだけど、 結果はこうなってしまう。 <test> <test2>abc</test2> </test> <test> <test2>def</test2> </test> 結果はこうなって欲しい。 <test> <test2>abc</test2> </test> こんな事も試したけどうまくいかず・・・ /(<test>(?!<test).+<\/test>)/s ; 何方か、お助け。
〜〜[hoge]〜[foo]〜〜〜[bar]〜〜[moge]〜 のような感じのテキストで[hoge]以外の[と]で囲まれている部分を消して 〜〜[hoge]〜〜〜〜〜〜〜 のようにしたいのですが、hoge以外の場合マッチという方法が思いつきま せん。[^hoge]で無いことは確かなんですが・・。 文字列の否定の方法をどなたか教えてくださいませ。
119 :
117 :03/12/27 17:54 ID:???
122 :
nobodyさん :03/12/31 18:09 ID:9hwbEMBW
rubyで /#{str1}/.match(str2) としたときstr1のメタ文字を通常の文字としてマッチさせたいのですがどうしたらいいですか?
>>122 Regexp.escape(str1) か Regexp.quote(str1)
125 :
nobodyさん :04/01/07 22:03 ID:3+H2s8ZL
<dt>[名無し]さん(bin+cue).rar<>sage<>03/12/30 00:57 ID:St9M3KSl<dd>2 <br> <dt>クソスレみっけ<><>03/12/30 00:57 ID:o9NEl4Ao<dd>じしんないから3で <br> とあって、空タグの<>間にある文字列を <dt><a href="mailto:sage">[名無し]さん(bin+cue).rar</a> 03/12/30 00:57 ID:St9M3KSl<dd>2 <br> <dt><a href="mailto:">クソスレみっけ</a> 03/12/30 00:57 ID:o9NEl4Ao<dd>じしんないから3で <br> のように<a>に内包させたい場合どうしたらよいでしょうか テキストエディタは秀丸を使っています
>>125 置換ダイアログで
検索: <dt>\f[^<]*\f<>\f[^<]*\f<>
置換: \0<a href="mailto:\3">\1</a>
127 :
125 :04/01/08 00:00 ID:???
>>126 どもです、バッチリでした
もすこし勉強してきま
128 :
nobodyさん :04/01/08 11:30 ID:A5R/iNdF
PHPでHTMLを埋め込める掲示板スクリプトを作ってますが <…>となっている不等号はHTMLタグとみなして、そのままにしておき それ以外のHTMLタグとみなせない不等号を&lt;と&gt;に置き換えて HTMLタグ内にない”と&をそれぞれ&quot;と&amp;に変換するように 正規表現を書きたいのですが色々書き直して試してますが 思い通りに動作しなくて困ってます。 どのように正規表現を書けばよいか知恵を貸してください。お願いします。 <…>の形になってない不等号を&lt;と&gt;に置き換える作業は今は 以下のようになってます。 $message = @ereg_replace("<(([^>]|\n)*)<", "&lt;\\1&lt;", $message); $message = @ereg_replace("<(([^>]|\n)*)", "&lt;\\1", $message); $message = @ereg_replace("(([^<]|\n)*)>", "\\1&gt;", $message);
$ENV{'USER_AGENT'}で得られる文字列から、ブラウザ名とバージョンを抜き出す関数を作っています。 正規表現のせの字もわからんような状態から何とかあちこち検索かけてここまで作りました。 しかし、まだ正規表現のありがたみが足りない気がして、不満です。 よければもっと要約できる点、あるいは不備な点の指摘をお願いします。ちなみに、書き込みのためにここでは全角でインデントいます。コピペの際にご留意下さい。 #-----------------------# # UA一般名化 #-----------------------------------------------------# #-----------------------# # 引数は、($ENV{'USER_AGENT'}) sub envUa2uaName{ my ($UA) = $_[0]; if($UA =~ /MSIE/){ $UA =~ s/(.){0,}MSIE ([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/InternetExplorer $2/; } elsif($UA =~ /Opera/){ $UA =~ s/(.){0,}Opera(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Opera $3/; } elsif($UA =~ /Safari/){ $UA =~ s/(.){0,}Safari(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Safari $3/; } elsif($UA =~ /Netscape/){ $UA =~ s/(.){0,}Netscape(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Netscape $3/; } elsif($UA =~ /Firebird/){ $UA =~ s/(.){0,}Firebird/Firebird/; } elsif($UA =~ /^Mozilla/){ $UA =~ s/Mozilla\/([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Mozilla $1/; } $UA =~ s/([a-z A-Z 0-9]{0,})\/([0-9]{1,}(\.){0,}[0-9]{0,})/$1 $2/g; return $UA; }
>>130 =~ s/インデントいます/インデントしています/;
DoCoMoは?
>>132 ( ゚д゚)ハッ!
そう言えば忘れてました・・・
j-phoneとvodafoneとauも忘れないでね。
>>134 サンプルデータが無い・・・・
UAが分からないと正規表現の書きようがない・・・
そんなものいくらでもころがってるだろう
ちなみに俺はWin2000&IE6だが、UAはMozilla/5.0 (Macintosh; N; PPC; en-US; m18) Gecko/20000929 Netscape6/6.0b3となってる。
>>138 環境変数をイジってる人のまでは対応仕切れないのでそれはそのまま表示します・・・。
UA なんて偽装し放題なんだからそれからブラウザ名を判定しても何の有り難みもねーよ。 と聞こえてくるのは幻聴でしょうか。。。
俺にはドリキャスのうめき声が聞こえる。。。
そういえばpipin@はまだ生き残ってるのか?
$text = "正規表現で、or にあたるものはないでしょうか? "; mb_ereg("正規表現|ない|or|しょう",$text); //"|" は二つだけですよね? こんな感じで、複数の文字列にヒットする方法を知りませんか? eregでもpreg_matchでもどちらでも可能であれば教えて下さい。
H"は?
>>143 preg_match('(正規表現|ない|or|しょう)', $text);
>>143 そのコードのままでは意図通りに動いてないの?
148 :
nobodyさん :04/01/15 21:38 ID:Z1eTG8w5
210.153.84.0/24 とか 210.134.83.32/27 とかの表記での アクセス制限はPerlではできないかと思いますが、 これらを正規表現にてなんとか綺麗にかけないもの でしょうか。 もしも良い案がございましたらご教授ください。
>>148 サブネットマスクで表すアドレス範囲がわかれば簡単なことだろ
空行の上の1行にマッチするということは、正規表現でできますか? あいうえお\r\n かきくけこ\r\n \r\n さしすせそ\r\n たちつてと\r\n naninuneno\r\n \r\n 歯皮膚へ補\r\n \r\n かきくけこ\r\n、naninuneno\r\n、歯皮膚へ補\r\nにマッチして欲しいんですが・・・。
>>152 ([^\n]+\n)\r\n
\1とか$1で参照で出来ると思う。
こんなんは動きませんか。perl。 (?:\n?)[^\r\n]+\r\n(?=\r\n)
\b(.+?)\r\n\r\n 手抜きかも。。。
/(.+?¥x0D?¥x0A)¥x0D?¥x0A/gs
157 :
152 :04/01/17 00:12 ID:???
>>153-156 皆様、レスありがとうございます。
空行の上の行を取得できました。
勉強不足でした、精進します。
ありがとうございました。
PHPで、 「(文字列 ほげ か、文字列 ふが)が先頭にある文字列以外にマッチする」という正規表現はどのようにすれば記述できるでしょうか? /(([^ほ][^げ])|([^ふ][^が])).*/ かと思ったのですが、違うようです……
>>158 逆に、「〜にマッチしなかったら」という処理にした方が楽。
160 :
nobodyさん :04/01/19 14:48 ID:UUNY3/Bm
>>160 厳密なこと言うと /xxx/yyy がディレクトリかファイルかは、
実際にその URL にアクセスしてみないとわからないので、
どっかで妥協しないといけないと思う。
で、
>>160 のような前提でマッチするとするなら、こんな感じかな。
$hoge =~ /^https?:\/\/$domain\/([^\/]+)\/([^\/]+\/|[^\/\.]+$)/
>>161 有難うございます。確かに厳密にはそうですが、まぁここではそこまで突っ込まないことにします。
で、少し書いていただいたソースでテストしてみましたが、おそらく期待通りのようです。
後でまたテストしてみます。有難うございました。
163 :
158 :04/01/20 00:19 ID:???
>>159 プログラム自体が「設定ファイルに記述した正規表現(のリスト)にマッチしたら」っていう処理なんで、
>逆に、「〜にマッチしなかったら」という処理にした方が楽。
とは分かってるんですが、何とかならない物かと。
……あや、PHPでも '?!' は使えるのか。ってことは、
/^(?!ほげ).*/
で、「文字列 ほげ が先頭にある文字列以外にマッチ」になるのか?
としても、
/^((?!ほげ)|(?!ふが)).*/
じゃないよなぁ……。
boolを反転させればいいだけ。正規表現使う必要も無し。
アホって言うか、いわゆる初心者ってやつです。おまけに自分で調べない、人に聞くことしか出来ないときてますから手に負えません。
みたこと無い人はPHP質問スレをちらっと訪れてみることをお勧めします。 長期滞在は精神衛生上よろしくありませんので、あくまでピーピングってください。
169 :
158 :04/01/21 03:02 ID:???
>>164-166 申し訳ないです。数時間色々試して、「正規表現でそういうのは無理」
と思いつつもつい、知ってる人がいれば良いな程度に書き込んでしまいました。
(「無理」って思ったんなら諦めろよ、俺。)
処理の方いじってみる事にします。(とりあえず、当面質問スレには出向かない方向で。)
ありがとうございました。
(「無理」って思ったんなら諦めろよ、俺。) 気持ち悪いです。
気持ちいいです。
>>169 preg_match('/(?:(?!^(foo|bar)).)*/', $str, $arr); if ($arr[0]) do;
これが正規表現でやることか?
つーか
>>1 のサイトくらい見ろよハゲ
perlを使っています。 <a href="#epigraph">▲</a> <a href="#D_20040124">▼</a> を、 <a href="#D_20040124">▲</a> <a href="#epigraph">▼</a> と、属性値だけ入れ替えるにはどうしたらよいのでしょうか?(属性値は可変です) 正規表現は苦手で、いくら考えても判らなかったので……。
/(<a href="\#)([^"]+?)(">▲<\/a> <a href="\#)([^"]+?)(">▼<\/a>)/$1$4$3$2$5/gi こういうことなんかな? 意図がわからんからめちゃくちゃ適当なんだが。
>>174 できました! そっか、こういう風にすれば良かったのか……。
今度からは自分でできるように、正規表現についてしっかり勉強しようと思います。
ありがとうございました。
176 :
nobodyさん :04/02/03 02:35 ID:dCMf0k2c
ホッシュ
177 :
nobodyさん :04/02/09 22:07 ID:9171cO3S
IPアドレスの正規表現で a.b.c.d/8 とか a.b.c.d/32 ってどういう意味なんでしょうか? 誰か教えてください…
>>177 正規表現じゃなくてサブネットマスクだろ
ぐぐれ
めっちゃ簡素な質問で申し訳ないのだが、 PerlでHTMLタグを取り除く処理を行う場合、 s/<.*?>//g; と書いている場合と、 s/<[^>]*>//g; と書いている場合がありますよね? 大抵のところで「<.*?>は遅い」とかかれているのですが、 実際どれくらい処理効率が違うのでしょうか
すみません、すごく初歩的な質問なんですけど、 いくつか並んだ単語の中の、真ん中の単語だけを検索するには どういう正規表現を使ったら良いのでしょうか? <item name="アニメA.Aスレッド 13th session " category="AA" board="AAサロン" <item name="アニメA.Aスレッド 12th session " category="AA" board="AAサロン" <item name="アニメA.Aスレッド 11th session " category="AA" board="AAサロン" と並んでいるもののうち、【アニメA.Aスレッド xxth session】だけを検索したいのですが可能でしょうか? いろいろ検索しつつ試行錯誤をしていますが、どうしても分かりません。 どなたかいらっしゃいましたら、教えて頂けないでしょうか?
>>179 自分でベンチマークしてみる
>>180 21st 22nd 23rd ってことになるかな?
/アニメA.Aスレッド [0-9]{2}th session/
coffeeとかballoonみたいに、 3・4文字目が同じ、5・6文字目が同じような単語をマッチさせる正規表現を教えていただけませんか? ○×△△□□ みたいな形式。1・2文字目はなんでもOK。7文字目以降に何がきてもOK。 sedでおねがいします。
/..(.)\1(.)\2/
それtってPerlじゃないんですか・・・?
/..\(.\)\1\(.\)\2/
サンタはホモのひげ
/^(..(.)\2|...(.)\3)/ こうか?
coffee tattoo balloon saccees あたりがひっかかればいいのか?
191 :
189 :04/02/12 02:40 ID:???
すまん、質問文全体的に読み間違えてた。。。 /^..\(.\)\1\(.\)\2/ でいいんじゃない?
ありがとうございます。 Perlで\1とかが使えるのは知ってたのですが、sedでもつかえるとは思って無かったです。 ぶしつけがましいかもしれませんが、Perlで!~と表される「マッチ以外」を sedで実装するにはどうすればいいのでしょうか。 実は今回初めてsedというものに触れることになったもので・・・ Perlみたく正規表現が使える、というのは知ってたのですが仕様が違うらしくうまくいかなくて・・・
>>192 !
マニュアルは死んでも見ない主義か?
PHPで2chのスレッドURLの正規表現(ereg)は
http:// (.)+\.2ch\.net/test/read\.cgi/(.)+/[0-9]{10}/
これでいいですか?
もうちょっとスマートなのあればお願いします。
↑キター
>>195 bbspink.comとmachi.toが抜けてるよ。
(.)はわざと?
>>196 >>197 ごめんなさい。素人なものでよくわからないのです・・・
任意の文字は、「(..)+」じゃないんでしょうか・・・
「.+」でいいですか?
http:// (.+\.2ch\.net|.+\.bbspink\.com|.+\.machi\.to)/test/read\.cgi/.+/[0-9]{10}/
でいいでしょうか?
それと、Perlでは、10個の数字なら「\10d」でできたと思うのですが、PHPではできないみたいですね・・・
199 :
195 :04/02/13 22:04 ID:???
お騒がせしました。自分のダメダメでしたね。
http:// ([a-zA-Z0-9]+\.2ch\.net|[a-zA-Z0-9]+\.bbspink\.com|[a-zA-Z0-9]+\.machi\.to)/test/read\.cgi/[a-zA-Z0-9]+/[0-9]{10}/
これでOKですね。
正規表現でどう書くのかと言っても目的によって変わる場合があるからな
質問です。お師匠様よろしくお願いします。 次の文字列で、<!--from-->〜<!--to-->部分を除去する 正規表現が分からないです。 "あい<!--from-->か<>き<!--to-->うえ<!--from-->くけ<>こ<!--to-->お" →「あいうえお」を取り出したい 自作の失敗正規表現 /<\!--from-->.*<\!--to-->//g →「あいお」になってしまう。
>>202 よくばりを抑えることができました。
お師匠様ありがとうございました!
>>202 最短マッチ
できないやつってあるの?
C++のboost::regexも出来たよ
置換でimgタグのalt属性だけを全て検出するにはどうすればいいですか 今は $title =~ s/.*?( alt=\".*?\")*/$1/gs; $title =~ s/alt="//g; $title =~ s/"//g; とやっていますが、効率が悪いと言われました。
>>208 $title =~ s/.*? alt=\"(.*?)\"*/$1/gs;
ってことじゃないのか。
>>209 それだと
alt="Alt属性値">
↓
Alt属性値">
ですよね
そんでしかも alt属性値は複数ある可能性もあるんです(<img>タグの個数が分からないため)
効率が悪いといわれた意味は、
>>209 じゃないかってことだ。
で、求めたいことをやるコードなら、今、プログラム板の
Perl質問箱でも答えたとこだが、
@title = ($_ =~ /.*? alt=\"(.*?)\"*/$1/g);
でよろしかろう。
あー ヒントを得られたので改変して自己解決しました。 $title =~ s/.*?alt=\"([^"]*)[^(alt)]*/$1/gs; これでできました。 どうもありがとうございました。
え 何か問題があるんでしょうか・・・汗
あ alt="〜"以降にaかlかtが含まれるとそれ以降がおかしな事に・・・
このスレおもしろいな。
219 :
nobodyさん :04/02/15 02:58 ID:P41SZm3C
例えば、こんな感じの文字列があって、 90020E68E8D0320A9028D14FF40AE7307BD5A8... これに16文字ごとに00を挿入するにはどう書けばいいでしょうか? こんな感じに出力したいのですが 0090020E68E8D0320A009028D14FF40AE730007BD5A8... 自分でチュートリアルみながらやってみたら アホみたいに00で溢れてしまいました・・・
>>219 具体的にどうやったのかの正規表現も書いておいた方が
誰かが教えてくれる気になってくれる率高いよ
221 :
219 :04/02/15 04:05 ID:???
恥ずかしすぎるのですが自分の晒します $output =~ s/\(................\)/00\1/gs;
$output = "90020E68E8D0320A9028D14FF40AE7307BD5A8"; $output =~ s/([0-9A-Z]{16})/\1xx/gs; print $output; 00ができねー。
$output = "90020E68E8D0320A9028D14FF40AE7307BD5A8"; $output =~ s/([0-9A-Z]{16})/00\1/gs; print $output; 頭00つきで・・・。
#Perlだけどこれではいかんでしょうか $output =~ s/([0-9A-F]{16})/$1_/g; $output =~ s/_/00/g;
227 :
219 :04/02/15 05:27 ID:???
みなさんありがとうございます 無事できますた
で、結局出来たんですが、これもちょっとまだ違う(属性名に「a」があるものがalt以降に出てくるとエラー)なので・・・ $title =~ s/.*?alt=\"([^"]*)[^a]*?/$1$2/gs; $title =~ s/([^"]*).*/$1/gs; 「alt」っていう文字列が出てくるまで、ってどういう風に表現するんでしょうか・・・・ 紹介された他のスクリプトは全て期待通りの動きをしませんでした $title=<<END; <h1><img src="./hoge.png" width="10" height="10" alt="alt属性値"></h1> <div id="id"> テストaltテスト<br> </div> <h2><img src="./hoge2.png" width="10" height="10" alt="alt属性値2"><img src="./hoge3.png" width="10" height="10" alt="alt属性値3"></2> <div id="id"> テストaltテスト<br> </div> END これに正規表現をかけて、$titleの中身を alt属性値alt属性値2alt属性値3 に出来ればかなり近いものになると思うんですが・・・・
print join '', $title =~ /alt="(.*?)"/g;
@array = ($title =~ /<img[^>]+alt="([^>]*)"[^>]*>/g);
/(ー_ー)/
$_ = '_ _'; print 'ごめんなさい' if m(_ _)m;
233 :
:04/02/21 11:23 ID:ZPsBKiYf
VBScriptでの正規表現についてご指導をお願いします。
私は↓のサイトで、サッカーの試合後に出される選手の採点をVBScriptを使って集計しております。
http://www.geocities.co.jp/SiliconValley-SanJose/8260/shukeihouhou040220/shukeihouhou.html 例えば、 「中田:6.5」というカキコを読み込むのに
re.Pattern = "([a-zA-Zぁ-んァ-ヶー−一-鶴]+)[ ;:;:…]*(10\.0|10|9\.5|9\.0|9|8\.5|8\.0|8|7\.5|7\.0|7|6\.5|6\.0|6|5\.5|5\.0|5|4\.5|4\.0|4|3\.5|3\.0|3|2\.5|2\.0|2|1\.5|1\.0|1|0\.5|0\.0|0)"
とパターンを設定しているのですが、
2つの問題に直面しております。
一つの問題は選手名の読み込みです。
漢字コードの設定がうまくないために取り込めない選手がいます。
今のところ、「黒部」が「部」になってしまうということが起きています。
もう一つの問題は点数の読み込みです。
採点では0.0〜10.0まで0.5刻みで点数を評価します。
それ以外の数字は無視しようと思うのですが、
3.14だと3と認識してような現象がおきているようです。
以前はjperlで認識させてまして漢字コードに関しては
[a-zA-Zぁ-んァ-ヶー−亜-腕弌-熙]+
でやってて問題は起きなかったですが、VBSでは無理なようです。
適当に文字コード表を開いたら漢字が一で始まって鶴で終わってたので
これを適用したら、そこそこうまくいったのですが、「黒」はだめなようで・・・
第一水準漢字をUNICODE指定するんだったら、[一-龍]じゃない? 鶴のうしろに、 鷲 鷹 鷺 鹸 鹿 麓 麗 麟 麦 麹 麺 麻 麿 黄 黍 黒 黙 黛 鼎 鼓 鼠 鼻 齢 龍 これだけの文字が残ってるよ。 しかし、JScriptはUNICODEで範囲指定しなきゃならんのか…… あと、置換で面倒なことしてるとおもったら、trがないのか…… ドキュメントのRegExp.Execute()のところにSubMatchesコレクションの記述がまったくない……
235 :
nobodyさん :04/02/21 14:01 ID:X1kd7Gnd
すんません。 $short = 'hoge++'; という場合に $long = 'hogehoge++'; にマッチするかどうか判定するにはどうしたらいいですか。 if ($long =~ /$short/) {} だと ++ の部分でエラーが出ちゃうです。
236 :
:04/02/21 14:14 ID:ZPsBKiYf
>>234 ありがとうございます。「黒部」が読み込めました。
選手名はこれでいけたっぽいです。
>置換で面倒なことしてるとおもったら、trがないのか
どうなんでしょうね。おいらが探しきれなかっただけかも・・・
>RegExp.Execute()のところにSubMatchesコレクションの記述がまったくない
すいません、意味わかんないっす
>>233 VBSは良く分からないけど、
(10|[0-9](\.[05])?)([^\.0-9]|$)
得点はこんな感じでどうでしょ。
>>235 Perlなら
if ($long =~ /\Q$short/) {}
>>237 ありがとうございましたぁあああああああああ!!!!
239 :
:04/02/21 15:28 ID:ZPsBKiYf
>>237 ありがとうございます。
しかしそれだと10.0が読み込めないようです。
(10\.0|10|[0-9](\.[05])?)([^\.0-9]|$)
こうすればいいのかな?
>>239 いいんじゃない?
あと、
(10(\.0)?|[0-9](\.[05])?)([^\.0-9]|$)
こんなでも。
241 :
:04/02/21 16:31 ID:ZPsBKiYf
>>240 dクス!!ありがとうございます。
これで解決です。
242 :
nobodyさん :04/02/21 16:44 ID:TmSpuw1E
ひらがな、漢字、カタカナのみを 許可したい場合どうしますか? if($FORM{'name'} =~ /\w/g) { &error; } や if($FORM{'name'} !~ /\W/g) { &error; } if($FORM{'name'} =~ /[a-zA-Z0-9]/g) { &error; } では、カタカナを受け付けなくなってしまい、 if($FORM{'name'} !~ /\W/g) { &error; } if($FORM{'name'} =~ /[A-Z0-9]/g) { &error; } だと、アルファベット小文字が使えてしまいます。
>>243 すいません、書くの忘れました。
shift-jisとなっています。
>>245 euc-jpぢゃないと無理ですか・・・
ありがとうございます。
むりなもんか
無理だっつーの PerlはEUCじゃないとマルチバイトの処理できない
249 :
247 :04/02/21 21:54 ID:???
だ・か・ら、、、、 文字である以上、文字コードだろ? 文字コードは変動しないよな? できるじゃん!
>>249 jperlならな
お前のそのレスみてレベル低いと思った
>文字コードは変動しないよな?
↑特にこことか。
251 :
247 :04/02/21 22:20 ID:???
今、即席でつくってみたけど 例えばひらがなの場合こういうことだろ? SJIS:ぁ \x82\x9f SJIS:ん \x82\xf1 /^(?:\x82[\x9f-\xf1])+$/ なんでできないのか理由家! レベル低いかも知れんけどできるだろ?
>>242 if ($FORM{'name'} !~ /^(\x82[\x9f-\xf1]|\x83[\x40-\x96]|[\x88-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/){ &error; }
こんなんでいい?
全角アルファベット数字と記号類も省くけど。
>>250 正しく正規表現書けば、Shift_JISでも処理できるよ。
Perl 5.8.xならencoding.pmがお勧めだけどね。
中の人はUnicodeで処理してるらしいけど。
かぶった?
>>251 ・・・
なんかもう、ね。
s/あ/ん/;
と普通にマルチバイト入れてやる場合のこと言ってるんだろ・・・
だれも文字コードでやれなんて言ってない
>>253 perl 5.8.x以降限定だけど、
use encoding "shiftjis";
...
s/あ/ん/;
255 :
247 :04/02/21 22:33 ID:???
お前のそのレスみてレベル低いと思った >PerlはEUCじゃないとマルチバイトの処理できない ↑特にこことか。 jperl とか言い出す始末。。。
なんか、
>>247 って必死じゃね?
いや、いいんだけど、
>>248 と勝手に争ってくれ。
ここ、過疎スレだから、周り気にしないで争ってね、思う存分
>>252 ありがとうございます。
Shift-Jisで、試してみたところ、
正常動作しているようです。
全角アルファベット数字と記号類も
省きたいと思ってたので助かりました。
258 :
234 :04/02/21 23:44 ID:???
>>236 すまん、意味不明なこと書いちゃった。
MSのWindows ScriptドキュメントでRegExpオブジェクトのヘルプリファレンス読んだんだけど、
RegExp.Execute()のところに、実行するとSubMatchesコレクションが生成されるって記述が
ぜんぜんないんよ。
てなわけで、SubMatchesコレクションの存在を知らなかった……_| ̄|○
(ふだんはBASP21コンポーネントのMatch()やReplace()を使ってるし)
SubMatchesってキーワードでヘルプを調べれば載ってるんだけどね。
259 :
236 :04/02/22 10:53 ID:???
260 :
nobodyさん :04/02/22 23:25 ID:kjGz/T2C
「注目に値[あたい]する特徴[とくちょう]が出せる。」 こういう文章から[あたい][とくちょう]の部分を 一括で削除する正規表現を教えてくれないでしょうか。 Wzの検索、置き換えを使っています。
s/\[.*?\]//g とかしか思いつかない漏れはここに似つかわしくないですか
abc\,edf,ghi という文字列を $_[0] = abc\,edf $_[1] = ghi という具合に split したいのですが、どうすればよろしいでしょうか?
265 :
260 :04/02/23 14:09 ID:???
>>262 出来ました!すごいですね。
自分には難しくて。
ありがとうございました。
266 :
nobodyさん :04/02/23 20:41 ID:Ea0t25bl
文字列以外にマッチってできるべか? こんなふうに書いてみたけどだめやった。 [^(mojiretu)] それとも(?!)とか工夫すればできるの?
純粋に!で否定かければいいのでは、とか思いますがどうでしょう
268 :
266 :04/02/23 21:30 ID:Ea0t25bl
レスどうもです、具体的な例を紹介してくれると助かるんすけど、だめすか? お願いしまぁす。
Perlなら $hoge !~ /^mojiretu/g; で、文字列以外にヒットするはず
270 :
nobodyさん :04/02/24 21:18 ID:1VWZCh18
質問です。 アルファベットのみで構成される6文字以上10文字以下の文字列、をcygwinのgrepを用いて検索したいのですが…。 正規表現の紹介をしているところを読んで回り、 ^「A-Za-z]{6,10} で、アルファベット6文字以上10文字以下、を表すということが分かったのですが、 grep -i "^[a-z0-9./]{6,9}" としてみても何も反応が無く、 egrep -i "^[a-z0-9./]{6,9}" とすると、11文字や12文字の文字列も引っかかってきてしまいます。 どう書けばアルファベットのみで構成される、6文字以上10文字以下の文字列、を正確に検索出来るのでしょうか? 宜しくお願いします。
>>270 egrep -iw "^[a-z0-9./]{6,10}"
途方に暮れて質問させていただいた直後に我に返りました。
wというコマンドを使えば出来ました。
スレ汚し失礼しました…。
272 :
270 :04/02/24 23:35 ID:1VWZCh18
スミマセン…もう一度質問させてください…。
http://koho.ktplan.jp/tango/y.html ここを例にして説明します。
上のサイトを開いて、全部選択してテキストにコピペしてy.txtとして保存。
この中から、6文字以上、10文字以下の英単語だけを抜き取ろうとしています。
$ egrep -iw "^[a-z]{6,10}" y.txt
とすると、
English NaviHome0INDEX1 HELP2 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq
Rr Ss Tt Uu Vv Ww Xx Yy Zz基本的な英単語 Y
yesterday
yourself
Copyright c 2001-2004 English Navi All Rights Reserved
という結果になります。
English NaviHome0INDEX1 HELP2 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq
Rr Ss Tt Uu Vv Ww Xx Yy Zz基本的な英単語 Y
と
Copyright c 2001-2004 English Navi All Rights Reserved
の部分が、どうしても引っかかってきてしまいます。
上の書き方だと、間にスペースが入っているものとかを排除できないことは分かったのですが、どうすれば目的の文字数の単語だけが抜き出せるのか…頭がパンパンになって来ました。。。
上手く抜き出すことが出来る正規表現の書き方を教えてください。
よろしくお願いします。
grepて$つかえたっけ Perlだと /^[a-z]{6,10}$/i で、できるかもしれない。
274 :
270 :04/02/24 23:46 ID:???
>>273 即レスありがとうございます…。
$ egrep -iw "^[a-z]{6,10}+$" y.txt
$ egrep "/^[a-z]{6,10}$/i" y.txt
共にだめでした…。
悩んでみます。
egrep -iw "^[a-z]{6,10}$" y.txt じゃないのかと。
276 :
270 :04/02/25 00:11 ID:???
>>275 あ、スミマセン。。。
egrep -iw "^[a-z]{6,10}$" y.txt
です。
何も起きないのです…。
正規表現メモによると、egrepでは{n,m}をサポートしていないそうだ。 grepなら{n.m}をサポートしているみたいだが。
278 :
270 :04/02/25 00:22 ID:???
>>277 egrepだと、とりあえず
>>272 の状態まではたどり着くのですが、
$ grep -iw "^[a-z]{6,10}" y.txt
これだと何も起きないのです…。
そもそもgrepやegrepだと無理…なのかな…。
FreeBSDだけど、こんな感じだよ。 $ egrep -iw "^[a-z]{6,10}$" y.txt yesterday yourself $ egrep -V egrep (GNU grep) 2.4d
280 :
270 :04/02/25 01:07 ID:???
>>279 FreeBSD、ググッテ見ましたが、自分にはよく理解できませんでした。
自分は
http://sources.redhat.com/cygwin/ このcygwinというのを使用しています。
$ egrep -V
egrep (GNU grep) 2.5
と言うことでした。
つまり、これでは出来ない、ということですかね…。
ありがとうございました。
もうちょっとだけ色々考えてみます。
Copyright c 2001-2004 English Navi All Rights Reserved
↑こういうのが引っかかってくるようだと、英文ページから抜き取ることが出来ないですもんね…。
例としたサイトは辞書形式で、単語ごとに改行があったから何とかなったのか…。
>>280 man egrep して、冒頭を 100遍読んでみ。
282 :
281 :04/02/25 02:28 ID:???
あ、すまん、何か勘違いしてた。スルーしてくれ。
283 :
281 :04/02/25 02:33 ID:???
お詫びといってはナンだが、これでどう? 前の [[:space:]]* は余計かも知れないけど。 $ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt
284 :
270 :04/02/25 02:48 ID:???
>>283 遅くにスミマセン…調べ調べて、
$ grep "^[a-z0-9./]\{6,10\}" y.txt
これで出来ました…。
本当に出来てるのか、検証していきたいと思います。
$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt
これでも出来ました!まずは…この意味を解読することから勉強して行きたいと思います…。
昨日cygwin入れてみて、初めてgrep使って…頭がパンパンです。・゚・(ノД`)・゚・。
オヤスミナサイ!
285 :
270 :04/02/25 02:50 ID:???
>>284 訂正!
$ grep -iw "^[a-z0-9./]\{6,10\}" y.txt
でした!
|彡サッ
286 :
270 :04/02/25 03:34 ID:???
$ grep "^[a-z0-9./]\{6,10\}" y.txt $ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt どちらを使っても、y.txtの中の改行をすべて空白に変えてみて、一面単語の海にすると取り出せないですね…。 もう諦めてマジ寝ます。 また明日悩みます。
287 :
281 :04/02/25 04:30 ID:???
>>286 それこそ、man egrep して、冒頭を 100遍読んでみ。
ていうか、grep でそれやるなら、
逆に、空白をすべて改行に変えてみた方が取り出しやすいと思われ。
288 :
nobodyさん :04/02/25 14:02 ID:12gYevYJ
PERLで 予約語が行にあったら文字で挟んで置き換えるという処理なんですが $ReplaceStr = $left . $word . $right; $line =~ s/(\W)$word(\W)/$1$ReplaceStr$2/g; だと行頭と行末が正しく置換できないです。どうすればいいんでしょうか?
s/\b$word\b/$left$word$right/g;
290 :
nobodyさん :04/02/25 17:55 ID:12gYevYJ
>>289 ありがとうございます!
こんな便利なキャラクタがあったんですね!
それぞれ予約語の配列にforeachかけてやってたんですが
速度的にはこっちの方が速くなるんでしょうか?
chomp(@ReserveWords);
$MachWords = join("|",@ReserveWords);
foreach $line(@inputlines){
$line =~ s/\b$MachWords\b/$left$&$right/g;
}
291 :
266 :04/02/25 20:16 ID:v7alvSdo
古い話で申し訳ないっすけど。
>>269 レスどうもっす。
>Perlなら
>$hoge !~ /^mojiretu/g;
>で、文字列以外にヒットするはず
ん〜、申し訳ない、説明不足した。
正規表現で「mojiretu」が無い事にマッチしたいんですよ。
どうでしょう?
!~ はマッチしないものが選ばれるはず。
294 :
nobodyさん :04/02/26 12:30 ID:pqrzwzpG
if($FORM{'comment'} =~ /\@/) { &error; } とした場合、 @が含まれる文が、エラーになるのは あたりまえなのですが、 病院 という語句までも制限してしまいます。 shift-jisですけど、文字コードとかが関係しているのでしょうか?
296 :
294 :04/02/26 13:29 ID:???
調べたところ、 「ァ」や「院」は@と認識されてしまうみたいですね・・・ 一度、他の文字に変換してから、 元に戻そうと思います・・・
297 :
294 :04/02/26 13:37 ID:???
if($word =~ /$search/o){ print $1; } という処理をした時に、$search内に正規表現用文字($や^等)が入っていた時 例) $search = "[abc]"等 に、それを正規表現としてとらえてしまいます。 調べてみたところ、どうやらそれが正しい動作という事でしたが、 この$searchを単なる文字列として見て、例のような文字列の検索を行った時に 「aかbかc」ではなく、「"[abc]"という文字列」として検索するにはどうすれば良いんでしょうか。
300 :
nobodyさん :04/02/27 00:44 ID:28vfJb2l
どっか勘違いしてるのでしょうか? perlなのですが、 テキストボックスに入れた数値を$in{'count'}に格納して、 それが数字じゃなければエラー出しして終わりにしたいのですが、 数値だろうと、そうでなかろうと、いかのunlessの中を通りません。 unless ( ($in{'count'} =~ m/^[1-9][0-9]*$/) || ($in{'count'} == 0) ){ print "Content-type: text/html\n\n"; print "数字を入れてください。もどってください。"; exit; }
>>300 こういうことか?
if ("hoge" == 0) { print "ZERO\n" } else { print "NON-ZERO\n" };
302 :
300 :04/02/27 01:33 ID:???
>>301 えっと、ごめんなさい、正確に言うと、
「正の整数」を入れてもらいたいので、そうでない場合は、エラーではじきたいのですが。。。
「dhfshfhjksad」みたいな適当な文字を入れてもエラーをすり抜けてしまうし、
「345」みたいちゃんとした「正の整数」を入れても、エラーをすり抜けてくれる。。。
304 :
nobodyさん :04/02/27 03:08 ID:zgPOAYIB
>>292 感謝!
(?:(?!foo).)*
これかぁ〜、なるほど実験しみます。
305 :
300 :04/02/27 04:09 ID:???
>>303 なるほど、よくわかりました。ありがとうございます。
<P class="fuga">hoge</P> こういうタグをいったんサニタイズした文字列 <P class="fuga">hoge</P> に対して m/<(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class="\w{1,20}")>(.*)<\/$1>/ こういう感じにマッチさせたいのですが、$1が働かないのはなぜでしょう。 $1に「P」が入ってうまくいくと思うのはマチガイ?
あ、失敗^-^; 実体参照されちまった。こうです。 &lt;P class="fuga"&gt;hoge&lt;/P&gt; m/&lt;(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class=&quot;\w{1,20}&quot;)&gt;(.*)&lt;\/P&gt;/
309 :
nobodyさん :04/02/28 22:25 ID:K5IxNsG1
まことにスマン。こんどこそ。 <P class="fuga">hoge</P> m/<(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class="\w{1,20}")>(.*)<\/P>/
>>310 く、なるほど。perlの特殊変数と正規表現を混同していたわけか・・・
ありがとうございました。恥ずかしい失敗ですが、一歩前進。
なんども失敗してスマン。
312 :
nobodyさん :04/02/29 14:20 ID:tS63OhT8
PHPで入力された文字がEUCの半角カナのみかチェックしたいです。 整数のみのチェックは正規表現でできました。 ^[0-9]+$ 整数のみの正規表現 EUCの半角カナのみの正規表現は?
そこまでわかってるならヒント ^(ア|イ|ウ|エ|オ)+$
>>312 EUC の半角カタカナは、SS2 (8E) + JIS X 0201 カタカナ (A1-DF) だから、
こんな感じでいけそうな気がします。
いかがでしょうか。
^(\x8E[\xA1-\xDF])*$
マルチにレスすんなよ。 PHPスレで聞いてる
316 :
nobodyさん :04/03/01 00:32 ID:uvhpNWvz
[email protected] ?subject=????
の?以降の件名部分をPHPで削除したいんだけど、
$str= ereg_replace("/?.*/", "" , $str);
では無理だった・・。
これではお話になりませんか?
?は0文字か1文字を表すメタ文字の予感
318 :
316 :04/03/01 02:31 ID:???
317さんのご指摘の元、色々やって出来た予感。
要らないかもしれないけど、書いときます。
$mail = "
[email protected] ?subject=件名"
preg_match("/^[\w\-\.]+@[\w\-]+\.[\w\-\.]+/","$mail", $matches);
$mail = $matches[0];
正解かどうかわかりませぬが、これでやっていこうと思います。
>>318 >>317 が言いたかったのは /\?.*/ と思われ。
まあそれで解決してるならいいんだけどね。
リモートホストを 1.英数字のピリオド区切り 2.英数字のみ のいずれかの条件でマッチさせようと思い、 (リモホ) =~ m/^(\w+\.?)+\w+$/ などとやったのですが駄目なようで、これ以上思い浮かびません。 どうすれば良いのでしょう。
>>320 こうじゃね?
m/^(\w+\.)*\w+$/
もうちょっと仕様どおりちゃんとやるならこう?
m/^(?:[0-9a-z]+\.)*[0-9a-z]+$/i
ああそうか区切る時は前の方(やや不適切な言い方ですが)の 有無を調べれば良かったんですね。 ありがとうございました。
$charactorにひらがな(あーん)以外が含まれているかどうか判断したいのですが if ( $charactor =~/[^あ_ん]/) { print "あーんを以外含んでいます。\n"; } というふうにしてみたのですが 上手くいきません 自分では見当がつかないのでアドバイスをください
Perlメモによると ># 全角ひらがな [ぁ-ん] >$Zhiragana = '(?:\xA4[\xA1-\xF3])'; # EUC-JP >$Zhiragana_sjis = '(?:\x82[\x9F-\xF1])'; # SJIS なので、EUC-JPならこうかな。つかPerl分からん。 if (!$charactor =~/^(\xA4[\xA1-\xF3])*$/) { print "ひらがな以外を含んでいます。\n"; }
>>324 コピペするときに間違えました。
>>325 ありがとうございます!
if ( $charactor =~/[^\x82\x9F-\xF1]/) {
print "あーん以外を含んでいます。\n";
}
これで出来るようになりました。
327 :
325 :04/03/05 12:00 ID:???
>>326 ちょっと待て、それじゃ誤判定しない?
ひらがな以外にマッチではなく、「『文字列がひらがなのみ』にマッチしない」としないと。
if ($charactor !~ /^(?:\x82[\x9F-\xF1])*$/) {
print "ひらがな以外を含んでいます。\n";
}
>321 ハイフンも使えるから m/^([\w\-]+\.)*[\w\-]+$/ のような気が。 #ハイフンのエスケープ要るか要らないか忘れたけど
PHP4で@の読みの「アットマーク」「アトマク」「アツトマァク」「アット」「アツトマアク」らに マッチする正規表現をお教え下さい。 ア[ッツ]?ト{マ[ーアァ]?ク}? とか アッ?ツ?ト{マ[ーアァ]?ク}? 初心者なので全然だめです・・。
上のはメルアドはじきなのでしたけど、 @|@|(あ[っつ]?と).*|(ア[ッツ]?ト).*|(ア[ッツ]?ト).* でいくことにします。 アットローンでもマッチしちゃうけどいいや・・・・・。
[アットマーク|アトマク|アツトマァク|アット|アツトマアク]
ア[ッツ]?ト(マ[ーア]?ク)?
>332 どうも。 アットローンでもアトムでもマッチしちゃうよね? ^ア[ッツ]?トマ[ーアァ]?ク$ だと「アット」「アト」がマッチしない・・・ 「アット」と「アットマーク」にマッチして「アットローン」にマッチしないなんてできないのかなo(~ρ~)o zzz・・・
>>333 「@ローン」の読みは「アットローン」なんだけど。
マッチしなかったらおかしくないか?@はアットって読んでもいいんだろ?
PHPで簡単なweb上思いついたスクリプトを書き残すメモ帳のようなものを作成してるんですが その中で「//〜〜〜\n」や「/* */」などのいわゆるコメントの部分を 色分けして表示したいのですがコメント部分とマッチさせる正規表現がどうしてもわかりません。 「/* */」については/*を<FONT COLOR=RED>/*にし */を*/</FONT>にしたのですがこれだと 「""」に囲まれたコメントではない部分も色分けされてしまいます。当たり前ですが・・・。
>>335 こんなんでいいんじゃないか
<?php
header("Content-Type:text/html; charset=Shift_JIS");
$comment[0] = "\/\/[^\n]*?\n";
$comment[1] = "\/\*(.*?)\*\/";
$msg = "TextTextText // TextText
TextText
TextTextText /* TextText */
TextText
// TextText /* TextText */ Text
Text
";
foreach($comment as $regexp){
$msg = mb_ereg_replace($regexp,"<span style=\"color:red\">\\0</span>",$msg);
}
$msg = nl2br($msg);
echo $msg;
?>
use Jcode; $jis=Jcode->new($ARGV[0],'utf8')->jis; $jis=~s/([^a-zA-Z0-9])/sprintf("%%%02lX",unpack("C",$1))/eg; $jis=~s/%1B%28B$//; $jis=~s/^%1B%24B//; # <= separate $jis=~s/%/\\x/g; こいつで16進にして正規表現かけてんですが ___ファイル内のjisコード文字列____ ああ接続FTP接続うう __________________________________ FTP接続 <= なら引っかかってくれます 接続FTP <= だと駄目です なぜに?
>>337 テストもせずに s/\G と逝ってみるテスト
339 :
337 :04/03/10 22:49 ID:QeEknFJh
perl FTP接続 <= だとOK FTP\x1B\x24B\x40\x5CB3 perl 接続 <= これもOK \x40\x5CB3 perl 接続FTP <= だと駄目でつ \x40\x5CB3\x1B\x28BFTP s/\G と逝ってみたいんですがどこで使うんでつか アホですまそ
質問させてください。 abc abc%xyz 123 123%xyz という4つの文字列があるときに、左から順番に、 $1 に 'abc' が代入されるようにマッチする マッチしない $1 に '123' が代入されるようにマッチする $1 に '123'、 $2 に 'xyz' が代入されるようにマッチする にはどう書けばよいでしょうか? /^(?:(abc)|(123)(?:%(xyz))?)$/ だと、3つ目と4つ目の '123' が $2 に入る /^(abc|123)(?:%(xyz))?$/ だと、2つ目がマッチする /^(abc|123(?:%(xyz))?)$/ だと、4つ目の $1 に文字列すべてが入る みたいな感じでだめでした。 わかりにくい上に低レベルな質問で 申し訳ないですがよろしくお願いします。
>>340 /^(\w+)(?:$|(?<![A-Za-z])%(\w+)$)/
342 :
340 :04/03/11 23:05 ID:???
>>341 ありがとうございました。完璧です。
こういうときに Positive Lookbehind Assertion 使うんですね。
ぜんぜん思いつきませんでした orz
343 :
nobodyさん :04/03/22 16:58 ID:JNc4vCtR
if( !reply_to || reply_to.search(/\d/) ) JavaScriptでの分岐条件ですが、 「reply_toがないか、あるいはあっても数字以外の文字が含まれている場合はtrue」 という条件式です。 上記でどうもうまく行っているのですが解せません。 数字以外の文字って「\D」ですよね。何か勘違いしていますか? perl/CGI+JavaScriptで製作中ですが正規表現はあまりやった事ないです。 あるいは上記条件式だとどう書くのが普通ですか?
>>343 Web制作板で聞けよ
if (inNan(reply_to)) でどうだ?
if (inNaN(reply_to)) だった
>>345 > if (inNaN(reply_to)) だった
isNaN(reply_to)でした。
こんなんがあるんですね。
勉強になりました。
isNaN で良いの? isNaN("123foo") とかも false になるよ。
あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
たぶん
>>343 のはうまくいっていないと思われ。
マッチしないときには -1 を返すので、
if ( !reply_to || reply_to.search(/\D/) >= 0 )
とかじゃないかな?
349 :
343 :04/03/22 18:24 ID:???
>>347 > isNaN で良いの? isNaN("123foo") とかも false になるよ。
えーと、今回は数字以外の文字が含まれてたら false でオッケイです。
>
> あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
> たぶん
>>343 のはうまくいっていないと思われ。
> マッチしないときには -1 を返すので、
> if ( !reply_to || reply_to.search(/\D/) >= 0 )
> とかじゃないかな?
なるほど、、、微妙に返り値が違うんですね。
単純にブール値を返すもんだと思ってました。
勉強になりました。
クライアントサイドJavaScriptってうまく組み込むと便利ですけど、
ブラウザ依存だったりバージョン互換性の問題とか、結構微妙ですね。
いえ、今回の件とは関係ないですけど。
ありがとうございました。
350 :
343 :04/03/22 18:26 ID:???
>>348 >
>>347 > falseになるわけねぇだろうが
ああ、そうですね。数字かどうかですからね。
trueでいいんです。
たぶんうっかりミスですね。御指摘どうも。
>>348 げ、処理系依存なのか。確かに IE だとならないね。
でも、 isNaN("1e0") とかは false になるよね?
復帰
353 :
nobodyさん :04/04/08 15:03 ID:AQ8qwK3r
"abcdeあいうえお\"fghijかきくけこ"; のようなダブルクォートで囲まれた文字列を取得したいのですが、 文字列に\"を含んでいる場合うまく取得できません。 "[^"]*"と書いているので当然と言えば当然なのですが・・・ どのようにしたら、\"を含む文字列をうまく取得できますでしょうか?
余計なことをせずに最長マッチさせればいいんじゃないの。 /"(.*)"/ こういうのもありかもしれないけど。 /"((?<=\\").*)"/
355 :
354 :04/04/08 15:46 ID:???
盆ミスー適当に修正して
正規表現とかその手の本には必ず出てくる例題だな。
357 :
nobodyさん :04/04/09 17:13 ID:Nk138A/f
かれこれ半日もんどりうってます.... htmlファイル中で、aタグ中のリンク先の置換をやりたいのですが、 ・mailto:やtel:が含まれる場合は除外 ・リンク先(href="url")のurlが、cgiやphp、jspだったら除外 というのをやりたいのです。 で、それで引っ掛かった分(htmlやhtm)を、特定の文字列に置換したいのです。 で、 /<a href="(([^(tel:|mailto:)][-0-9a-z/@~]+[^(.php|.cgi)]") ([^>]+))>/i なんてやってるんですが、思うようにならんです。 どこがおかしいのでしょう? 先達の皆さま、よろしくおながいします
>>357 もしかして、//i -> s///i かな?
s{<a href="((?<!tel:|mailto:).+?(?!\.php|\.cgi)".+?>)}{url=$1}i;
実証はしていませんm(_ _)m
>>357-358 s/<a href="((?!tel:|mailto:)[-_.!~*'()a-z0-9;\/:@&=+$,%#]+(?<!\.php|\.cgi))"[^>]*>/url=$1/i;
こんな感じ?
>>357 '?'を許さないことで、クエリストリング付きは
即時却下する所が面白いね。
>>357 一回のマッチで全部判定できなくもないが、分けた方が楽且つ柔軟。
言語が Perl5 なら
s{
(
<a
[^>]+?
href=(?:(")|(')|(\b))
)
(
(?(2)[^"]+?)
(?(3)[^']+?)
(?(4)[^\s>]+)
)
(?=
(?(2)")
(?(3)')
[^>]*?
>
)
}
{
my($pre, $url) = ($1, $5);
if ($url !~ /^(?:mailto|tel):|\.(?:cgi|jsp|php)$/i) {
$url =~ ...
}
$pre . $url
}egix;
362 :
nobodyさん :04/04/09 21:00 ID:B1AI3byV
357です。 明日再挑戦します。 ありがとうございます
363 :
nobodyさん :04/04/10 13:43 ID:rupp3c37
357でつ。 360さん、361さん、ありがとう!うまくいきました。 でも、361さんのは、漏れには何をやってるのか識別不能です....鬱
364 :
nobodyさん :04/04/14 21:47 ID:8xwTd1PB
おまえらは監視されている(^▽^ケケケ
365 :
nobodyさん :04/04/14 21:47 ID:8xwTd1PB
おまえらは監視されている(^▽^ケケケ
366 :
:04/04/20 01:22 ID:UZzv87o5
htmlファイルを読み込んで、
<a href=
http://bbq.2ch.net/bbynews/i/ >速報Headline</a> を
<a href="
http://bbq.2ch.net/bbynews/i/ ">速報Headline</a>
の様に、href=の中身を " で括りたいのですが、
$str =~ s/(<[^>]*\bhref\s*=\s*['\"]?)([^\s\"'>]*)/\1\"\2\"/g;
としてしまうと、元々 " で括られている場合にもさらに " が付いてしまうため困っています。
" が無い場合のみ " で括るようにするにはどうすればよいでしょうか。
お知恵をお貸しくださいませ。
>>366 s{
(?<=href=)
(?:(")|(')|(\b))
(
(?(1)[^"]+)
(?(2)[^']+)
(?(3)[^\s>]+)
)
(?(1)")(?(2)')
}
{"$4"}gix;
368 :
nobodyさん :04/04/20 16:41 ID:2Qvzqrcy
質問させてください。 あるhtmlファイルの <!--ここから//--> テキストテキストテキストテキストテキストテキスト <!--ここまで//--> という「<!--ここから//-->」の部分と「<!--ここまで//-->」の間にあるテキストを 他のphpファイルからereg_replaceで置換したいのですが可能でしょうか? 可能な場合、上記の範囲指定は正規表現でどう書いたらよいのでしょうか?
>>366 s/(<\w+\s+href\s*=\s*)(['"]?)([^\2\s>]*)\2(\s*>)/$1"$3"$4/gi;
# まんまですな。
>>371 どこらへんがDQNなの?
373 :
366 :04/04/21 11:47 ID:???
>>367 ,372
ありがとうございます。これから試してみます。
実は367は何やってるかわからないほどの素人ですが
精進します。
>>372 それに気づけないような頭でこのスレに来るなよ
>>376 おいおい、もう夏の暑さが近づいているというのにまだ春厨か?
いい加減自演認定は恥ずかしいと思えよ。
俺は面白そうだから便乗しただけ
#って書いてもどうせ煽ってくる春厨だろうけど
俺は面白そうだから便乗しただけ 俺は面白そうだから便乗しただけ 俺は面白そうだから便乗しただけ ワラタ
381 :
372 :04/04/21 20:49 ID:???
>>374 hrefと=の間にスペースがあったり、相対アドレスの場合マッチしないからではないですよね?
んー、なんだろう。
382 :
372 :04/04/21 21:03 ID:???
って、煽ってただけなのか。 がっがり。
↓んじゃ、次の質問どうぞ。
こまった人たちだな
386 :
:04/04/22 01:57 ID:???
>>372 これをPHPで使うにはどう変更すればいいでしょうか?
preg_replace関数を使ってみたのですが、マッチしてくれませんでした。
>>386 $str = '<a href=
http://bbq.2ch.net/bbynews/i/ >速報Headline</a>';
$result = preg_replace('/(<\w+\s+href\s*=\s*)([\'"]?)([^\2\s>]*)\2(\s*>)/i', '$1"$3"$4', $str);
こんなのでいけた。
388 :
:04/04/22 15:12 ID:???
>>387 うまくいきました。ありがとー
条件を " でくくっててマッチしないのを、 ' に変更したらできました。
389 :
nobodyさん :04/04/28 11:02 ID:YDy2pcOH
Perl コーディング初心者質問コーナーより誘導されてきました。 sub/test.htmから<n月>という文字列がある行をマッチさせたいのですが、下のようにすると ローカルではマッチするんですが、サーバーに上げるとマッチしなくなります。 print "content-type: text/html\n\n<html>"; open(TEST, "sub/test.htm"); while (<TEST>) { if ($_ =~ /<.*?月>/) {print $_;} } close(TEST); print "</html>"; exit; 4行目を if ($_ =~ /<(.*?)月>/) {print $_;} に書き換えるとローカルでもサーバー上でもマッチします。なぜでしょうか。
>>389 「ローカル」と「サーバー」のそれぞれの Perl のバージョンは?
スクリプトと sub/test.htm のそれぞれの文字コードは?
391 :
389 :04/04/29 02:51 ID:SDhjA2B7
>>390 ローカルは5.8.3でサーバーは5.6.1です。
ファイルの文字コードはシフトJISです。
392 :
nobodyさん :04/04/29 02:56 ID:AOm5G2zY
プログラムって何が面白いんですか
393 :
nobodyさん :04/04/29 15:34 ID:cR/VctPC
適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列<適当な文字列"適当な<br>文字列 のような文字列に対して、imgタグやbrタグだけ残して、他の<>"'&あたりを文字参照に置換 したいんですが、正規表現一撃でいけますか?
文字参照って、実体参照のこと言ってるのか?
あ、そうです。 文字参照→文字実体参照 上の例だと 適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列<適当な文字列"適当な<br>文字列 となって欲しいのです
タグ外で"とかまで変換するヤシは意味わかってないね
やれやれ、素人はこれだから
無能な捨て台詞より有能な捨て解説キボンヌ。
何も分からない素人が何得意気になってるんだか その程度のことgoogleで調べろよ
>>400 プッ 必死だな
書き捨てできると思った炉 え? プゲラワラップッ
環境 WindowsXP SP1 ActivePerl 5.8.0.806 正規表現でカタカナの「ゼ」を使うとエラーになってしまいます。 カタカナのゼを含む場合だけ「Unmatched [ in regex;」というエラーで止まってしまい、ほかの文字は大丈夫そうなのですが、対処法ありませんか? if($temp =~ /ゼ/){ 色々; }
>>405 ありがとうございます。
とりあえず意図した動作をするようになりました。
文字コードのせいで [ に認識されていたんですね。
紹介していただいたURLもブックマークしました。
熟読しますね。
>>393 my $attr = qr/\w+=(?:(?:(')|(")|([^>]))(?:(?(2)[^']*)(?(3)[^"]*)(?(4)[^\s>]*))(?:(?(2)')(?(3)"))\s*)?/;
my $amp = qr/&(?!(?:(?:\#\d+)|(?:\#x[a-f\d]+)|(?:\w+));)/i;
s/(<\/?\w+\s*(?:$attr)*>)|(<)|(>)|(")|($amp)/
$1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
/xge;
Perlで書いてみたけど、どこか穴があるかも。
> $1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&' $1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
410 :
393 :04/05/03 22:32 ID:???
>>407 ありがと。
しかし内容を理解しようとしてみたが、いまだわかりません。
簡単なhtmlパーサを作っていて、<br>と<img>はインライン要素で、閉じタグもない
から、他の処理がすべて終わった後に置き換えればいいや、というロジックでした。
よく考えたら、文字列中に実体参照で<>が出てきたとしても、&が&に展開
されるので、いちど実体参照に展開してから、すべての処理が終わった後に、
s/<br>/<br>/i
s/<img src="([^"<>]*)">/<img src="$1">/i
これでいけました。
いろいろテストしていたので、反応が遅くてすまんです。
411 :
393 :04/05/03 22:39 ID:???
あ、gオプション書き忘れ。s///giね。 それと、お世話になりましたので、ヘタレの作ったhtmlパーサでも見てやろうかという 方がいるならアプロダにでもソースさらします。
HTMLパーサ?モジュール使ったらあかんの?Perlでしょ?
413 :
393 :04/05/04 00:09 ID:???
>>412 HTML::Parseモジュールの使い方を理解するのが面倒くさかった
&
掲示板の投稿に特定のタグと属性のみ許可する、文法に従わないタグは
その旨マークしてテキストとして表示する、という限定的用途なので、自作
のほうが汎用モジュールより高速だと思った
&
Perlと正規表現の勉強のため
て、感じで。
ま、車輪の再発明は勉強には有用だが、 実用には不向きなので。
Rock54 対象の悪寒。
/^0?[0-3]?[0-7]{1,2}$/ってどんな意味ですか?
そのまんまだと思うのだが。
0377までの8進数
420 :
nobodyさん :04/05/09 00:57 ID:R8gJ7rV0
perlをシフトJISで書いてるんですが、「表」とかの文字化けする文字を正規表現でマッチングさせる にはどうしたらいいでしょうか。 $_ =~ s/表/表\/g; みたいなことをしたいんですが上記の場合「表」のコードが(95 5C)なのでエラーに なってしまいます。コードのまま検索かけてもうまくいきませんでしたし $_ =~ s/95 5C/95 5C 5C/g; どうすれば「表」という一文字を検索に引っ掛ける事ができるでしょうか?
421 :
420 :04/05/09 01:29 ID:???
色々試していたら、デコードした後に下記のやり方で一応できたのですが、 $_ =~ s/\x95/表\/g; でも\x95だけでは他の文字にも影響が出てしまいますよね。それで $_ =~ s/\x95\x5C/g; としてみましたがこれではマッチしてくれませんでした。どうすればいいでしょうか。
要は文字化けしないようにエスケープしたいんじゃろ? 出力だけでなく処理もSJISでやってるなら展開しないように工夫すれ
つか、内部処理はEUCでやれよと
424 :
420 :04/05/09 02:08 ID:???
>>422 はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。
ところで、みんなはクエリは受け取ったらeucに変換して処理をした後、出力時にsjis
に変換しているのですか?
プラットフォームがwinならsjisで、unixならeucに変換して扱うみたいな事を聞いたの
ですが、winでも処理時はeucで出力の時にsjisに変換すれば大丈夫なんでしょうか?
>>424 HTMLをEUCで書く
PerlCGIをEUCで書く
「表」とかで悩んだことは一度も無し。
ほんとみんな無駄な苦労してるなあと思ってる。
HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
(変換時にはちゃんとincode=sjisを付ける)
427 :
420 :04/05/09 02:39 ID:???
みなさんありがとうございます。今までずっとメモ帳でやってたので、perlもhtml
も自動的にShift_JISで書いてました。何かエディタを使おうと思いますが、色付けもなく
特定文字が太字にもならない、メモ帳と違うのは漢字コード指定で再読み込みができる
っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。
>>426 >HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
〜最初にeucに変換してから処理する〜の意味が理解できなくて・・・
>>425 のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
解説されてるのでしょうか?
とりあえずお腹が空いたので、お茶漬けでも食べます。
>>424 > はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
> 内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。
そこでなんで $_ =~ s/表/表\/g; みたいな処理が必要なの?
429 :
420 :04/05/09 03:48 ID:???
Sift_JISでやっているので、「表」という文字は文字化けしてしまうので、相手が入力した文字の 中に表が入っているか検索して、入っていたら表の後ろに\をつけて問題を解決しようと 思ってましたが、sjisでやること自体が間違いみたいですね。 ところでこれはスレ違いな質問なんですが、エディタを使う事にしたのでファイルの関連付けをメモ帳の部分を 全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが どうしてでしょうか。
430 :
420 :04/05/09 04:05 ID:???
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。 >(変換時にはちゃんとincode=sjisを付ける) perlをeucで書く場合(HTMLがShift_JIS指定されてる場合), print "文字列"; を $data="文字列"; jcode::convert(\$data,"sjis"); print $data; としなくてはならないのですか?ってこれも凄いスレ違いですね。こうゆう事はどこのスレに行って 質問すればよいでしょうか。
>>420 おまいは何もかもすべて他人任せなのか?
ちったぁ自分の脳を使え!
>>427 > っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
> 太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。
「勝手に」なるんだったら使えないな。素人の言い訳みたいだな。
> ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
> エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
普通ブラウザ側の表示文字コードは自動判別になっている。
自動判別に失敗するのを防ぐためのContent-Typeだ。(IEはContent-Typeは見ないんだったっけ?
>
>>425 のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
> 解説されてるのでしょうか?
ちゃんと読んでから何か発言してください。
>>429 > 全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
> どうしてでしょうか。
窓の手入れろ
>>430 > >HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
> >(変換時にはちゃんとincode=sjisを付ける)
> perlをeucで書く場合(HTMLがShift_JIS指定されてる場合),
> print "文字列";
> を
> $data="文字列";
> jcode::convert(\$data,"sjis");
> print $data;
確かにそうしなければならないが、俺はそれは嫌だからプログラム内に日本語は書かない。
そもそもプログラム内にprintがない。
HTML::Template Template-Toolkit Template:Extract
434 :
420 :04/05/09 05:03 ID:???
みなさんすいませんでした。みんながやさしかったのでちょっと調子に乗りすぎました。
色々ためになるアドバイスありがとうございました。
>>433 参考にします!ほんとに感謝です。
それでは失礼します。
435 :
nobodyさん :04/05/11 15:44 ID:g6OxcqtT
文字列 a=A b="B" c="C d=D" e に対して、 a=A b="B" c="C d=D" e が出てくるパターンを教えてくださいませ。 之では駄目みたいなんです → /(\w\=(\w|\"\w\")|(\w))/
/[a-z]=(?:[A-Z]|"[A-Z](?: [a-z]=[A-Z])*")/
437 :
436 :04/05/11 16:15 ID:???
/[a-z](?:=(?:[A-Z]|"[A-Z](?: [a-z]=[A-Z])*"))?/
438 :
435 :04/05/11 16:26 ID:???
436=437 さんありがとう
439 :
nobodyさん :04/05/24 16:10 ID:yOpX2XMb
質問です。 $dataにはhtmlがごちゃごちゃ入っているとします。例えば $data = "<p>\n". " ほげれ\n". "</p>\n". "<pre>\n". " ここは整形済み\n". "</pre>"; この$dataを他のhtmlに埋め込むプログラムをつくりました。 そのとき、埋め込んで完成したhtmlのソースが見づらいため、 埋め込む$dataの各行にインデントを加え、埋め込み先のhtmlソースと 幅を合わせます。 $data =~ s/\n/\n /g; という正規表現で、各行の改行の後ろに次行のインデントを加えてみました。 ところがこの場合、preの中身にも当然インデントが入ってしまい、困っています。 preの中はインデントをかけたくありません。 どういう正規表現で書けばいいでしょうか。 速度はあまり気にしませんが。遅くてもいいので1行の正規表現で書きたいです。 プラットフォームはperl5.8によるCGIです。
行とタグの二つを認識しつつ、インデントを加えるわけだから、 一行は無理だと思う。
>>439 my $Indent = "\t";
my $data =<<"HTML";
<p>
ほげれ
</p>
<pre>
ここは整形済み
</pre>
HTML
$data =
eval {
my $flag;
join '',
map {
$flag++ if m|<pre>|i;
$_ = $flag ? "$_\n" : "$Indent$_\n" ;
$flag-- if m|</pre>|i;
$_;
} split /\n/, $data;
};
print $data;
眠たいのでごちゃくちゃ、、、スマソ
$data =~ s/(?:(<pre>[\S\s]*?<\/pre>)|^(.+?)$)/($1)?$1:" $2"/mgei;
443 :
439 :04/05/25 17:16 ID:???
どっちも完璧でした。そしてどっちも私の理解を超えてる・・・。 このコードを眺めて精進します。本当にありがとうございました。
444 :
440 :04/05/25 19:45 ID:???
>>442 なるほどmオプションで解決できますね。
吊ってきます。。
(´・ω・)
446 :
nobodyさん :04/05/30 02:31 ID:d8FeFDnu
PHP4で文字列を正規表現で解析したいと思います。 文字列は 'YYYYMMDD-hhmmss', 'YYYYMMDD' の二種類がマッチして、 前者は YYYYMMDD と hhmmss を、 後者は YYYYMMDD と '' (空) を取得したいと思います。 /(\d{8})-(\d{6})/ では後者で取得できませんでした。 どなたかパターンを教えてくださいませ。
?を使えると幸せになれるぽいよ
/(\d{8})(-(\d{6}))?/ で可能でした。ありがとうございます しかしながら、取得した配列が 前者が YYYYMMDD-hhmmss YYYYMMDD -hhmmss hhmmss 後者が YYYYMMDD YYYYMMDD '' '' となってしまいました。 欲しいものは YYYYMMDD-hhmmss から取得したのが YYYYMMDD-hhmmss YYYYMMDD hhmmss YYYYMMDD から取得したのが YYYYMMDD YYYYMMDD '' なのです 文を追加することで簡単に直せるのですが、パターンで解決できましたら、 よろしければ後学の為にも教えてくださいませ。
()の意味分かると幸せになれるかも。
452 :
nobodyさん :04/06/04 17:11 ID:5ERN6S7J
([^/]+)/?$
454 :
452 :04/06/04 17:49 ID:???
>>453 あう、おはずかしい勘違い。
うまくいきました。ありがとうございます。
455 :
nobodyさん :04/06/21 10:56 ID:DV/+bk/n
はじめまして。
>>1 のリンク先を見たのですが、素人&理数系全くダメの私には理解できませんでした・・・
どなたかアドバイスを下さると嬉しいです。
1-1001までの数字を
1→<a name="1">1</a>
・
・
・
1001→<a name="1001">1001</a>
というふうに置換したいのですが、
検索:[0-9]\f|[0-9]\f[0-9]\f|[0-9]\f[0-9]\f[0-9]\f|[0-9]\f[0-9]\f[0-9]\f[0-9]\f
置換:<a name="\0">\0</a>|<a name="\0\1">\0\1</a>|<a name="\0\1\2">\0\1\2\</a>|<a name="\0\1\2\3">\0\1\2\3</a>
とやっても上手くいきません。(↑笑わないでくださいね。これでも必死なんです・・・)
エディタは秀丸です。どうかよろしくお願いします。
s|\d{1,4}|<a name="$&">$&</a>|; きっとこんなんじゃ駄目なんだろうな。
457 :
455 :04/06/21 13:20 ID:???
いろいろぐぐって自己解決いたしました。 [0-9]+\f →<a name="\0">\0</a> これで出来るようになりました。 今度からもっと調べてから書き込みますね。 スレ汚し失礼しました。
>>456 すいません、書き込んでいる間にレス下さってたんですね。
ありがとうございます<(. .)>
459 :
nobodyさん :04/06/23 14:38 ID:StfIGGBa
'<tag>test1<tag>test2</tag>test3</tag>'; 上記の文字列から'test2'の部分だけを取り出したいのですが、 'm /<tag>(.*?)<\/tag>/;' では$1に 'test1<tag>test2' まで入ってしまいます。 'm /<tag>.*?<tag>(.*?)<\/tag>/;' で望みどおりにはなるのですが エレガントではないように思います。 もっと良い表現はないでしょうか?
m!.<tag>(.*?)!;
461 :
460 :04/06/23 15:57 ID:???
m!.<tag>(.*?)<!;
465 :
nobodyさん :04/06/25 11:54 ID:g4l68VjT
"A1B5A2B6A3B7A4B8" と言う文字列があったとして、'B'の2個目の後ろの数字とか、 'A'の3個目の数字などの指定はどうしたら良いでしょうか? Perlでお願いします。 {m回目にマッチ}を使えば良いかと思ったのですが、使いかたがわかりません。
466 :
nobodyさん :04/06/25 12:01 ID:g4l68VjT
書き忘れましたが m /.{3}(\d)/; とかで'B'の2個目の後ろの数字は取り出せるのですが、 'A'や'B'はhtmlのタグの変わりですので、任意の文字列の 希望するヒット回数の後ろの文字列を取り出したいと思っています。
>>466 もうちょっと元々何をやりたかったかを具体的に。
つか、{m}はm回数目にマッチじゃないからね。 /.*B.*B(\d)/ とかやるしかないんじゃないの?
469 :
nobodyさん :04/06/25 12:25 ID:g4l68VjT
>>467 htmlの中の2個目のtableタグの中の文字列を取り出したり、
3個目の画像のURLを取り出したりしたいです。
>>468 >つか、{m}はm回数目にマッチじゃないからね。
ご教授ありがとうございます。
471 :
468 :04/06/25 12:36 ID:???
回数固定じゃないならこうかな? mとかBのところは適宜入れてやる。 /(?:.*?B){m}(\d)/ ……でもこれってHTML解析とは違うような気がする。
472 :
nobodyさん :04/06/25 12:46 ID:g4l68VjT
>>470 2個目の<tabe></table>内の10個目の<td></td>の間の文字列を取り出したいのですが、
エレガントな表記方法をお願いします。
>>471 まだまだ初心者なので的確な表現ができなくて申し訳ありません。
自分で調べるとっかかりが欲しかったので、
>>465 のような質問にしました。
>>472 具体的という意味がわからないならもう帰っていいよ
HTML のパースネタは盛り上がる (≒ 荒れる) ねえ。
>>472 そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉。
475 :
nobodyさん :04/06/25 13:31 ID:g4l68VjT
>>473 ぐたい-てき 0 【具体的】
一般的なものや観念的なものではなく、個々の事実によっているさま。
「―に例をあげる」
具体的に例をあげているだろうが。
具体的という意味がわからないならもう帰っていいよ
>>474 >そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉
ご教授ありがとうございます。
HTML パースライブラリというのを知っただけでも大きな収穫を得ました。
なんだよ、やっぱり分かってねぇじゃん。 一番必要なのは日本語の勉強だな。
>>475 >2個目の<tabe></table>内
<table><td><table/></td></table><table/>
どれが2個目のテーブルですか。
どこが具体的ですか。
脳内ですか。そうですか。
おめでたい頭してますね。カワイそうに。
>>475 HTMLもわかってないようだからそっちを先に勉強しなさい。
マスターするまで二度とこの板には来ないこと。
479 :
462 :04/06/29 17:06 ID:???
>>463 ごめんなさい。
ereg_replace("\++","+",$word);
で出来ました。
480 :
nobodyさん :04/06/29 20:28 ID:8D9V5eyp
$str = "<a href=
http://www.abc.com/ ><b>ABC</b>company</a>";
preg_match("/<a href=(.*)>(.*)<\/a>/i",$str,$str_reg);
これだと、<b></b>があるため、URLとタイトルがうまく抜き取れません。
http://www.abc.com/ <b>ABC</b>company
の2つを抜き出したいのですが、どうしたらいいのでしょうか?
<b>タグが入っていない場合は、うまくいくのですが…。
>>480 preg_match("/<a href=(.*?)>(.*?)<\/a>/i",$str,$str_reg);
482 :
480 :04/06/29 22:01 ID:???
483 :
nobodyさん :04/07/03 16:46 ID:3JpN2Yos
DoCoMo/2.0 N2001(c10;ser***************; iccxxxxxxxxxxxxxxxxxxxx)
や
DoCoMo/1.0/X503i/c10/ser***********
から
ser**********←これは11〜15桁のユニークな英数字
を得たい。
それと、
http://www.dp.j-phone.com/dp/tool_dl/web/useragent.php J-PHONE/4.0/J-SH51/SN************ SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0
Ext-Profile/JSCL-1.1.0
SN************←12桁のユニークな英数字
を得たい。
よろしくお願いします。
ser\d{11,15} SN\d{12}
>>484 ありがとうございます。
PHPなのですが、、、もう少し詳しくお願いします
487 :
nobodyさん :04/07/16 14:35 ID:IH9/xCo3
>>11 さんとは逆に、
アラビア数字(第1条〜第999条)を漢数字(第一条〜第九百九十九条)に置き換える式を教えてください。
488 :
nobodyさん :04/07/16 15:37 ID:ihM1iEsJ
次の場合、どのようにすればいいのでしょう?
「
http://hoge.com/*** 」の***が、先頭一致で(aaa/|bbb/)以外の場合に、
hoge.com/***をhoge.com/index.cgi?***に変換。
〔(aaa/|bbb/)の場合通常のリクエストと見なす〕
〔***は任意〕
Apacheのmod_rewriteで行い、記述は.htaccessで行う。
PHPの質問なのですが、全角・半角を無視して検索文字列をハイライトするいい方法ありませんかね? パフォーマンスが悪いのは承知で、 $hage = mb_convert_case($hoge, 'asKV') $hage = preg_replace('/pattern/', '<span class="match">$0</span>', $hage); $part = preg_split('/(<.+?>)/', $hage, 0, PREG_SPLIT_DELIM_CAPTURE); $result = ''; $pos = 0; foreach ($part as $key => $value) { if ($key % 2 == 0) { if (($len = mb_strlen($value)) > 0) { $result .= mb_substr($hoge, $pos, $len); $pos .= $len; } } else { $result .= $value; } } というのも考えてみたけど半角の濁点の処理などをさらに追加せねばならず、大変。 mb_ereg_replaceかpreg_replaceのオプションで全角半角を無視ってのできないかなあ。
493 :
nobodyさん :04/07/17 01:01 ID:l2+iEUo8
PHPで。 雑多な文字列の入ったテキストファイルの中から、ホスト名を抽出するにはどう書けばいいのでしょう。 実際やりたいことは、テキストファイルからホスト名部分を抽出→ereg_replaceで空白に置換え。 つまりホスト名の削除です。
>>493 そのホスト名に当てはまる条件を提示してください
495 :
nobodyさん :04/07/17 04:58 ID:aixfBR+9
はじめまして。 以下のような文字列にて"#"より後ろの文字列を 正規表現を使用したeregi_replace関数を用いて全て削除しようと考えています。 ("#"も含みます) $stirng = "あいうえおaiueo#かきくけこ" 以下のようにやっていますが、うまくいきません。 $b = eregi_replace("[#.*]","",$stirng); どのようにすればよいのでしょうか?
497 :
nobodyさん :04/07/17 11:31 ID:l2+iEUo8
493です。
>>494 各行から以下のような形式のホスト名部分を削除
#####
YahooBB***********.bbtec.net
\\******.ppp.dion.ne.jp
\*****-*****\\****\-acca.tokyo.ocn.ne.jp
\\***\*\.speednet.ne.jp
\\\.\\\.\\\.\\.ap.highway.ne.jp
*=数字 \=アルファベット(大文字小文字混在)
#####
これ以外にも出来るだけ柔軟に対応させたいのです。
スクリプトの行数が多くなるのは覚悟の上です。
499 :
nobodyさん :04/07/17 14:48 ID:TroGWL8b
>>496 ありがとうございます!
本当に助かりました。^^
500 :
nobodyさん :04/07/17 15:11 ID:TroGWL8b
split関数にて以下のようなスペースが1つもしくは複数連続に続いてる部分を区切りとして 配列にする場合、split関数の引数はどのように書けばよいでしょうか? $b = " 02600 0 1111" 現在、$a=split(" *",$b);でやっておりますが、うまく出来ません。 よろしくお願い致します。
501 :
nobodyさん :04/07/17 15:15 ID:TroGWL8b
>>500 訂正です。
$a=split(" +",$b);でやっておりますが、うまく出来ません。
補足です。
上記の例の場合、配列$aに以下のように入れたいと思っています。
$a[0]=02600
$a[1]=0
$a[0]=1111
よろしくお願い致します。
502 :
nobodyさん :04/07/17 15:16 ID:TroGWL8b
>>501 すいません。また訂正です。
$a[0]=1111
↓↓↓↓↓
$a[2]=1111
503 :
nobodyさん :04/07/17 15:30 ID:TroGWL8b
>>502 出来ました。
スペースの全角と半角の区別をしてなかったのが原因でした。
失礼しました。
/"[^"]*"/ これでダブルクオートに囲まれた文字列に一致すると思うんですが、 ダブルクオートの中にエスケープされたダブルクオートがあると、そこまでで一致終了してしまいます。 当然ですが。 エスケープされた物を無視させるにはどうすればいいですか
/".*"/
>>504 "foo\"bar" と \ でエスケープするなら
/(?<!\\)"((?:\\"|[^"])*)"/ で $1 に foo\"bar が入る。
…少なくとも Perl 5.005 以降なら。
>>506 おおっと
なるほど・・・・
\\"|[^"]が思いつかんかった・・・・・
ありがとうございます
あれ でもこれだと "test\"" これに対応しない・・・ test になっちゃった・・・・・
ここはチラシの裏じゃありません
>>508 使用言語とテストコードを書いてくれんと何が悪いか分からんよ。
#!/usr/local/bin/perl
require 5.005;
$_ = '"test\""Test:"\100-", tes"T""t\"e\"S\"t"';
print "$1\n" while /(?<!\\)"((?:\\"|[^"])*)"/g;
print "$1\n" while /(?<!\\)"([^"]*(?:(?<=\\)"[^"]*)*)"/g; # ループ展開版
__END__
あ、すんません。開発言語はPerlです。 とりあえず、HTMlタグ内とタグ外、コメントとそれ以外に分けて配列化してるんです 言うならば・・・普通のテキストを #CDATA, tag, tag, tag, comment, #CDATA, comment, tag, comment, tag....... みたいな感じで。分かりづらかったらすみません
512 :
nobodyさん :04/07/18 22:33 ID:K8gWFvF7
$tmp = $str; undef @tg; undef @ot; push @tg, $1 while($str =~ s/(<!--.*?-->)//s); @ot = split /<!--.*?-->/s, $tmp; $i = 0; foreach (@ot){ push str, $_; push str, $tg[$i++]; } foreach (@str){ $tmp = $_; undef @tg; undef @ot; undef @strtg; push @tg, $1 while(s/(<(?:(?:\\"|[^"])*(?<!\\)"(?:\\"|[^"])*")*?>)//s); @ot = split /(?:<(?:(?:\\"|[^"])*(?<!\\)"(?:\\"|[^"])*")*?>)/s, $tmp; $i = 0; foreach $r (@ot){ push ret, $r, $tg[$i++]; } } foreach (@ret){ print $i++, $_ if($_ && $_ !~ /\A\s\Z/s); }
あ インデント& sageミスった・・ 読みづらくてすみません
色々考えたんですが出来ません。。 眠いので落ちます・・・・
>>515 /<!-- isweb auto-insert \*\/ -->.*?<!-- inserted by isweb server\/\* -->/s
こんなんじゃないのか?
>>518 あァ勘違い。
どうもありがとうございました・・・これで解決・・・するかな
>>520 Emeditorとかでマッチのテストしてみたんですが、
/<!-- isweb auto-insert \*\/ -->.*?<!-- inserted by isweb server\/\* -->/s
ではうんともすんとも言いませんでした。
なんか基本的な知識が欠けているような気がします。すんません。_no
>>521 EmEditorなら複数行にマッチするようにチェック入れなきゃダメよ
もちろん/とか/sもいらない
早い返信ありがとうございます。
Emeditorに複数行にマッチする設定が無いのですが…
Pro版のは"."が改行にもマッチするように設定できるみたいですがこれですかね。_no
あといろいろ試してみたのですが、スペースは\sでも でもマッチするみたいです。
<!-- isweb auto-insert \*/ -->
>>523 さんのもうんともすんとも言いませんでした。
おそらく複数行にマッチするようにチェック入れないといけないんでしょうけど。
マターリがんがります…。
<!--\s+isweb\s+auto-insert\s+\*\/\s+-->.+?<!--\s+inserted\s+by\s+isweb\s+server\/\*\s+-->
>>523 コメントタグ中の/のエスケープが抜けている
>>524 EmEditor v4 Standard をインストールして確認したところ、\s が
改行にマッチしないし \n を含むパターンを量指定できないな。
一般的な正規表現エンジンと挙動が違うから、ここで質問しても
君の望む答は得られんだろう。この糞ソフトを使い続ける気なら
後は
>>523 の専用スレに行ってくれ。
真っ当な正規表現エンジンを積んでいるソフトなら
>>516 で OK 。
>>525 検索ダイアログに突っ込むのに / は関係無し。
秀丸も正規表現エンジンを変えてやったけどできなかった。 ローカルのperlを利用するマクロならできたけど。 で、マッチしたとして何をしようってのよ? 保存したソースから削除とかなら複数行置換えできるフリーソフトのほうが簡単だぞ。
ローカルプロキシです。 あっちのスレにも誤解されそうな人がいますが…
>>529 秀丸がダメなのはヘルプに説明があるよ。
(「検索系コマンド」の「\nを使った複数行検索の際の制限について」)
>>530 エディタのマクロかなんかでプロキシ作るのかい?
ローカルプロキシって、まさかおみとろんでは...
ああ、なるほど 広告を非表示にしたいわけか
534 :
nobodyさん :04/07/24 14:34 ID:wErUOaoh
536 :
nobodyさん :04/07/24 15:12 ID:wErUOaoh
早速のレスありがとうございます。 $str はいわゆる掲示板の書き込みのコメント部分です。 で、それを自動リンクしたいんですが、コメント中に長いURLを張るとテーブルが壊れます。 実際のリンクは超略しないで、表示部分だけ短く省略したいんです。
$str = ereg_replace("
http://[^< >[:space:]]+[[:alnum:]/]","<a href=\\0>リンク</a>", $str);
538 :
nobodyさん :04/07/24 17:11 ID:wErUOaoh
539 :
nobodyさん :04/07/24 23:27 ID:b6ZQFx0g
<table> の中の、入れ子構造になっている セルを抽出する方法を教えてください <table> <tr> <th> TH1 </th> <td> TD1 </td> </tr> </table> <table> <tr> <th> <table> <tr> <th> TH2 </th> <td> TD2 </td> </tr> </table> TH3 </th> <td> TD3 </td> </tr> </table> 欲しいものは、 TH1 と TD1 TH2 と TD2 <table> <tr> <th> TH2 </th> <td> TD2 </td> </tr> </table> TH3 と TD3 です 環境は php4.3 です
入れ子になっている構造は正規文法で表せません
xslt とかの方が向いてそうだな
543 :
nobodyさん :04/07/26 14:57 ID:nr00S6gf
「test.html#aiueo」「abc.jsp#123」という文字列があって #の前の文字列を取得したい場合はどのような正規表現にすれば良いのでしょうか○| ̄|_
>>544 ありがとうございます○| ̄|_
うー、もっと勉強しなければ。(*)#とかしてますた。
xmlで ------------------------ <qqq> <abc>123</abc> <rrr>aiueo</rrr> <abc>456</abc> </qqq> ------------------------ というような構造のとき、 <qqq>の中の文字列を取り出し それに対して /<abc>([^&]+)<\/abc>/ でマッチング処理を行うと、 ------------------------ 123</abc> <rrr>aiueo</rrr> <abc>456 ------------------------ という結果になってしまいます。 一つ目の<abc>123</abc>に正しく反応させたいのですが どのようにすればよいのでしょうか。 よろしくお願いいたします。 ※マッチング処理の際の /<abc>([^&]+)<\/abc>/ のabc部分は可変です。
>>546 基本だと思うけれども最小マッチ
/<abc>([^&]+?)<\/abc>/
>>547 546です。すみません、本当に助かりました。
ありがとうございます。
(とほほさんのHP見ながらやっていたんですが、それ以外にも対応していたり
するんですね。今後は気をつけます。)
だからとほほはアテにならない。
XMLなら正規表現使わずともDOMやSAXで抽出できるんじゃないの
>>547 546ではないけど質問です。
/<abc>([^&]+?)<\/abc>/
だと<abc>123</abc>にはマッチするけど、<abc><123></abc>マッチしませんでした。
こういう文字コードを使われてるものもマッチさせる方法はあるんですか?
ヴァカには使えない仕様です。
554 :
552 :04/07/29 10:14 ID:???
ごめんなさい、きちんと表示されてませんでした。 <abc>&lt;123&gt;</abc> ↑は/<abc>([^&]+?)<\/abc>/でマッチしないのですが、 マッチさせる方法はあるのですか?
>>554 [^]の意味を調べたほうがいいよ。
/<abc>([^<>]*)<\/abc>/
例えばですが、 $aには、変動する数字が代入されているとします。 【$aが、2000で割り切れる値であるとき、真を返す】 もしくは、 【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】 としたい場合には、どのようなソースになりますか? ご教授お願いいたします。
正規表現なんか使わずに素直に $a%2000 じゃダメなのか?
print $a =~ /[02468]000$/ ? 'つるー' : 'ふおるす'; でもやっぱり $a % 2000 だよなぁ。。。@こっちの方が遅かったりして。
>>557 >>558 なるほど。割って0になるかどうかで/
どっちが早いですかねー。
あんまり変わらない??
>>559 特に速度が肝にならないのであれば、
「意味」がわかりやすいコードを採用するべきだと思う。
なのでふつーは $a % 2000 とするんじゃないかな。
>>560 ご丁寧にありがとうございます!
勉強になりました♪
htaccessでRedirectMatchを使ってページを log.apディレクトリ以外にアクセスした場合にのみ、転送させたいのですが 正規表現がよくわからずお手上げ状態です。 どなたかヒントだけでもいいので教えていただけないでしょうか
563 :
nobodyさん :04/08/03 16:58 ID:9nB7Zn3+
565 :
nobodyさん :04/08/03 17:08 ID:9nB7Zn3+
RedirectMatch [^|log.ap|]
http:// こうか?
いきなり質問です!
Perlで&を&amp;
に変えた後
if($message =~ /
http:\/\/ ([a−zA−Z0−9¥.¥/¥−+#_?〜&¥%=^¥@:¥;]+)/i){
$1 =〜 s/amp¥;//g;
}
で&amp;から&に直しました。。
しかし$1の行でエラーが出ます。
さて、どうしてですか?
まさか全角文字使って・・・ と、釣られてみる
すいません、マルチのつもりは無かったのですが。 もし不快感を催したのであれば、心からお詫び申し上げます。 しかし、私がこれを記していない事は確かです。 語調、時間差での間違いからそれは明らかです。 それを理解の上でのご返答・ご指摘宜しく御願致します。
572 :
nobodyさん :04/08/06 12:07 ID:4bPJPC+C
性器豹変
s/煽り|荒らし/あぼーん/g
"/煽り|荒らし/","あぼーん" 自慰が気になる。なに?
>>575 は g スイッチのことぢゃないの?
確か global の略だったと思う。
パターンにマッチしたのは全部片付けちまいな、の意。
#
>>576 がなんで
>>121 を指してるのかが気になる。
perlの正規表現で $value = qq|<a href="hogehoge.html">test</a>|; $value =~ s/<.*?>//g; print $value; でHTMLタグを削除できるけど、これの仕組みがわからない。 *→0回以上一致する ?→0回または1回一致する .→??????? エロイ人解説おながいします
579 :
578 :04/08/09 18:44 ID:???
.→改行以外の一文字に一致する 見てた解説サイトにだけちょうどなかったorz でも*?とする意味はまだわからないでつ;
581 :
578 :04/08/09 19:05 ID:???
>可能な限り小さな 繰り返しでマッチを行わせたいのなら、量指定子の後に“?”を続けます。
>>580 どうして?を付けるとそうなるのかが・・・・
例えば
$test = "<aiu>test</aiu>";
$test =~ s/<.*?>//g;
としたときに.*だけですべてをひとつの文字列として捉えそうなのに(現に?がないとそうなりますが)
?を付けるだけで・・・うまくいえないorz
?がコンパイルされる瞬間はいつなんですか?
<.*の時点で可能な限りマッチしますよね・・・っていうかその時は>これはあってもなくても<.*だけで
最後まで一致するから、じゃあ>はいつコンパイルされるんだ???
もしも
s/<<.*>>//g;
としたら先に<<>>を優先してあまった文字に対して.*をやるのかな?駄目だ・・これじゃ
漏れの疑問をエロイ人に理解してもらうことすらできないorz
>>581 *? で一塊の量指定子。量指定子としての * と量指定子としての ? を
並べて書いてるわけじゃない。
$test = "<aiu>test</aiu>"; として、
最長マッチ (<.*>) の場合:
1. $test の最初の < と パターンの < がマッチ
2. .* は「何か0文字以上を最大限」だから、aiu>test</aiu> にマッチ
3. パターンにはまだ > が残っているが、文字列は全部調べ尽くしたので
一旦マッチ失敗。
4. .* は「0文字以上」でさえあればいいので、食べちゃった文字を一文字
ずつ吐き出し、再試行できる (バックトラック) 。
5. .* にマッチした aiu>test</aiu> から最後の > を除外し、.* の次の
パターンである > と比べる。
6. $test の最後の > とパターンの > がマッチ
7. パターンが全てマッチ ( < と aiu>test</aiu と > )
最短マッチ (<.*?>) の場合:
1. $test の最初の < と パターンの < がマッチ
2. .*? は「何か0文字以上を最小限」だから、( < と a の間にある) 空文字列
にマッチ
3. a はパターン > にマッチしないので一旦マッチ失敗。
4. .*? は「0文字以上」でさえあればいいので、もっと詰め込む事もできる。
5. .*? に a を食わせる事にして、i と > を比べる。
6. 同様にパターン > が $test 中の > にぶつかるまで試行を繰り返す。
7. パターンが全てマッチ ( < と aiu と > )
ある文字列を含まない行を取得したいのですが、 どのようにしたらいいんでしょうか? 例) aaabbb ERROR aaabbbccc ABC dddeee aaabbbcc ABC cdddeee ERROR aaabbbcccddd ABC eee というようなテキストがあるとして errorを含まずABCを含む行だけ(この例では2行目)を マッチさせたいんですが。
>>583 @match_lines = grep((!/error/i and /\bABC\b/), split /\n/, $Strings);
>>584 ,
>>585 さん、ありがとうございます。
しかし、教えてくださったやり方だと、自分の使っている
エディタ(Peggy)ではできないです。
これはPerlで使える方法なのでしょうか?
(Perl知りませんが。。。もしかしたらjavaの
OROとかでも使えるのだろうか?)
ちなみに秀丸エディタでは前方一致とか後方一致で
マッチさせることができるみたいですね。
そこまでいかない普通の?正規表現しか使えない環境でこれは
実現できないものでしょうか??
EmEditorならできるよ
>>587 さん、ありがとうございます。
ちょっと見てみます。
でもすでにPeggyをシェアウェアとして長く使っており、
見やすい配色になれてしまったので、
今から乗り換えるつもりはないですが。。。
必要なときだけ使う形でいくしかないかな。
あ、でもこれ使用期限とかあるのかな。
フリーのVxEdtorの正規表現検索でも
>>584 でできたよ。
590 :
581 :04/08/10 07:09 ID:???
>>582 うお!?
メチャクチャわかりやすい!
保存しておきまつ!
591 :
:04/08/10 13:43 ID:2tv/OiLj
>>252 便乗させてください。
if ($FORM{'name'} !~ /^(\x82[\x9f-\xf1]|\x83[\x40-\x96]|[\x88-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/){ &error; }
↑
ここから漢字とひらがなも省いて「全角カタカナのみを許可」という形にするにはどうればよいでしょうか。
594 :
nobodyさん :04/08/12 12:26 ID:wFKNBEiY
電話番号をsjisで正規表現するにはどうすればいいでしょうか? 080-1234-5678 とか 03-1234-4321 とか 080-1234-5678 とか 08012345678 とか 0312344321
[0-9-]*
>>594 080-1234-5678?
08-01234-5678?
08012345678?
どういう文字列を電話番号とみなすのか、話はそれからだ
>>594 /(\d{2,4})-(\d{2,4})-(\d{2,4})/
こんなんか?全角数字は先に半角に変換処理しとけ。
>>598 それじゃ
01-23-45
にも
0123-4567-8910
にもマッチしちゃうよ
ハイフンがない場合にはマッチしないし
0△ -×××× -□□□□ 0△△ -××× -□□□□ 0△△△ -×× -□□□□ 0△△△△ -× -□□□□ 0△△△△△-□□□□ 0から始まる9or10or11桁 ex>09012345678 (携帯は11桁?) 家電は9桁(例外)と10桁? 全角も含めると(?:\x82[\x4F-\x58])を入れてやる? ムズイな
バカかこいつは? 全角を半角に直すという処理をなぜ思いつかない
題意がわからんのでなんともいえないけど、 マッチした文字列をそのまま取り出す、 ということなら全角を半角に直しちゃまずいと思われ。
>>594 を見ると数字の全角半角の混ぜ書きはだめなような気がする。
ハイフンはいいのかな?
>>606 バカかこいつは?
どうせクエリを受けたらEUCに変換するんだから、全角→半角処理などいらぬ。
>どうせクエリを受けたらEUCに変換するんだから、全角→半角処理などいらぬ。 大丈夫かコイツ・・・
611 :
594 :04/08/13 10:22 ID:???
大漁!
>電話番号をsjisで正規表現するにはどうすればいいでしょうか?
結局誰一人として「電話番号をsjisで正規表現する」ことのできない無能揃いの糞スレ。
なんでsjisなんだろう この人内部エンコーディング分かってるのかな?
それ以前に、必死に煽れば答えを出してくれるという発想が痛い
>>615 近頃sjisで書いてるプログラムが多いからだろ
元質問者がいなくなったら放置しとけよ
>>619 恥ずかしいからやめとけ。
s/煽り|荒らし/あぼーん/g
これが鉄則
ここは道場だから、質問者ががんばらないといけないんだよ。
622 :
nobodyさん :04/08/14 11:25 ID:4Tdhf0SR
面白そうなスレなんであげとく
>>602 全角含めるならまず置換して
最初はゼロ、1から5桁の数字、ハイフン一かゼロ、1から4桁の数字、ハイフン一かゼロと四桁の数字が1かゼロ
でそのまま答えでてるんじゃないの?
>>624 もう終ってるからどうでもいいが、言葉でごちゃごちゃ言うより実際のコーディング例を書いたほうが
100倍わかりやすい。まあ今回は質問者がクソだから、コーディング例など書かないでほしいが。
コードを理解できてないから質問するとばっかり思ってた。
abcdef @ hijklmp @ aiueos. という文字列があって1つ目の@を(1)、2つ目の@を(2)という風に 置換したいのですが、どのように記述すれば良いのか教えてもらえますと助かります。
629 :
628 :04/08/16 11:10 ID:???
すみません。PHPスレのほうで特殊な関数を使うことによって 解決しました。お騒がせしてすみません。
>>628 まじかよ!?
正規表現でも実現しようぜ。
for (0..100){
unless ( $value =~ s/@/$_/ ) { last }
}
perlならこれで動くか?なんか怖いからテストしたくないなw
全角数字(EUC)を半角数字に変換。 <ルール> 1.言語特有のモジュールを使わずに実現しる。 2.処理前に配列の中に全角数字、半角数字を準備するのは禁止 おまいらこんなはちゃめちゃなルールでできるか?上司が意味不明なこと言ってきたんだよorz
>>630 perl ならこんな感じか。
$i = 0;
$s =~ s/@/"(" . ++$i . ")"/eg;
print $s;
>>631 はごく普通を意味不明と言うめちゃめちゃな質問だな
635 :
631 :04/08/16 16:25 ID:???
636 :
633 :04/08/16 19:56 ID:???
ハッ!? 直前までPerlのスレ見てたんで思わずPerlで書いてもた・・・
配列の中じゃなけりゃいいんだから、s/0/0/gからs/9/9/gまで 10個書き並べればOKじゃないかという気もする
>>631 >>633 0xA3B0〜0xA3B9までが0〜9なんだよ。
第1バイトが0xA3なのを確認して第2バイトから0xB0を引けばよろし。
もしくは2バイトずつのまとまりから0xA3B0を引けばよろし。
つーかCで良く実装されてるんだからその通りに実装すりゃいいじゃん
ずいぶん寂れてるな。ここらで俺が問題を出してやろう。 XSS対策のHTMLエスケープを1行で済ませ。もちろん消すのじゃなくて、特殊文字に置換するんだぞ。
(´-`).。oO(素直に「XSS対策のHTMLエスケープを1行で描いてみました。 (式) 無駄な部分や、非効率な部分がありましたら添削いただけるとありがたいです」って書けばいいのにね。。。)
(´-`).。oO(素直に 「XSS対策のHTMLエスケープを1行で書くやり方を教えてください」 って言えばいいのにね・・・)
ここまで自虐的な構ってくんが拝めるのもあと半月か
まっ、宿題は自分でしろと言うことですね。
647 :
nobodyさん :04/08/21 19:21 ID:zyqI2KUi
置換ツールのスレからきました。 置換ツールで正規表現を使いたいんですけど、 <h2>8/21</h2> を <h2 id="A21">8/21</h2> という風に、「日付に当たる部分」を「idとして挿入する」という正規表現の書き方をお教え願えませんでしょうか? #正規表現=perlだと思って、ここにきたんですが、間違っていたら誘導お願いします。
>>647 >>1 s|(?<=<h2)(>\d\d?/)(\d\d?)(?=</h2>)| id="A$2"$1$2|g;
>>648 御手数おかけしてすみません。
なんだか動作しませんでした。
ソースを確認したところ、
<h2>8/21</h2>
ではなくて、
<h2>8/21 タイトル</h2>
になっていたので、うまくいかなかったのかもしれません。
>>1 から巡っていろいろ勉強してみます。
有難う御座いました。本当に感謝しています。
>>650 アフォでもなんでもいいですよ。
正規表現必要な分だけ勉強して覚えたのでできましたし。
なんで不要に煽るんですかね。
>>651 なんで質問すらまともにできないんですかね。
タイトルの正規表現が理解できなかったとみえるな
656 :
ピエール :04/08/23 22:11 ID:aJIVYOH0
>>651 >アフォでもなんでもいいですよ。
なんでもよくない。間違いなくお前はアフォだ。リアルに言うと知恵遅れ。
自分がアフォだとも気づかずに必死に勉強とかやってるのってなんか空しいな。
まずは自分がアフォだと認識して、具体的にどの能力が劣るのかを知りなさい。
これからは質問前に自分の疑問と、どうしたいかっていうことをきちんとまとめてから
ここにきて書きはじめなさい。急がば回れってね。質問前に遠回りしてもしっかりまとめれば
誰かがちゃんと答えてくれるよ。
659 :
nobodyさん :04/08/24 18:23 ID:5aeoylmi
au使いでPCのアドレス(メーラーはBecky!2)にメールを自動転送しています。 その際に受信ボックスから、携帯メール(docomo ezweb vodafone)をフィルタリングマネージャで 別のフォルダ(フォルダ1と仮定)に振り分けたいのですが、 その中でも彼女のメールだけさらに別フォルダ(フォルダ2)にしたいと思ってます。 つまり、 " ***@docomo.ne.jp " " ***@ezweb.ne.jp " " ***@*.vodafone.ne.jp "から来たメールは フォルダ1に振り分けたいが、もしそれが彼女のアドレスの場合はフォルダ2に振り分ける、 といった感じです。 どのように記述したらいいのでしょうか? 以下、Beckyヘルプより引用 下記の正規表現がサポートされています。 ^行頭にマッチします。 $行末にマッチします。 X|YXまたはYにマッチします。(X,Yは正規表現です) [A-Z]AからZまでの間の文字にマッチします。(A, Zは任意の文字) [^A-Z]AからZまでに含まれない文字にマッチします。 [ABC]A,B,Cのいずれかの文字にマッチします。 (A,B,Cは任意の文字) [^ABC]A,B,Cのいずれでもない文字にマッチします。 .任意の一文字にマッチします。 X*Xの0以上の繰り返しにマッチします。 (Xは正規表現) X+Xの1以上の繰り返しにマッチします。 (Xは正規表現) X?Xまたは空文字列にマッチします。 ()で囲んだ正規表現は解釈の優先順位が高くなります。
まずは彼女のメルアドを晒せ 漏れがメル友に(ry
662 :
659 :04/08/24 20:38 ID:???
>>660 (・ε・)
>>661 よく分からないので該当スレに逝ってきます。
ありがとうございました!
663 :
nobodyさん :04/09/03 00:28 ID:V2uWGL3l
カンマもありうる文字列<table><tr><td>1,2,3,4</td></tr><tr><td>a,b,c,d</td></tr></table>カンマもありうる文字列 これでテーブルタグの中にあるカンマだけ</td><td>に置き換えたいのです。 どんなもんでしょう。
>>663 Perl なら
s{(?<=<table>)(.+?)(?=</table>)}
{ (my $str = $1) =~ s|,|</td><td>|g; $str }eg;
665 :
663 :04/09/03 07:50 ID:???
>>664 Perlです。ありがと。正規表現一発ではムリということか。
使ったことのない構文がたくさん入ってるんで、ちょっと解析してみます。
666 :
663 :04/09/03 08:46 ID:???
>>664 とりあえず解析後回しで突っ込んでみたら完璧でした。
もしかして<table>〜</table>が複数ブロックあるとダメかなと思ったけどOK。
なんか自分ではまったく考えられない構文だったのでちょっと絶望感。
とりあえず誰かの役に立てばと、作ってたルーチン晒します。
アウトライン指定を行頭ピリオドの数で、行頭カンマをテーブルと判断して
自動整形。
アウトラインはH1は掲示板タイトルに使うし、H2は記事タイトルに使うから、
H3からね。
$comment = &sanitize($comment,3);
$comment = "\x0A$comment\x0A";
$comment =~ s/\x0A+/<\/p><p>/g;
$comment =~ s/<p>\.\.\.\.([^<]*)<\/p>/<h6>$1<\/h6>/gi;
$comment =~ s/<p>\.\.\.([^<]*)<\/p>/<h5>$1<\/h5>/gi;
$comment =~ s/<p>\.\.([^<]*)<\/p>/<h4>$1<\/h4>/gi;
$comment =~ s/<p>\.([^<]*)<\/p>/<h3>$1<\/h3>/gi;
$comment =~ s/<p>,([^<]*)<\/p>/<tr><td>$1<\/td><\/tr>/gi;
$comment =~ s/<tr>[^,],<\/tr>/<\/td><td>/gi;
$comment =~ s/<\/p><tr>(.*?)<\/tr><p>/<\/p><table><tr>$1<\/tr><\/table><p>/gi;
$comment =~ s{(?<=<table>)(.+?)(?=</table>)}{ (my $str = $1) =~ s|,|</td><td>|g; $str }eg;
$comment =~ s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<a href="$1" target="_top">$1<\/a>/gi;
$comment = "<p>$comment</p>";
$comment =~ s/<p><\/p>//gi;
667 :
nobodyさん :04/09/03 16:41 ID:XAO5vI6O
リンク集のぺーじより、 ファイルネームがfoo.cgiに関するリンクをすべて洗い出したいとき、 どのように書けばよいのでしょうか? /<A 〜〜foo.cgi.*?>/ig という感じになると思うのですが〜〜の部分がよくわかりません。 ちなみに、href=をつけていないのは、改行がはいっていたり、classなどよけいなタグが入っていることがあるためです。
668 :
667 :04/09/03 16:56 ID:???
ありゃ、自己解決した。 /<A .*HREF=.*foo.cgi.*?>/ig でよろしいようですね。 検索結果がタグになっていたんで、Web表示だとうまく見えていませんでした。
>>667-668 よろしいかどうかは君が相手にしているデータ次第なわけで。
$_ = <<'EOF';
<a class="TRAP" name="href">foo.cgi</a>
<a
href="foo.cgi" class="OK">OK</a>
<a class="OK" href="foo.cgi">OK</a><a href="foo.cgi" class="OK">OK</a>
<a class="OK" href="foo.cgi"
>OK</a>
<a href="fooocgi">TRAP</a>
<a href="bar.cgi?href=foo.cgi">TRAP</a>
<a hreflang="ja" name="fooocgi">TRAP</a>
EOF
print '[', join("]\n[", /<A .*HREF=.*foo.cgi.*?>/ig), "]\n";
print "---\n";
print '[', join("]\n[", /<a\b[^>]*?\shref=[^>?]*?foo\.cgi[^>]*>/ig), "]\n";
まぁ解決したようなのでこれ以上は突っ込まんでおく。
670 :
nobodyさん :04/09/05 17:08 ID:VHVjccb7
phpで第二空白から第三空白までの文字列取得したいんですが、 どのような方法ありますか? aaaaaa aaaaa aaaaaaaaaaaaa aaaa aaaaa |← ここです →|
空白を正規表現で何て書くか分かったら解決な。
正規表現使うより スペースでexplodeしたほうがいいんじゃないの?
>>672 $a = array_slice(explode(" ",$aaaaa), 2, 1);
これでいいですか。
>>673 そこまで分かっているなら試せばよかろう・・・
675 :
nobodyさん :04/09/07 09:23 ID:Z5/Re9xz
<a href="../test/read.php/bbs/1234567890/10" target="_blank">
>>10 </a>
や
<a href="../test/read.php/bbs/0987654321/155" target="_blank">
>>155 </a>
xxxxxxxxxx.datから上記のようなアンカーリンクを
>>10 のようにしたい。
どなたかお願いします。
676 :
nobodyさん :04/09/07 09:24 ID:Z5/Re9xz
?a href="../test/read.php/bbs/1234567890/10" target="_blank">&gt;&gt;10</a> や ?a href="../test/read.php/bbs/0987654321/155" target="_blank">&gt;&gt;155</a> xxxxxxxxxx.datから上記のようなアンカーリンクを>&gt;0のようにしたい。 どなたかお願いします。
>>675 は専用ブラウザのログの減量化を目論んでおり
スレ内アンカーのAタグを削除すればかなり効果があると睨んでいる。
専用ブラウザのためAタグが無くともポップアップするので困らないと思ったのだろう。
そしてアンカーを削除することに成功し、ポップアップしないことを確認し
今度は「それを元に戻す正規表現を教えて下さい」と質問しに来るのだ。
意味がわからん、もっと分かりやすく説明してくれ
簡潔に言えば、「Datからアンカーを除去したい」だろ。
自分でやれよそれくらい。
>>1
アンカー消すのか? いいのか? 2chブラウザはアンカー自動でして無いと思うけど dat直読みだろ。それでいいのか? それなら簡単に消せるだろうが、なんに使うのか
質問です。 「2ch」をアドレスに含まない「http」で始まるリンクにマッチさせることはできますか? オートリンクで挿入されたリンクを対象にしています。 <a [^>]+(!?2ch)[^>]+>http こんな感じかなあとやってみたのですが、出来ませんでした。
684 :
↑ :04/09/09 09:13 ID:???
書き忘れ。 マッチする場所は問いません。
漏れなら、正規表現ひとつで済まさずに、
「
http:// でマッチ」→「2ch にマッチしたら飛ばす」→「処理」、とかするかなあ。
686 :
683 :04/09/09 21:31 ID:???
回答ありがとうございます。 $regexp = <STDIN>; if($log =~ /$regexp/){ perlで上記のような感じになってるんで半分諦めていますが、 できるものなら高度な正規表現を使ってみたいと思った次第なのです。 Perl5.8.2で使える正規表現で何かいい表現はありますか?
>>683 <a (?![^>]*2ch)[^>]+>http
688 :
683 :04/09/10 10:46 ID:???
>>687 希望どおりにマッチしました。
[^>]を中に入れてしまえばよかったんですね。
あと ?! と !? 間違ってましたね。。。
ありがとうございました。
perlですが、
URLにマッチさせる際、正確に(
https://とかにも )マッチするようにしたいのですが、
どうすれば一番簡潔に決められますか?
あと、メアドと電話番号のそれぞれをmailto:とteltoに置き換えたいのですが、どうすればよいか思い浮かびません。
英数@英数とかにすると電話番号@〇〇.ne.jpとかが判別できないので…
よろしくお願いしますm(_ _)m
691 :
???にマッチさせるには? :04/09/14 23:26:21 ID:Kd7HVFLL
「ID:???」(あるいは「???」)にマッチするか判定する正規表現はどう書きますか? $id =~ /ID:???/ とすると、エラーになりました。↓ Nested quantifiers in regex; marked by <-- HERE in m/ID:??? <-- HERE / WindowsXPでActivePerlを使用しています。
>>691 エラーメッセージ見てわかってくれよ・・・
694 :
691 :04/09/14 23:56:41 ID:Kd7HVFLL
正規表現を表示するフォントで見やすいものありますか? 等幅のゴシックかなあ・・・。
698 :
nobodyさん :04/09/22 17:13:59 ID:JesDYCu3
#含む#以降の文字列にマッチさせるにはどうすればよいでしょうか?
あと、
[email protected] みたいなメアドを電話番号と区別するにはどうすればよいでしょうか?
(電話番号はtel:メアドはmailto:にしたいのです)
よろしくお願いしますm(_ _)m
> #含む#以降の文字列にマッチさせるにはどうすればよいでしょうか?
$'
> あと、
[email protected] みたいなメアドを
> 電話番号と区別するにはどうすればよいでしょうか?
$`
このスレって丸投げもOKになった?
>>700 最初から OK だよ。
但し、丸投げとバレた時点でアウト、というルール。
702 :
nobodyさん :04/09/26 07:43:52 ID:FGVvy0I6
hoge12234.jpg みたいなファイルネームの文字列から数字の部分だけを取り出して変数に代入したいんですが、どのようにすればいいんでしょうか?
704 :
nobodyさん :04/09/26 07:57:37 ID:FGVvy0I6
1のどれ見ればいいのですか?
>>704 何故にそこまで指定せにゃならんのだ
ヒント与えてやってんだから自分で探せよ
>>704 > このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
> 質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
>>701 も見てみろ
道場ですから
708 :
nobodyさん :04/09/26 08:04:27 ID:FGVvy0I6
>どう表現したらいいかわからないときに質問をしたりするためのスレッドです。 >質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。 て書いてありますね。 使用言語はperlです。
> 700 名前:nobodyさん 投稿日:2004/09/23(木) 02:56 ID:???
> このスレって丸投げもOKになった?
> 701 名前:nobodyさん 投稿日:2004/09/23(木) 04:38 ID:???
>
>>700 > 最初から OK だよ。
> 但し、丸投げとバレた時点でアウト、というルール。
ちょっとは自分で努力しなさい。
やった結果がうまく出来なかった場合、漏れたちがアドバイスをしよう。
710 :
nobodyさん :04/09/26 08:26:31 ID:FGVvy0I6
考えたのは ファイル名を一文字ずつ分解して配列変数に入れて、一つずつ0-9に該当するか見ていって、該当したらスカラー変数に入れてくっつけていく。 いかにも効率がわるいですが、どうすればいいですか?
何のために正規表現があるのかと
正規表現理解しろよ
713 :
nobodyさん :04/09/26 08:33:31 ID:FGVvy0I6
だから、どう表現していいのかわからないので教えてください。 ということで書き込みしてるわけですが。
ちょっとは自分で努力しなさい。 ってループしてる…
>>1 のリンク先見ろって言ってんのがわからないかなぁ
見た上で
>>710 みたいに考えてるんだったらやり手だね
てか釣りだろ、放置汁
717 :
nobodyさん :04/09/26 08:51:53 ID:FGVvy0I6
>>715 さっきから、誰に向かって、書いてるつもりなの?
こんな質問スレで、自分にだけわかる言葉でレスつけても仕方ないと思うんだけど、
まさしく
>>715 はバカの壁ってやつですね。
やっぱ釣りか さーて釣り宣言まだかな
719 :
nobodyさん :04/09/26 08:57:36 ID:FGVvy0I6
時間が悪かったみたいですね。 残念。
よくある光景だなぁ
正規表現スレで
>>710 な発言してる時点でいつ来ても同じだな
あぼーん
[:graph:]に日本語が該当しないのは仕様ですか? キーワード処理に便利なんですが。
725 :
723 :04/09/28 18:52:44 ID:???
_
数値のみをマッチさせるにはどうしたらいいですか? アルファベット等がどこかに含まれたらマッチしない表現を考えています。 言語はPerlです。 1 10 -10 0.101 100.1 -1000.01 桁数固定なら深く考えることもないのですが、上みたいなマイナスが入ったり小数点が動いたりする可能性を考えたらわからなくなってしまいました。
こんなんどうだろう。 ^-?[0-9]+(\.?[0-9]+|[0-9]*)$
ミス。^-?[0-9]+?(\.[0-9]+|[0-9]*)$ しかし汚ねーなあ。たぶんググればまともなの出てくるよ。
>>729 数字の読み方としてはそれもありだが、正規表現的にはコレで十分
/-?[0-9]+(\.?[0-9]+)?/
8進数マッチするけどいいんだよね
コピペしたらおんなじミスしたw /-?[0-9]+(\.[0-9]+)?/
732 :
nobodyさん :04/10/01 14:19:08 ID:FcpwUMKG
-
aaaaa0.1aaaaa にマッチするよ .5 とかもあるだろ?
なんか初心者が・・・
.5 みたいな表記はステでいいんじゃないの?
>>727 が判断することだけど。
# Perlスレでは確か「n進数や指数はどうよ?」でブームが終わったような。
737 :
733 :04/10/01 15:10:26 ID:???
これは? /^-?\d*(?:\.?\d+)?$/
740 :
733 :04/10/01 15:12:51 ID:???
あっ!やっぱ間違えた。。。空文字にマッチしてしまう。。
放置しろ。
/^-?(0|[1-9]\d*)(\.\d+)?$/
743 :
727 :04/10/01 21:36:43 ID:???
こんばんは。
いくつもありがとうございます。
>>733 .5のような表記は無しです。
試してみたところ
>>729 >>742 が目的にあった動作をするようなので使ってみます。
みんな良く調べて何が違うのが勉強してみます。
正規表現、便利だけど難しいですね
$mes = ereg_replace('([^[:graph:]])([[:alpha:].]{2,})([^[:graph:]])', '\1<a href="keyword.php?q=\2">\2</a>\3', ' ' . $mes); こうやって、URLの可能性がないアルファベットの連続をキーワードとしてリンクさせたいのですが、 これだとスペース置きにキーワードが並んだ場合、どちらかしか replace されません。 MSN Messenger など MSN と Messenger 両方にマッチさせたいのですが、 何か良い方法はありませんでしょうか。
ereg_replace('([[:alpha:].]{2,})((?=[^[:graph:]])|$))', '<a href="keyword.php?q=\1">\1</a>', ' ' . $mes) とりあえず、これでいいと思う。 自分はURLを「http:」で始まる単語としたくて、 (?<!http:)([^\s]{2,}) でやってみたけど、 [^\s]が全部取っちゃうようでうまくいかなかったorz
スマソ。括弧を1つ取るの忘れた。 ×((?=[^[:graph:]])|$)) ○((?=[^[:graph:]])|$)
747 :
744 :04/10/03 04:57:52 ID:???
>>745-746 回答ありがとうございます。
XREA を利用しているので PHP の 4.3.8 を利用しているのですが、
Warning: ereg_replace(): REG_BADRPT が出てしまいました
(いろいろ試したみたところ、 (?= に反応しているようでした)。
preg mb_ereg でも同様のコードを試してみたところ (?= はパスするものの
ereg と違って [:graph:] に日本語がマッチしてしまうようです(こっちが正しいのかな?)。
745のコードを参考に mb_ereg で以下のように書き直してみたところなんとか動作しました。
$mes = mb_ereg_replace('([a-zA-Z.]{2,})((?=[^a-zA-Z0-9<>":;.,/=?+_&@\-])|$)',
'<a href="keyword.php?q=\1">\1</a>', $mes);
よくわからないのですが、[:alpha:]を使うと漢字にマッチしたりして挙動が変になっていました。
うーん、まだまだ勉強が必要です。
eregはPosix拡張、pregはPerl拡張。
正規表現ライブラリがちがううんだよ。PHPマニュアルにも書いてあるが、
例によって
>>1 の正規表現メモんとこ参照すると分かりやすい。
あるシステムの独自タグをあつかっています。
<XXXX Name = Test1 number = 1 value1 = "テスト" value2 = "テスト\"ああ\"" value3="テスト3 \t test">
</XXXX>
という具合に、<XXXX で始まるタグの中にかかれた各属性と値をそれぞれ分割したいのです。最初、Javaプログラムで頑張って書いていましたが、
へたれな自分のプログラムが長くなってしまいバグも所々に…。くせものが属性と値の表記で、valueというキーの値がaaaa としても、
value = aaaa の場合
value = "aaaa" の場合で異なる値にしたい(" がポイント)
value=aaaa や、途中で改行やタブが入る、
value=
aaaa
といった場合もあります。
値の中に、ダブルクォーテーションが入る場合やスペースが入った場合を考慮してJavaプログラムで何とかしようと思ってましたがスパゲッティ状態です。
正規表現でエイヤっと属性名と値で分割させたいのですが、、、
>>1 のサンプルをあさってますが、もし、何か良いモノ知っていましたら教えてください。
751 :
750 :04/10/03 22:21:42 ID:au5XkXk9
ageときます。スマン
>>750 その独自タグの仕様をはっきりさせなければ誰もわからんよ。
「=」の隣にスペースが入っていたりダブルクォートでくくっていたり
いなかったりしてるし。
s/<XXXX[\n\s]+([^>]*)>(.|\n)*<\/XXXX>/$1/g; /(.+?)[\n\s]*=[\n\s]*("(\\"|[^"])+"|[^\s]+)(?:[\n\s]+|$)/; #$1=属性, $2=値 やっとできた・・・。 \"を含める方法とか、勉強になりました。
754 :
753 :04/10/04 02:10:49 ID:???
>>752 そうだ、
>value = aaaa の場合
>value = "aaaa" の場合で異なる値にしたい(" がポイント)
これがどういう結果を望んでいるのか分からないままやってたw
とりあえず、ダブルクォートは残す仕様にしておいたけど。
755 :
750 :04/10/04 07:43:16 ID:3m/jnQ5F
ありがとう〜(;´д`) とりあえず、ためしてみます。。
>>752 にあるように、= の両隣は、スペースが入ったり、入らなかったりします。厳密にはJavaでいうところのホワイトスペースを許可してて、タブとか全角スペースなどもありです。ここは許可しないことを改善してもらうつもりです。
あとで結果報告しますね。ありがとう〜
可能であれば、独自な形式でなくて、 みんなが使ってるフォーマット (XML ね) にしてもらうようにした方が良いと思う。
同感。あとちゃんとtokenizeすればスパゲッティにはならんでしょ、このくらい。
758 :
nobodyさん :04/10/11 11:12:51 ID:ek9GJkPH
質問させてください。 EZwebの絵文字をShift_JISコードに変換する正規表現を書いたつもりなのですが、 ”♪”マークなど一部の絵文字以外の記号にマッチしてしまいます・・・。 (使用言語:PHP 4.3.3) $sjis='[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]'; $text=preg_replace("/((?:$sjis)*)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text); EZweb絵文字だけにマッチさせるようにするには、どうのように直したら良いでしょうか? よろしくお願いします。
(?:$sjis)*のところ、(?:$sjis)*?にしないと全部取っちゃうよ。 そこら辺は大丈夫?
760 :
759 :04/10/12 01:34:03 ID:???
ああ、そうか。 [顔文字]♪ のパターンが良くないのね。 今まで ♪[顔文字] でやってたから気づかなかった。 言い訳だけど、具体的にどういうパターンがダメなのか書いてほしかったな。
761 :
759 :04/10/12 03:17:53 ID:???
[\xf3-\xf7][\x40-\xfc]は絵文字の文字コードってことで良いかな。 sjisの漢字の範囲は[\x81-\x9F\xE0-\xEF][\x40-\x7E\x80-\xFC]じゃない? てなわけで、とりあえずこれ。 /($sjis)([\xf3-\xf7][\x40-\xfc])/e でも、これでは絵文字が連続した場合は変換できない。 やはり、どこが1バイト目か2バイト目か分かるように、 あらかじめ明確に文字を区切らなきゃいけないっぽい。 $text = preg_replace("/($sjis)/", "$1 ", $text); $text = preg_replace("/([\xf3-\xf7][\x40-\xfc])\s/e", "'['.bin2hex(\\1).'] '", $text); こんな感じにすれば確実。もっといい方法あれば良いんだけど。 PHPはやったことないので、細かい間違いはご容赦・・・。
762 :
nobodyさん :04/10/12 14:09:22 ID:oX6FVXHm
正規表現のプロの方々のお力をお借りしたく、質問をさせてください。 perl のマッチングで文章中の全角数字を的確に取得したいのですが、 どうにもこうにも化けてしまいます。 $value = "もしかして762はバカ?"; if($value =~ /([0123456789]*)/){ $match = $1 ; print "$match \n"; #←「・」となってちゃんと取得できてない } 環境: Perl5 (ActivePerl) Win2k 文字コードはSJISで。 どうすればよいのでしょうか・・・
とりあえずこんな感じで対処できたようです・・・見苦しい感じですが $value = "実は764は変態?"; if($value =~ /(\x82[\x4F-\x58]\x82[\x4F-\x58]\x82[\x4F-\x58]|\x82[\x4F-\x58]\x82[\x4F-\x58]|\x82[\x4F-\x58])/){ $match = $1 ; print "$match \n"; } ありがとうございました。
765 :
759 :04/10/12 14:52:38 ID:???
漏れならこうだな。 /((?:\x82[\x4F-\x58])+)/
Shift_JISか。。。
767 :
758 :04/10/12 22:55:44 ID:c8Tbm8wX
>>759 レスありがとうございます。
ちょっと質問がわかりにくくてすみません。
具体例を出すと、以下のような感じです。
$sjis='[\x81-\x9F\xE0-\xEF][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
$text="今日はカレーだ♪るんるん♪";
$text=preg_replace("/((?:$sjis)*?)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text);
print $text; // ← '今日はカレーだーf482]驍驍'
それで、昨日からいろいろ試したところ、
$text=preg_replace("/\G((?:$sjis)*?)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text);
とすることで、ウチの環境では解決しました。
ですが、レン鯖(PHP 4.0.6)ではEZweb絵文字に全くマッチしなくなりました・・・orz
どなたかアドバイスよろしくお願いします。
もしPHP固有の問題であるなら該当スレに移動します。
768 :
758 :04/10/12 23:07:38 ID:???
あ、書き忘れていました orz
>>761 で教えていただいた方法ですが、
$text="今日はカレーだ♪るんるん♪"; // 最後の文字は SJISコードF6CFの絵文字
$text = preg_replace("/($sjis)/", "\\1 ", $text);
$text = preg_replace("/([\xf3-\xf7][\x40-\xfc])\s/e", "'['.bin2hex(\\1).']'", $text);
print $text; // ←'今 日 は カ レ ー だ ♪ る ん る ん ♪ [f6cf]'
となって、文字ごとにスペースが入ってしまい、
そうかと言って
2行目を $text = preg_replace("/($sjis)/", "\\1", $text); に変えたら
'今日はカレーだ♪るんるん♪'(変化無し)という状況です・・・。
ダブルコーテーションの内側にある"を全て\"にエスケープするには、どのように置換すればよろしいでしょうか? $text = '$a = "foo"bar"; $b = "hoge"huga"hage";'; これを'$a = "foo\"bar"; $b = "hoge\"huga\"hage";'にしたいです。
>>769 無理。というか無茶。
「ダブルコーテーションの内側」の文字列や $text 全体に、
何か一定の制限や特性があるならなんとかできなくもないかも知れないけど。
前にスペースある"と後ろにセミコロンがある"を除いたすべての"をエスケープするという方法でもいいのですが。
>>771 Perl なら
$text =~ s{\x20"(.*?)";}{ (my $str = $1) =~ s/"/\\"/g; qq|\x20"$str";| }eg;
もしくは $text =~ s{(?<=\x20")(.*?)(?=";)}{ (my $str = $1) =~ s/"/\\"/g; $str }eg;
772-773 サンクス。とりあえずそれでできましたが、 $text = '$a = "foo";bar";'; みたいなケースも考えるときついですね。 とりあえず、出直してきます。
>>758 1.sjis-winをutf8にする
2.utf8はsjisやeucのような途中マッチが起こらない
3.そのためにはソースもutf8で書いた方がよい
4.utf8でezweb文字列の正規表現を書く
うまくできたらソース晒してね
>>775 4. がうまくできるとは到底思えないのだが。
ていうか単に煽ってるだけか?
別に普通に出来るだろ "\xF6\xCF" -> "\xEE\x93\xB6"
778 :
776 :04/10/14 14:00:36 ID:???
>>777 調べてみたら、
- EZweb の絵文字は Shift_JIS のユーザ定義領域を使っていて、
- Shift_JIS のユーザ定義領域は Unicode との対応が定義されている
なので、ちゃんと相互変換もできるし問題ないということなのかな。
漏れが無知だったようだ。すまん。
550から999までというのはどういう風に書けばよろしいでしょうか?
>>780 レス番の話ではなく、数字の550から999までだけマッチングさせたいのです。
/[5-90][5-90][0-9]/ ???
783 :
782 :04/10/16 20:14:15 ID:???
さっき正規表現勉強し出したアホです、 間違ってたらスマソ。 叩かないで(´・ω・`)
>>782 すみませんが、これですと2桁目に1から4が入るとマッチしなくありません?例えば640とか。
ifでいいじゃん
/(550|551|552|553(ry
788 :
782 :04/10/16 20:28:35 ID:???
/5[5-90][0-9]|[6-90][0-9][0-9]/ こうかな?
>>788 もうおまえはレスしなくていいよ
せめて試してから書けよ
790 :
782 :04/10/16 20:32:35 ID:???
どうやって試すん?(´・ω・`)
>>788 おっ、なるほど、500台とそれ以降に分ければいいのですね!ありがとうございます、1つ賢くなりました(`・ω・´)
>>789 んじゃ喪前が素晴らしく簡潔な奴を披露したら?
794 :
782 :04/10/16 20:39:32 ID:???
/5[5-90][0-9]|[6-9][0-9][0-9]/ 0がひとつ多かったみたい (・∀・)
自演乙
796 :
782 :04/10/16 20:42:46 ID:???
/5[5-9][0-9]|[6-9][0-9][0-9]/ これで最後・・・修行してきまつ
どういう文字列を調べたいのかわからんのによく答えられるな。
/(0|[5-9])[0-9][0-9]/
て、500〜だったな∧||∧ 素直に/[5-9][0-9][0-9]/でいいんちゃうの?
あーもうシバキ倒してください
>797 馬鹿がキタ━━━━━━(゚∀゚)━━━━━━ !! お前な、上のやつよーく見ろ。
>797 => >798 orz このスレ馬鹿しかいないってことでFA?
>>781 if ($n =~ /[1-9]\d{2}/ and 550 <= $&) { マッチ; }
>804 だから?
806 :
779 :04/10/17 00:19:04 ID:???
779ですが、なんかうまくいったようです。みなさんありがとう。
>>804 まだ続けるつもりだったのか?どう見ても終焉の空気が流れてるだろ。食う清め。
808 :
nobodyさん :04/10/18 04:08:53 ID:aBkVRsoL
if($type =〜 /image\/.*/){ はどういう意味ですか?
おそらくcontent-typeかmime-typeかが画像であるかってことじゃない?
いや、'\' じゃなくて '\' だから、parse error・・・・ って、MLとマルチポストするなよ。
〜 これにはつっこまんのか
'\' 俺が悪いのか? - v'\'v そうさ。 o
ML にはちゃんと半角で '~', '\' としてるからわかってそう書いてるんだと思うけど。 ていうか、記号をわざわざ全角で書いてるひとが多いけど、なんでなんでしょ? '&' や '"' と同じような罠にはまるのを避けてるのかな?
>>813 SafariだとASCII or Unicode以外でポストするとき、迷惑にも
? -> \, ? -> 〜 に変換しやがるのです。
なぜか数値参照が化けた..orz バックスラッシュ・チルダが全角バックスラッシュ・全角ウェーブダッシュにされるんです。
そうだったのかあ。 よくプログラミングネタや UNIX のトラブルシュートネタで、 コードやエラーメッセージをそのまま貼れ、って言うことがあるけど、 そういうのがあるとすると厄介ですなあ。
817 :
nobodyさん :04/10/22 17:38:02 ID:xzmN9eHo
perlのサブルーチンを抜き出すような正規表現はどう書けばいいでしょうか? 言語はperlです。 ----------- sub aaa{ 1 2 } \n sub bbb{ 3 } \n \n ------------ この場合 ----------- aaa{ 1 2 } \n と bbb{ 3 } \n \n と 出力したいのですが。 よろしくお願いします。
つまらん
819 :
817 :04/10/23 01:25:36 ID:fB1MfhBi
そう言わず、ヒントだけでも下さい!
$data=~ s/[\x0A\x0D]=\w+.*?=cut//gs; $data=~ s/([\s;{}]*)#[^\x0A\x0D]*/$1/g; $data=~ s/[\x0A\x0D]__(?:END|DATA)__.*//s; @result= $data=~ /\s+sub\s+([a-zA-Z_]\w*\s*(?:\([^)]*\))?\s*\{(?:[^}]|\{[^}]*\})*\})/g; これでどう?
821 :
nobodyさん :04/10/23 13:52:56 ID:fB1MfhBi
$data = "sub aaa{\n1\n2\n}\n\nsub bbb{\n3\n}\n\n\n"; $data=~ s/[\x0A\x0D]=\w+.*?=cut//gs; $data=~ s/([\s;{}]*)#[^\x0A\x0D]*/$1/g; $data=~ s/[\x0A\x0D]__(?:END|DATA)__.*//s; @result= $data=~ /\s+sub\s+([a-zA-Z_]\w*\s*(?:\([^)]*\))?\s*\{(?:[^}]|\{[^}]*\})*\})/g; print @result; を実行しても bbb{ 3 } しか表示できません。
>>821 @result= $data=~ /\s+sub
を以下に変えないといけないようだ。
@result= $data=~ /(?:^|\s|=)sub
「直前が{でも}でもない改行を削除」を性器表現するとどうなりますか?
>>823 実装言語を言わずに回答が欲しいですかそうですか
実装言語はなんでもいいです、でもいいですが、とりあえずはPerlでよろしくです。
>>823 s/([^\^{}])\n/$1/g; # unixの改行
s/([^\^{}])\r\n/$1/g; # windowsの改行
s/([^\^{}])\r/$1/g; # Macの改行
また丸投げかよ
828 :
826 :04/10/29 12:08:28 ID:???
ごめn、まちがった。 s/(^|[^{}])\n/$1/g; だた。
これでもよくね? s/([^{}])\n/$1/g;
>>823 次に質問するときはちょっとでも努力の跡を見せれ。
すまない、そしてありがとう。 829でできました。
828、829とも改行が続く場合に削除できない。
また、829では先頭の改行を削除できない。
直前のパターンを指定する場合、普通は
(?<=PATTERN) や (?<!PATTERN) を使う。
この場合なら、s/(?<![{}])\n//g; とする。
>>829 次に回答するときはちょっとでも試行の跡を見せれ。
>>831 改行が続く場合と、先頭の改行の違いを述べよ。
828が正解。
実際に試してから偉そうなこと言えよな。
>>823-832 # 「直前が { もしくは } の改行のみ残る」なら、これは3行になる筈
my $orig = "\n\nfoo\n\n{\nbar\n}\n\nbaz\n\n";
(my $copy = $orig) =~ s/(^|[^{}])\n/$1/g; # 828
print "[$copy]\n";
# [
# foo
# {
# bar}
# baz]
# … NG.
($copy = $orig) =~ s/(?<![{}])\n//g; # 831
print "[$copy]\n";
# [foo{
# bar}
# baz]
# … OK.
>>832 $_ = <<EOH;
abc
123
EOH
の時、1行目のが「先頭の改行(^\n)」で、
abcの後ろと次の空行の改行が「続く改行(\n\n+)」。
これを
>>828 に通すと
abc
123
となり、
>>831 に通すと
abc123
となる。
{ と } の後ろ以外の改行は消すんだったよな?
恥の上塗りご苦労。
>>832 833-834を踏まえた上で、828が正解である根拠を述べよ。
831が正解。
頭良くなってから偉そうなこと言えよな。
>>833 =
>>834 ばか?変数に入れたものなんか誰も処理しないよ。
変数に書いてる間にエディタで取った方が速いよ。
普通のファイルでやって皆。
--------
foo
{
bar
}
baz
-----------
838 :
825 :04/10/29 16:40:55 ID:???
解決したんでもうやめれ。
>>834 いちいちヒアドキュメントなんか書いてる間に
(あるいはスクリプトに挿入してEOHなんてやってる
間に)エディタの置換でやったほうが速いよ。
>>831 が間違いだと言ってないからな。
ただ、否定の?は遅いからな(プッ
ということで、828が最善解。
841 :
nobodyさん :04/10/29 17:58:19 ID:jREmvBrx
JavaScriptの正規表現使って文字列の先頭と最後の空白を取りたいのですが どう書けばいいのでしょうか? abc dfg hij a を(先頭と最後に3つ空白がある) abc dfg hij a みたいにしたいのです。 教えてください。
>>841 str = " abc dfg hij a ".replace(/^\s+|\s+$/g, "");
分かりやすく、前後のスペースは全角にしたので注意。
.replaceを適用した文字列や変数自身は置換されないので、
結果を受け取る必要あり。
/*str1*/str2/*str3*/ という文字列があって/*〜*/の部分をereg_replaceで空文字列に置き換えようとしたとき ereg_replace("(/\*.*\*/)","","/*str1*/str2/*str3*/"); てやると、先頭の/*と末尾の*/がマッチして全部消えるんだけど test2は残して、test1とtest3だけ消す方法ってある?
test? ( ゚Д゚)
(/\*.*?\*/)
(/\*([^*]|\*+[^/*])*\*+/)
847 :
843 :04/11/02 15:34:08 ID:TAdMjWDI
すまそ…激しく誤植だった。
>ereg_replace("(/\*.*\*/)","","/*str1*/str2/*str3*/");
>てやると、先頭の/*と末尾の*/がマッチして全部消えるんだけど
>str2は残して、str1とstr3だけ消す方法ってある?
でした。
>>846 サソ
(/\*([^*]|\*+[^/*])*\*+/)で、できました〜
ありがとうございました。
あぼーん
perlでEUC以外の文字列を削除するスクリプトを作成しましたが、 エラーが出てしまい困っています。 削除前には他の文字コードの場合にはEUCに変換しています。 $pattern部分はperlメモさんを参考にしています。 my $str = ' aaaa bbb ccc dddd'; my $pattern = '(?:[\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区 . '\x8E[\xE0-\xFE]|' # 半角カタカナ . '\xA2[\xAF-\xB9\xC2-\xC9\xD1-\xDB\xEB-\xF1\xFA-\xFD]|' # 2区 . '\xA3[\XA1-\xAF\xBA-\xC0\xDB-\xE0\xFB-\xFE]|' # 3区 . '\xA4[\xF4-\xFE]|' # 4区 . '\xA5[\xF7-\xFE]|' # 5区 . '\xA6[\xB9-\xC0\xD9-\xFE]|' # 6区 . '\xA7[\xC2-\xD0\xF2-\xFE]|' # 7区 . '\xA8[\xC1-\xFE]|' # 8区 . '\xCF[\xD4-\xFE]|' # 47区 . '\xF4[\xA7-\xFE]|' # 84区 . '\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト文字 $str =~ s/[^$pattern]//g; print $str; どなたかご教授ください。
$pattern = " "; にしないと展開されないんじゃない?
ヒント: Perlメモには、Perl正規表現雑技へ というリンクがある
852 :
849 :04/11/04 15:54:14 ID:???
>>851 いろいろやってみたけど、上手くいきません・・・
文字列に「\」という文字を含めたい場合は、 クォートに関係なく「\\」と書かないとダメ。
>>894 文字クラスに正規表現は使えないのでは。
マッチングパターンを全部逆(EUCコード以外にマッチ)にすれば良いし、
面倒なら、マッチしたEUCコードを取り出すようにすれば良いと思う。
my $pattern = '([\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区
...
my $str2;
$str =~ s/$pattern/$str2 .= $1/geo;
print $str2;
855 :
849 :04/11/05 10:36:41 ID:???
みなさんありがとうございます。 まだテストしてないので試してみます。 本当にありがとうございます。
856 :
nobodyさん :04/11/06 16:21:10 ID:oGen/DNT
test#・・・・の文字列の#以降の文字を任意の文字に置き換えたいです。 トリップみたいなことです。 splitではできたんですが、replaceではできませんでした。 replaceでやる方法はありますでしょうか? よろしくお願いします。
>>856 まずは split でどうやったか示してもらおうか
>>856 に返答がなくてじれったい!
$hoge = "任意の文字";
s/#.*/$hoge/;
でいいよな。
いま、Perlで文字列検索のCGIプログラムを作っているところなのですが、 やっているうちに挙動が変なところがあるのに気づきました。 エラー部分のみを挙げます。 $a="北関"; $b="夢"; if($a =~ /$b/){ print 'OK!'; }else{ print 'NG!'; } これをEUCで記述すると「OK!」と表示、つまり「北関」の中に「夢」がヒットしてしまいます。 Shift_JISでは「NG!」、ヒットしません。 EUCでも正しく動作するように出来ないでしょうか? おそらく、「北」「関」のJISコード(それぞれ4B4C、3458)が「夢」のJISコード(4C34)にかぶることが原因だと思いますが、 これをうまく回避する方法を検索することが出来ませんでした。 ご教授いただければ幸いです。
Perl 5.8以降なら use encoding "euc-jp"; my $a = "\xcb\xcc\xb4\xd8"; my $b = "\xcc\xb4"; print ($a =~ /$b/ ? 'OK!' : 'NG!'); -- String::Multibyteをインストールするなら use String::Multibyte; my $euc = String::Multibyte->new('EUC_JP'); my $a = "\xcb\xcc\xb4\xd8"; my $b = "\xcc\xb4"; print ($euc->index($a, $b) >= 0 ? 'OK!' : 'NG!'); -- 自力で解決 my $a = "\xcb\xcc\xb4\xd8"; my $b = "\xcc\xb4"; my $euc = "^(?:[\x00-\x7e]|\xfe?[\xa0-\xff][\xa0-\xff]|\x8e[\xa0-\xff])*"; print ($a =~ /$euc$b/ ? 'OK!' : 'NG!');
861 :
859 :04/11/14 23:27:07 ID:???
>>860 ご教授、ありがとうございました!
期待したとおりの効果を得ることが出来ました。
感謝いたします。
862 :
nobodyさん :04/11/18 15:33:53 ID:z5HMJmKG
hoge=aaa hoge=aaa&piyo=bbb のような文字列の「aaa」だけを抜き出すには "/hoge=(.+?)/" ↑ここになにを入れればいいのでしょうか?
864 :
862 :04/11/18 18:40:51 ID:???
>>863 レスありがとうございます。
でも、それだと上の行のaaaが抜き出せないです。
ちなみに、最後に改行コードはついていません。
$a = 'hoge=aaa';
$b = 'hoge=aaa&piyo=bbb';
といった感じのデータです。
866 :
862 :04/11/18 19:45:25 ID:???
>>865 ありがとございます。
すごい単純なことを落としていました。
&を除くものを取得すれば良いんでした。
半角の英数記号のみにマッチする正規表現ってどうなりますか? (制御文字はマッチしない) 半角英数のみなら良く見るのですが。
>>867 > 半角英数のみなら良く見るのですが。
じゃあそいつから数を除けばいいだろ
↑読み間違えた。
記号足せばいいんでないかと
すいません。/[:print:]/ でいけました。
872 :
nobodyさん :04/11/20 08:08:33 ID:2uxiNSVv
サクラエディタでPHPのヒアドキュメントの部分を色分けしたいと思っているんですが 正規表現でマッチさせる事とか出来ませんでしょうか? ↓こんな感じの部分を色分けしたいんですが。 print <<< PRINT_HTML <div class="box"> <b>ぬるぽ</b> </div> PRINT_HTML;
873 :
nobodyさん :04/11/21 08:46:27 ID:baqdUP4H
ひあどきゅめんと
874 :
nobodyさん :04/11/21 17:13:13 ID:bKPK+kaX
>>872 ヒアドキュメントが醜いからPerlは結構嫌われているわけで
PHPは変数内でも改行できるという点から
PHPでヒアドキュメントは使わない方がいいと思うけど。
一向に答え出されないな。 自分はサクラエディタとやらは使わないしPerlしかやらないが、 良ければこれを参考にしてくれ。 /<<<s*([a-zA-Z0-9_]+)\n.*?n\1;/ 主な条件は、後方参照ができること(\1が使える)と、 複数行のマッチができること(.に\nを含ませる)。 できれば .*? を (.*?) として、$2で抜き出せれば理想的なんだが。
>>875 874ではないが874に同意だな
ヒアドキュメントははっきり言って見にくい
確かにPHPで使ってるとなぜ使うのか疑問になる
これは人それぞれの慣れと書き方だと思うけどね
んー、スレ違いだね。そういえばこの板って雑談スレ無いね。
$strもEUC-JPでスクリプトもEUC-JP $str =~ s/ //g; ってやっても文字化けするケースと そのまま正常なケースがあるんだがなんでだろ? Perlメモを見て $Zspace = '(?:\xA1\xA1)'; $str =~ s/$Zspace//g; でやっても無理だった
>>879 たまたま、前の文字の最後が \xA1 で後の文字の最初が \xA1 に
マッチするようなケースにあたるとまずくなるよね。
>>880 対処法とかない?
処理のときだけunicodeとか別の文字コードに変換してやった方がいいんかな?
882 :
872 :04/11/22 06:45:50 ID:C8SlIvxc
>>874 >>877 そ、そうなんですか!?
自分的には、変数を直接使用でき、「"」や「'」をエスケープする必要が無く、
HTMLソースをそのままコピペ出来るので、なかなか使いやすいと思っていたのですが…
ちなみにこんな感じで書いてるんですが、邪道なんでしょうか…
http://cyberbooth.fc2web.com/admin.html >>876 ご教示をありがとうございます!
そのコードを参考に色々と自分で試してみます。
まだPHPは5日程前に始めたばかりでして、
どうもまだこの「正規表現」に苦戦していましたので、非常に助かりました。
>>822 変数直接書けるけど
{}で囲ったりしないと後ろの文字が変数名の続きと勘違いしてしまうケースあるし
何よりほとんどのテキストエディタで対応してない
使ったあとの自動インデントが狂うエディタ多数
ヒアドキュメントは確かに便利であるし機能としてあるから邪道ではないと思うが
ttp://www.kauda.jp/~suguru/comp/php/strings.html とか書いてるけどPHPではいらんっぽい
ただPerl出身者はおそらくヒアドキュメント大好き人ばっかだと思う
組んでるときはいいけど作った後に見ると見にくいって感じかな
>>877 の通り、最後は好き嫌いのレベルなんだけどね
お、おれは Perl 出身者だが、ヒアドキュメントが大嫌いで、 Perl なら Template Kit, PHP なら Smarty ばっか使ってるぞ スレ違いだな、すまん
PHP だと地の文 (?) が既にヒアドキュメントみたいなもんな気がするので、 ヒアドキュメントってほんとに必要かなあ、って思ってしまう。
ヒャァァァ
自分でしか使わないものだとヒアドキュメント楽なんだけど、 仕事だと見た目なおすたびにソースいじるの嫌だからテンプレ にしちゃうな...って、正規表現関係ないね。
889 :
872 :04/11/25 16:30:50 ID:???
>>884 >>888 なるほど、ロジック部分と、ビュー部分を分離して管理する
「Smarty」なるツールがあるんですね。
これはかなり便利そうです。
お陰で一つ勉強になりました!
↓さて、それでは次の方、正規表現ネタをどうぞ。
>>879 さんで質問された
EUCでの空白問題で同じように私も壁にぶつかりました
解決法は特に載ってないみたいなんですが
どうしようもないんですか?
/aaa/bbb/ccc/script.cgi ↑のような文字列から最後の"script.cgi"を抜いた文字列(/aaa/bbb/ccc/)に マッチする正規表現ってどうなるでしょうか?
894 :
893 :04/11/27 11:25:14 ID:???
付け加えると、先頭は必ず/。 /の数(パスの深さ)は任意で、最後のスラッシュまでを取り出したい訳です。
$string1 =~/^(\/.*\/)[^\/]*$/; $string2 = $1; print $string;
最後はprint $string2;だった
897 :
893 :04/11/27 12:26:49 ID:???
>>896 ありがとうございます。
ばっちりいけました。
なんで正規表現かけない奴がこのスレにいるのか謎
丸投げ乞食供必死だなw
確かに、このスレは道場だから質問スレじゃないよな。
例えば、
>>895 に対して
m!(.*/)! の方がスマートでいいじゃない?
とか。。。 勝負を挑んでいく感じ?
質問はいいんじゃね?
全然できましぇん全部やってください〜なら初心者スレにでも逝けって感じ
>>1 よみゃディレクトリ取得くらい素人でも出来る
>>902 がスマーティかどうかは置いとくにしても
うむ
>>902 仕切り文字を変えることはどうでも良い気が。
ロジック的に別のマッチパターンを出してく方が挑戦的で良いな。
906 :
nobodyさん :04/12/01 22:05:03 ID:MrbpLm4t
丸投げすいません。 "あ,い,う " ,え,お という文字列のダブルクォーテーションでくくられた部分の半角カンマ(,)を全角カンマ(,)に変換するのはどうしたらいいでしょうか? 変換前:"あ,い,う " ,え,お 変換後:"あ,い,う " ,え,お
907 :
nobodyさん :04/12/01 22:13:31 ID:MrbpLm4t
↑追記です。 上記からダブルクォーテーションの削除も同時に行いたいです。 変換前:" あ,い,う " ,え,お 変換後:あ,い,う,え,お
909 :
nobodyさん :04/12/01 22:22:39 ID:MrbpLm4t
ASPでBASP21というコンポーネントを使ってPerl5互換の 正規表現文字列置換を使います。 ですので、Perl5でお願いします。
>>909 こりゃどうだ。
$dat="\"あ,い,う \" ,え,お";
while($dat=~ /"(.+?)"/){
$ushiro = $';
($mae = $1) =~ s/,/,/g;
$dat = $mae . $ushiro;
}
print $dat, "\n";
丸投げはNGだって言ってるのがわからんか?
913 :
nobodyさん :04/12/02 12:22:09 ID:c/xEYFBx
「aaaaaのように同じ英数字が行の先頭から5つ以上連続して続く」 という正規表現はどう書いたらいいのでしょうか? $a =~ /^[0-9a-zA-Z]{5,}/ とするとaaaaaはもちろんマッチするのですが、abcdeもマッチしてしまいます。 aaaaaもbbbbbもcccccもマッチする、しかしabcdeはマッチしない、とやりたいのです。 ご教授おねがいします
914 :
906 :04/12/02 12:29:03 ID:???
>910 ありがとうございます! でも、今回のものではループは使用できませんでした。すいません。 strData = "あ,い,う" ,え,お strWk = bobj.Replace("s/"".+,.+""/,/kg",strData) という形でやってみたのですが、[「,」,え,お]となってしまいました。 ループを使わないと無理なんですね。すいませんでした。
>>913 /^([0-9a-zA-Z])\1{4,}/
>>915 914じゃないけど、なるほど〜と思ってしまった。
3歳の息子に教えようと思うんだけど、 顔文字みたいな正規表現無いかな?
/(.)(.)/ おぱーい
/(;´Д`)ハァハァ/e
>>918 /J+_+`/
/[^_]人[_^]/
/(?=_=)/
/(V)o\o(V)/ ←バルタン星人
(o|o) ←ウルトラマン
!|!○| ̄|_!|!
正規表現の考え方で育った人間ってどうなるんだろうと
ハァハァしながら作ってみた。
$Strings =~ m(_ _)m;
923 :
のりのみや :04/12/10 07:24:26 ID:xBvxelrR
これこれ、ちとおたずねしたいのじゃが、 テキストファイル内の行をランダムで10行ほどgrepするにはどうすれ良いのじゃ? まろにはとんとわからんでのう… どなたか教えてくれぬか? この通りじゃ
>>923 うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
>>923 まあ、もちついて、
「使用する言語」と「どこまで試したか」と「『何をやりたいか』をもっと具体的に」
を書け。
$value =~ s/[$WwWw]+//g; はうーうまくいかないっす。
927 :
nobodyさん :04/12/16 18:01:44 ID:Ovl4zL1K
abc を含んでいる文字列にはマッチするけど def を含んでいる 文字列にはマッチしないっていう正規表現はどうかけばよいですか?
>>927 Perl なら /^(?:(?!def).)*?abc(?:(?!def).)*\z/
もっと簡単にかけそうな気もするけど。
>>928 ありがとう。
先読みを使うんだろうなとは思ったけど、ドットと組み合わせることは
思いつかなかったです。
糞丸投げ乙
はじめまして。 $aa="123456";として $aaの行末から3、4つ目の数字(この場合34)を変数に格納したいのですが、 正規表現でできますか?
>>932 <?php
$aa = '123456';
preg_match('/(\d\d)\d\d$/', $aa, $match);
echo $match[1];
?>
お前ら死ねよ
自殺は止めろよ。
自殺するくらいなら友達になってくれ
練炭ならあるよ
練炭あるなら、七輪で火起こして、 日本海の冬の幸をたんまり仕入れろ。 築地で仕入れろ。力一杯仕入れろ。 強く、優しく、そして時にはエロく。 そうやってダンディーに仕入れた冬の幸を、 極上の練炭で焼く。やさしく焼く。じっくり焼く。 焼き上がり直前は、一気に火を煽って瞬間の仕上がりに全てを賭ける。 そして、食べる。焼き上がりを食べる。ハフハフしながら食べる。 味わう。素材の持ち味をすべて引き出して食べる。 感じる。素材の持つ力強さとうま味を精一杯感じる。 そして、思いを馳せろ。 自分が食べたものは、かけがえのない命だと。 たとえ単に美味な日本海の冬の幸だろうと、つがいだったものもいれば子供もいたかもしれない。 その命を自分は食してしまったのだと。 そして考えろ。それは命が命をつなぎ止める、地球上の壮大な生態系の一部であることを。 最後に、想え。感謝を。命への感謝を。生きていることへの感謝を。
1. main_1="test " を main_2="test" にする。 つまりjavascriptで一行の文字の末尾のスペースを消すにはどうしたら良いですか? main_2=main_1.replace(/$([ ]*)/,""); では置き換えされません。 2. 全てマッチしたかどうかはどの様に調べたらよいですか? 数字のみの文字列かどうかを調べたい場合 text_1="0a" text_2="0" Reg_1=/[0-9]/ だとtext_2でもマッチしてしまいます。 よろしくお願いします。
>>943 1. 末尾のスペースなら str.replace(/([ ]*)$/, "") じゃない?
2. 先頭から末尾まで全て数字、ということで /^[0-9]+$/ かな?
945 :
943 :04/12/28 18:03:52 ID:???
>>944 ありがとうございます。
^$は難しい……
946 :
nobodyさん :04/12/28 20:23:05 ID:N6XrfelJ
[1234]と[]に囲まれた文字列(中の数字はランダム)を指定して別の文字に 置き換えたいんですが、\[.*\]じゃダメなんですよね。 どうすればいいのでしょうか。ちなみに秀丸を使ってます。
947 :
nobodyさん :04/12/28 20:28:35 ID:gvnNaLCU
>>946 置き換えたい文字を直接指定すればいいだけだろ。
948 :
nobodyさん :05/01/08 18:38:47 ID:1HeEdFHi
指定したHTMLタグを消去するような正規表現を考えてるんだけど、 $str =~ s/<a\s.*?>(.*?)<\/a>/$1/ig; とやると、aタグの一部が消えずに残ってしまったりして困ってます。 あと、.*?は遅いと書いてあるのですが、良い案があれば教えてください
949 :
初心者 :05/01/08 18:52:51 ID:TEnfV1Iz
すみません。PHP4.3.8で、日本語対応の正規表現関数を使おうとしている のですが、うまくいかないので、どなたか教えて頂けますでしょうか。 phpinfo();を書くと、「mbstring」の表に Multibyte (japanese) regex support enabled が表示されるので、日本 語対応の正規表現関数は使えると思うのですが、うまくいかないのです。 <?php print("結果は"); $kekka=ereg("a","abcd",$br); print($br[0]); $kekka=mbereg("b","abcd",$cr); print($cr[0]); print("です"); ?> と書くと、「結果はaです」としか表示されません。「結果はabです」と 表示させたいのですが、どうすれば良いのでしょうか。教えて頂けると 非常に助かります。宜しくお願い致します。
950 :
949 :05/01/08 19:12:39 ID:TEnfV1Iz
すみません。mb_eregにしたら出来ました。PHP4では、mb_eregに すれば出来るんですね。お騒がせしました。。。
952 :
nobodyさん :05/01/08 19:49:31 ID:/O5s2fue
>>948 <A>タグが残ってるという理由じゃないだろうな
タグ間のテキストを抽出しないのなら開始タグ、終了タグを無視して削除するとか。
splitで最初の「:」だけで区切るにはどんな正規表現使えばいい? @data = split(/:/, $str); だと、余分な区切りまで・・・
@data = split(/:/, $str, 2); じゃなかったかな。
性器表現ならこうか @data = $str =~ m/^([^:]*):(.*)/;
>>954 それだね。
s/<\/?a(\s[^>]*)?>//ig
これぐらいでもいいかも。
959 :
nobodyさん :05/01/11 22:33:00 ID:nnjmq/8Z
apacheの httpd.conf弄りたいんですが、
http://*.hoge.jp/ ってどうやって書くんでしょう?書籍とかと数時間格闘しましたが
ぱっさり理解できないのです
とてもスレ違いな悪寒
962 :
nobodyさん :05/01/12 00:48:18 ID:mmvJMOP+
例えば 文字列 = "例えば(その1)や(その2)など"; で( )の中身をとりたいんすけど素直に"/\((.+)\)/"とすると "その1)や(その2"がマッチしてしまいます。 "/\(([^\(]+)\)/"とすると"その1"しかマッチしてくれません。 whileを使ってもうまくいきません。どのようにしたらいいでしょうか。 phpでpreg_matchしています。
"/\(([^)]+)\)/"の間違いじゃないのか そしてpreg_match_allの間違いじゃないのか
つーか"/\((.+?)\)/"でOKか
965 :
962 :05/01/12 01:10:13 ID:???
963さん、964さんありがとうございました。 それでいけました。 使ってるリファレンス本にpreg_match_allがのってなかったので気付きませんでした。 きちんとマニュアル読むようにします。
966 :
959 :05/01/12 13:29:58 ID:o9KFPT4S
レスありがとうございます。
直リンクを防ぐために
httpd.confを次のように弄ったのですが、
上手く動作しませんでした。
サブドメインからのアクセスなら、
サブドメインが何でも、直リンクにはならないように設定したいのです。
自宅サーバー板で正規表現を勉強しろ、とのコメントをいただいて、
悪戦苦闘してるんですが、パッサリ理解できないのでございます。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^
http://*\.hogehoge\.jp/.*$ [NC]
RewriteRule ^(.*)$ - [F]
これは動きませんでした。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^
http://abc\.hogehoge\.jp/.*$ [NC]
RewriteRule ^(.*)$ - [F]
こっちは正しく動作しました。
>>966 正規表現で「 * 」は「直前の文字や正規表現を 0回以上繰り返す」という意味なので、
上の例の「 /* 」の箇所で「 / を 0回以上繰り返す」という意味になっちゃってる。
おそらくそこでやりたいのは「アルファベットを 1回以上繰り返す」だと思うので、
「 !^
http://[a-z]+\.hogehoge\.jp/.*$ 」とすればいいんじゃないかな。
「 + 」は 1回以上繰り返す意味。
969 :
nobodyさん :05/01/12 15:11:10 ID:1iafFrJp
>>999 をサブパターンにとって、リンク全体をそれに置換してやればOK。
つかアンカータグのネストなんかぶっちゃけありえない
971 :
959 :05/01/12 15:19:29 ID:???
>>969 アンカータグ全部要らない、ってことなら、
何も考えずにとにかく <a ...> と </a> を取り除いちゃえばええのでは。
973 :
nobodyさん :05/01/13 20:32:10 ID:rZkv4VMu
abcdefg{__hoge__}hijklmn のような文字列の {__hoge__}とカッコ等が付いたものと、hoge と文字のみの2つを取得したく 以下のようにしてみました。 preg_match_all("/\{__(.+)__\}/","$str","$match"); 一行に {__(.+)__} 形式の文字が一つしかない場合は、上手くいくのですが 二つ以上あるばあい、{__hoge__}{__piyo__} と最大のマッチをしてしまいます。 最小のマッチをさせるには、どうすればいいのでしょうか?
>>973 preg_match_all("/\{__(.+?)__\}/",$str,$match);
975 :
973 :05/01/13 22:43:11 ID:???
>>974 ありがとふ。
やっぱりそれか。出来てたのに見落としてしまっていた orz
976 :
nobodyさん :05/01/15 14:08:23 ID:DsGxQZIF
Perlで、引数としてファイル名を受け取った場合に(例えば ./test.pl)、そのファイルが あるとされるディレクトリ(例でいう./)を調べて、そのファイルがあるかどうかをチェック したいのですが、引数のファイル名最後のスラッシュ以後を消す方法が分かりません。 どういった正規表現を用いれば良いのでしょうか?
>>976 そんなことで正規表現を使ってどうするよ。
「ファイルテスト演算子」でぐぐれ。
>>976 ファイルテスト演算子とは知りませんでした(死
ところで、その引数から、拡張子とディレクトリ構造?(./、../、/)を消して
ファイルの名前だけを知りたいのですが、(./ディレクトリ名/**.txtでいう**)
そういう時は以下みたいに3段かませばいいですか?
$name = "./test/test.txt";
$name =~ s/\A\.|\A\.\.//g;
$name =~ s/\A\/|\A\/\S*\/|\S*\///g;
$name =~ s/\.\S*$//g;
うまく取得できない例外は起きそうでしょうか?
そんなに何行も書くほどのことじゃない。 ファイル名を取り出したいなら $name = "./test/test.txt"; $name =~ /.+\/(.+)/; print $1; test.txt ファイル名のみに置き換えたいなら $name =~ s/.+\/(.+)/$1/; $name = "./test/test.txt"; print $name; test.txt
ふつー File::Basename じゃね?
983 :
980 :05/01/17 11:48:08 ID:???
>>981 正規表現を使うのが適切でないときに「正規表現を使うな」と指摘するのは
"正規表現道場" にふさわしくないと?
984 :
980 :05/01/17 11:53:51 ID:???
>983 ネタごとに補足、でいいのかな
>>983 正規表現じゃない方が楽なら、
そっちを教えてあげるのが
優しいお兄さんとしての役割。
正しい誘導をしてあげていると思います。
じゃ え さ を