[過去ログ] 正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g (989レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
965: 962 05/01/12 01:10 ID:??? AAS
963さん、964さんありがとうございました。
それでいけました。
使ってるリファレンス本にpreg_match_allがのってなかったので気付きませんでした。
きちんとマニュアル読むようにします。
966(1): 959 05/01/12 13:29 ID:o9KFPT4S(1) AAS
レスありがとうございます。
直リンクを防ぐために
httpd.confを次のように弄ったのですが、
上手く動作しませんでした。
サブドメインからのアクセスなら、
サブドメインが何でも、直リンクにはならないように設定したいのです。
自宅サーバー板で正規表現を勉強しろ、とのコメントをいただいて、
悪戦苦闘してるんですが、パッサリ理解できないのでございます。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://*\.hogehoge\.jp/.*$ [NC]
省6
967(1): 05/01/12 14:01 ID:??? AAS
> !^http://*\.hogehoge\.jp/.*$
*は直前の文字が0以上繰り返される、という意味なので、上の式がマッチするのは
外部リンク:.hoge...
http:////.hoge . . .
http:///////////////////////////////////////////////.hoge . . .
など。
どんな文字でもマッチさせるには、「.」の0もしくは1以上の繰り返し、と書けばいいんだが、
あらゆるパスにマッチする正規表現はかけてるのに、あらゆるサブドメインにマッチする
正規表現が書けないとはこれいかに。
968(1): 05/01/12 14:04 ID:??? AAS
>>966
正規表現で「 * 」は「直前の文字や正規表現を 0回以上繰り返す」という意味なので、
上の例の「 /* 」の箇所で「 / を 0回以上繰り返す」という意味になっちゃってる。
おそらくそこでやりたいのは「アルファベットを 1回以上繰り返す」だと思うので、
「 !^http://[a-z]+\.hogehoge\.jp/.*$ 」とすればいいんじゃないかな。
「 + 」は 1回以上繰り返す意味。
969(1): 05/01/12 15:11 ID:1iafFrJp(1) AAS
<a name="a193"></a><dt>
<span class="2ch_number">193</span> :
<span class="2ch_name">以下、名無しにかわりましてVIPがお送りします</span>:
<span class="2ch_date">05/01/12 13:43:10 ID:Zzzz4wKL</span></dt>
<dd>
<a href="外部リンク:jumpres"><a href="外部リンク:jumpres">>>183</a></a>
のレスをよく見ていえよ
<a href="外部リンク:jumpres"><a href="外部リンク:jumpres">>>187</a></a>! <br><br></dd>
↑のこういう一行(長いから改行してるけど)から>>999の左右にある<a></a>を外すっていうのをやりたいです。
どうしたらいいですか?
970: 05/01/12 15:18 ID:??? AAS
>>999をサブパターンにとって、リンク全体をそれに置換してやればOK。
つかアンカータグのネストなんかぶっちゃけありえない
971: 959 05/01/12 15:19 ID:??? AAS
>>967-968
ありがとうございます。
教えていただいたhttp://[a-z]+\.hogehoge\.jp/.*$
で上手く行きました。
本当に助かりました。感謝感激です
972: 05/01/12 17:23 ID:??? AAS
>>969
アンカータグ全部要らない、ってことなら、
何も考えずにとにかく <a ...> と </a> を取り除いちゃえばええのでは。
973(2): 05/01/13 20:32 ID:rZkv4VMu(1) AAS
abcdefg{__hoge__}hijklmn
のような文字列の
{__hoge__}とカッコ等が付いたものと、hoge と文字のみの2つを取得したく
以下のようにしてみました。
preg_match_all("/\{__(.+)__\}/","$str","$match");
一行に {__(.+)__} 形式の文字が一つしかない場合は、上手くいくのですが
二つ以上あるばあい、{__hoge__}{__piyo__} と最大のマッチをしてしまいます。
最小のマッチをさせるには、どうすればいいのでしょうか?
974(1): 05/01/13 20:44 ID:??? AAS
>>973
preg_match_all("/\{__(.+?)__\}/",$str,$match);
975: 973 05/01/13 22:43 ID:??? AAS
>>974
ありがとふ。
やっぱりそれか。出来てたのに見落としてしまっていた orz
976(2): 05/01/15 14:08 ID:DsGxQZIF(1) AAS
Perlで、引数としてファイル名を受け取った場合に(例えば ./test.pl)、そのファイルが
あるとされるディレクトリ(例でいう./)を調べて、そのファイルがあるかどうかをチェック
したいのですが、引数のファイル名最後のスラッシュ以後を消す方法が分かりません。
どういった正規表現を用いれば良いのでしょうか?
977: 05/01/15 14:56 ID:??? AAS
>>976
そんなことで正規表現を使ってどうするよ。
「ファイルテスト演算子」でぐぐれ。
978: 05/01/17 03:16 ID:??? AAS
>>976
ファイルテスト演算子とは知りませんでした(死
ところで、その引数から、拡張子とディレクトリ構造?(./、../、/)を消して
ファイルの名前だけを知りたいのですが、(./ディレクトリ名/**.txtでいう**)
そういう時は以下みたいに3段かませばいいですか?
$name = "./test/test.txt";
$name =~ s/\A\.|\A\.\.//g;
$name =~ s/\A\/|\A\/\S*\/|\S*\///g;
$name =~ s/\.\S*$//g;
うまく取得できない例外は起きそうでしょうか?
979: 05/01/17 03:36 ID:??? AAS
そんなに何行も書くほどのことじゃない。
ファイル名を取り出したいなら
$name = "./test/test.txt";
$name =~ /.+\/(.+)/;
print $1;
test.txt
ファイル名のみに置き換えたいなら
$name =~ s/.+\/(.+)/$1/;
$name = "./test/test.txt";
print $name;
省1
980(4): 05/01/17 04:07 ID:??? AAS
ふつー File::Basename じゃね?
981(1): 05/01/17 07:42 ID:??? AAS
>>980
"正規表現道場"
982(1): 05/01/17 09:08 ID:??? AAS
>>980
次スレを
983(2): 980 05/01/17 11:48 ID:??? AAS
>>981
正規表現を使うのが適切でないときに「正規表現を使うな」と指摘するのは
"正規表現道場" にふさわしくないと?
984: 980 05/01/17 11:53 ID:??? AAS
>>982
立てますた。
正規表現道場@2ch Part4
2chスレ:php
上下前次1-新書関写板覧索設栞歴
あと 5 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s