正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
練炭ならあるよ
練炭あるなら、七輪で火起こして、
日本海の冬の幸をたんまり仕入れろ。
築地で仕入れろ。力一杯仕入れろ。
強く、優しく、そして時にはエロく。
そうやってダンディーに仕入れた冬の幸を、
極上の練炭で焼く。やさしく焼く。じっくり焼く。
焼き上がり直前は、一気に火を煽って瞬間の仕上がりに全てを賭ける。
そして、食べる。焼き上がりを食べる。ハフハフしながら食べる。
味わう。素材の持ち味をすべて引き出して食べる。
感じる。素材の持つ力強さとうま味を精一杯感じる。
そして、思いを馳せろ。
自分が食べたものは、かけがえのない命だと。
たとえ単に美味な日本海の冬の幸だろうと、つがいだったものもいれば子供もいたかもしれない。
その命を自分は食してしまったのだと。
そして考えろ。それは命が命をつなぎ止める、地球上の壮大な生態系の一部であることを。
最後に、想え。感謝を。命への感謝を。生きていることへの感謝を。
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 正規表現じゃない方が楽なら、
そっちを教えてあげるのが
優しいお兄さんとしての役割。
正しい誘導をしてあげていると思います。
じゃ
え
さ
を