トップページ⇒php
1001コメント313KB

正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/11/19 21:42ID:Kst3Nn4S
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

註:& や " を書くときには、&amp " と描いておきましょうね。

Perlメモ
 http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
 http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
 http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
 http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
 http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
 http://www.sixnine.net/regexp/

ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
 http://www2.famille.ne.jp/~akio1998/l_grep.html

過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc2.2ch.net/test/read.cgi/php/1038146241/
0385nobodyさん04/04/21 23:45ID:???
こまった人たちだな
0386 04/04/22 01:57ID:???
>>372
これをPHPで使うにはどう変更すればいいでしょうか?
preg_replace関数を使ってみたのですが、マッチしてくれませんでした。
0387nobodyさん04/04/22 06:41ID:???
>>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);

こんなのでいけた。
0388 04/04/22 15:12ID:???
>>387
うまくいきました。ありがとー
条件を " でくくっててマッチしないのを、 ' に変更したらできました。
0389nobodyさん04/04/28 11:02ID: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 $_;}
に書き換えるとローカルでもサーバー上でもマッチします。なぜでしょうか。
0390nobodyさん04/04/28 13:08ID:???
>>389
「ローカル」と「サーバー」のそれぞれの Perl のバージョンは?
スクリプトと sub/test.htm のそれぞれの文字コードは?
039138904/04/29 02:51ID:SDhjA2B7
>>390
ローカルは5.8.3でサーバーは5.6.1です。
ファイルの文字コードはシフトJISです。
0392nobodyさん04/04/29 02:56ID:AOm5G2zY
プログラムって何が面白いんですか
0393nobodyさん04/04/29 15:34ID:cR/VctPC
適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列<適当な文字列"適当な<br>文字列

のような文字列に対して、imgタグやbrタグだけ残して、他の<>"'&あたりを文字参照に置換
したいんですが、正規表現一撃でいけますか?
0394nobodyさん04/04/29 15:38ID:???
文字参照って、実体参照のこと言ってるのか?
0395nobodyさん04/04/29 15:46ID:???
あ、そうです。
文字参照→文字実体参照

上の例だと

適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列&lt;適当な文字列&quot;適当な<br>文字列

となって欲しいのです
0396nobodyさん04/04/29 16:02ID:???
タグ外で&quot;とかまで変換するヤシは意味わかってないね
0397nobodyさん04/04/29 17:45ID:???
>>396
変換しても害は無いと思うが?
0398nobodyさん04/04/29 18:44ID:???
やれやれ、素人はこれだから
0399nobodyさん04/04/29 19:01ID:???
無能な捨て台詞より有能な捨て解説キボンヌ。
0400nobodyさん04/04/29 19:06ID:???
何も分からない素人が何得意気になってるんだか
その程度のことgoogleで調べろよ
0401nobodyさん04/04/29 19:41ID:???
>>400
プッ 必死だな
書き捨てできると思った炉 え? プゲラワラップッ
0402nobodyさん04/04/29 20:14ID:???
>>395=>>397=>>399=>>401
質問者がこんなレベルじゃこのスレも廃れるわけだw
良く分かったよ
0403nobodyさん04/04/29 20:44ID:???
環境
WindowsXP SP1
ActivePerl 5.8.0.806

正規表現でカタカナの「ゼ」を使うとエラーになってしまいます。
カタカナのゼを含む場合だけ「Unmatched [ in regex;」というエラーで止まってしまい、ほかの文字は大丈夫そうなのですが、対処法ありませんか?
if($temp =~ /ゼ/){
色々;
}
0404nobodyさん04/04/29 20:51ID:???
>>389
そんなバカなと思いつつ確認完了。
なぜだろう。

>>393
できるかも知れないけど、プログラム書いたほうが楽だと思う。

>>396
http://www.w3.org/TR/html401/charset.html#h-5.3.2
0405nobodyさん04/04/29 20:59ID:???
>>403
ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

if($temp =~ /\Qゼ\E/){
0406nobodyさん04/04/29 21:11ID:???
>>405
ありがとうございます。
とりあえず意図した動作をするようになりました。
文字コードのせいで [ に認識されていたんですね。
紹介していただいたURLもブックマークしました。
熟読しますね。
0407nobodyさん04/04/29 23:02ID:???
>>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で書いてみたけど、どこか穴があるかも。
0408nobodyさん04/04/29 23:05ID:???
> $1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
$1 and $1 or $5 and '&lt;' or $6 and '&gt;' or $7 and '&quot;' or $8 and '&amp;'
0409nobodyさん04/04/30 06:46ID:???
>>404
> http://www.w3.org/TR/html401/charset.html#h-5.3.2

なるほど。では、タグ外で"とかまで変換しても害は無いですね。
041039304/05/03 22:32ID:???
>>407ありがと。
しかし内容を理解しようとしてみたが、いまだわかりません。
簡単なhtmlパーサを作っていて、<br>と<img>はインライン要素で、閉じタグもない
から、他の処理がすべて終わった後に置き換えればいいや、というロジックでした。

よく考えたら、文字列中に実体参照で<>が出てきたとしても、&が&amp;に展開
されるので、いちど実体参照に展開してから、すべての処理が終わった後に、

s/&lt;br&gt;/<br>/i
s/&lt;img src=&quot;([^"<>]*)&quot;&gt;/<img src="$1">/i

これでいけました。

いろいろテストしていたので、反応が遅くてすまんです。
041139304/05/03 22:39ID:???
あ、gオプション書き忘れ。s///giね。

それと、お世話になりましたので、ヘタレの作ったhtmlパーサでも見てやろうかという
方がいるならアプロダにでもソースさらします。
0412nobodyさん04/05/03 23:52ID:???
HTMLパーサ?モジュール使ったらあかんの?Perlでしょ?
041339304/05/04 00:09ID:???
>>412
HTML::Parseモジュールの使い方を理解するのが面倒くさかった
&
掲示板の投稿に特定のタグと属性のみ許可する、文法に従わないタグは
その旨マークしてテキストとして表示する、という限定的用途なので、自作
のほうが汎用モジュールより高速だと思った
&
Perlと正規表現の勉強のため

て、感じで。
0414nobodyさん04/05/04 01:54ID:???
ま、車輪の再発明は勉強には有用だが、
実用には不向きなので。
0415nobodyさん04/05/05 18:30ID:???
荒らし板は通報せよ!荒らし狩りだっ!
名無しさん@ゴーゴーゴーゴー! :04/04/14 17:58 ID:WE3vDaf0
 愛と荒らしの掲示板:http://bbs2.otd.co.jp/16588/bbs_plain
が痛い。荒らし依頼すっと、IPアドレス晒される
 依頼か (?)要注意。あまりの痛さにPCを殴りたくなった。

今度は「愛と臨時の掲示板」だってさ!痛すぎる馬鹿だな!
http://bbs10.otd.co.jp/286214/bbs_plain
逃げても無駄だぜ!ゲロ!!つーかお前馬鹿?
卑怯者!逃げるなよ、潜伏中か?

愛と荒らしの掲示板(逃亡先):http://bbs10.otd.co.jp/286214/bbs_plain
0416未承諾広告※ ◆TWARamEjuA 04/05/05 18:55ID:???
Rock54 対象の悪寒。
0417nobodyさん04/05/06 22:18ID:???

/^0?[0-3]?[0-7]{1,2}$/ってどんな意味ですか?
0418nobodyさん04/05/06 23:08ID:???
そのまんまだと思うのだが。
0419nobodyさん04/05/07 00:17ID:???
0377までの8進数
0420nobodyさん04/05/09 00:57ID:R8gJ7rV0
perlをシフトJISで書いてるんですが、「表」とかの文字化けする文字を正規表現でマッチングさせる
にはどうしたらいいでしょうか。

$_ =~ s/表/表\/g;

みたいなことをしたいんですが上記の場合「表」のコードが(95 5C)なのでエラーに
なってしまいます。コードのまま検索かけてもうまくいきませんでしたし

$_ =~ s/95 5C/95 5C 5C/g;

どうすれば「表」という一文字を検索に引っ掛ける事ができるでしょうか?
042142004/05/09 01:29ID:???
色々試していたら、デコードした後に下記のやり方で一応できたのですが、
$_ =~ s/\x95/表\/g;

でも\x95だけでは他の文字にも影響が出てしまいますよね。それで
$_ =~ s/\x95\x5C/g;
としてみましたがこれではマッチしてくれませんでした。どうすればいいでしょうか。
0422nobodyさん04/05/09 01:45ID:???
要は文字化けしないようにエスケープしたいんじゃろ?
出力だけでなく処理もSJISでやってるなら展開しないように工夫すれ
0423nobodyさん04/05/09 02:02ID:???
つか、内部処理はEUCでやれよと
042442004/05/09 02:08ID:???
>>422
はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。

ところで、みんなはクエリは受け取ったらeucに変換して処理をした後、出力時にsjis
に変換しているのですか?

プラットフォームがwinならsjisで、unixならeucに変換して扱うみたいな事を聞いたの
ですが、winでも処理時はeucで出力の時にsjisに変換すれば大丈夫なんでしょうか?

0425nobodyさん04/05/09 02:16ID:???
>>420
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0426nobodyさん04/05/09 02:18ID:???
>>424
HTMLをEUCで書く
PerlCGIをEUCで書く

「表」とかで悩んだことは一度も無し。
ほんとみんな無駄な苦労してるなあと思ってる。


HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
(変換時にはちゃんとincode=sjisを付ける)
042742004/05/09 02:39ID:???
みなさんありがとうございます。今までずっとメモ帳でやってたので、perlもhtml
も自動的にShift_JISで書いてました。何かエディタを使おうと思いますが、色付けもなく
特定文字が太字にもならない、メモ帳と違うのは漢字コード指定で再読み込みができる
っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。


>>426
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
〜最初にeucに変換してから処理する〜の意味が理解できなくて・・・

>>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
解説されてるのでしょうか?

とりあえずお腹が空いたので、お茶漬けでも食べます。
0428nobodyさん04/05/09 03:08ID:???
>>424
> はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
> 内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。
そこでなんで $_ =~ s/表/表\/g; みたいな処理が必要なの?
042942004/05/09 03:48ID:???
Sift_JISでやっているので、「表」という文字は文字化けしてしまうので、相手が入力した文字の
中に表が入っているか検索して、入っていたら表の後ろに\をつけて問題を解決しようと
思ってましたが、sjisでやること自体が間違いみたいですね。

ところでこれはスレ違いな質問なんですが、エディタを使う事にしたのでファイルの関連付けをメモ帳の部分を
全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
どうしてでしょうか。
043042004/05/09 04:05ID:???
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
>(変換時にはちゃんとincode=sjisを付ける)

perlをeucで書く場合(HTMLがShift_JIS指定されてる場合),
print "文字列";
を

$data="文字列";
jcode::convert(\$data,"sjis");
print $data;

としなくてはならないのですか?ってこれも凄いスレ違いですね。こうゆう事はどこのスレに行って
質問すればよいでしょうか。
0431nobodyさん04/05/09 04:30ID:???
>>420
おまいは何もかもすべて他人任せなのか?
ちったぁ自分の脳を使え!
0432nobodyさん04/05/09 04:38ID:???
>>427
> っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
> 太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。
「勝手に」なるんだったら使えないな。素人の言い訳みたいだな。

> ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
> エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
普通ブラウザ側の表示文字コードは自動判別になっている。
自動判別に失敗するのを防ぐためのContent-Typeだ。(IEはContent-Typeは見ないんだったっけ?

> >>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
> 解説されてるのでしょうか?
ちゃんと読んでから何か発言してください。

>>429
> 全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
> どうしてでしょうか。
窓の手入れろ
0433nobodyさん04/05/09 04:40ID:???
>>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
043442004/05/09 05:03ID:???
みなさんすいませんでした。みんながやさしかったのでちょっと調子に乗りすぎました。
色々ためになるアドバイスありがとうございました。

>>433
参考にします!ほんとに感謝です。

それでは失礼します。
0435nobodyさん04/05/11 15:44ID:g6OxcqtT

文字列 a=A b="B" c="C d=D" e に対して、

a=A
b="B"
c="C d=D"
e
が出てくるパターンを教えてくださいませ。

之では駄目みたいなんです → /(\w\=(\w|\"\w\")|(\w))/
0436nobodyさん04/05/11 16:11ID:???
/[a-z]=(?:[A-Z]|"[A-Z](?: [a-z]=[A-Z])*")/
043743604/05/11 16:15ID:???
/[a-z](?:=(?:[A-Z]|"[A-Z](?: [a-z]=[A-Z])*"))?/
043843504/05/11 16:26ID:???
436=437 さんありがとう
0439nobodyさん04/05/24 16:10ID: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です。
0440nobodyさん04/05/25 01:23ID:???
行とタグの二つを認識しつつ、インデントを加えるわけだから、
一行は無理だと思う。
0441未承諾広告※ ◆TWARamEjuA 04/05/25 11:33ID:???
>>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;

眠たいのでごちゃくちゃ、、、スマソ
0442nobodyさん04/05/25 13:24ID:???
$data =~ s/(?:(<pre>[\S\s]*?<\/pre>)|^(.+?)$)/($1)?$1:" $2"/mgei;
044343904/05/25 17:16ID:???
どっちも完璧でした。そしてどっちも私の理解を超えてる・・・。
このコードを眺めて精進します。本当にありがとうございました。
044444004/05/25 19:45ID:???
>>442
なるほどmオプションで解決できますね。


吊ってきます。。
0445nobodyさん04/05/25 20:15ID:???
(´・ω・)
0446nobodyさん04/05/30 02:31ID:d8FeFDnu
PHP4で文字列を正規表現で解析したいと思います。
文字列は 'YYYYMMDD-hhmmss', 'YYYYMMDD' の二種類がマッチして、
前者は YYYYMMDD と hhmmss を、
後者は YYYYMMDD と '' (空) を取得したいと思います。

/(\d{8})-(\d{6})/ では後者で取得できませんでした。

どなたかパターンを教えてくださいませ。
0447nobodyさん04/05/30 02:35ID:???
?を使えると幸せになれるぽいよ
0448nobodyさん04/05/30 02:47ID:???
/(\d{8})(-(\d{6}))?/ で可能でした。ありがとうございます

しかしながら、取得した配列が
  前者が  YYYYMMDD-hhmmss  YYYYMMDD  -hhmmss  hhmmss
  後者が  YYYYMMDD        YYYYMMDD  ''       ''
となってしまいました。
欲しいものは
  YYYYMMDD-hhmmss から取得したのが  YYYYMMDD-hhmmss   YYYYMMDD   hhmmss
  YYYYMMDD      から取得したのが  YYYYMMDD        YYYYMMDD   ''
なのです

文を追加することで簡単に直せるのですが、パターンで解決できましたら、
よろしければ後学の為にも教えてくださいませ。
0449nobodyさん04/05/30 02:50ID:???
()の意味分かると幸せになれるかも。
0450nobodyさん04/05/30 02:50ID:???
>>448
あ?欲しいものが得られているだろ
0451nobodyさん04/05/30 04:49ID:???
>>448
?:を調べると吉。
0452nobodyさん04/06/04 17:11ID:5ERN6S7J
httpd.confのRewriteRuleで、

http://www.example.com/aaa/bbb/ccc/foo/bar/
または
http://www.example.com/aaa/bbb/ccc/foo/bar
の「bar」(つまりスラッシュ区切りの一番最後の文字列)
を、$1に格納して、/index.php?cat=$1 [L] を表示するにはどうしたらよいのでしょうか?

試しに以下のようにやっても、404になってしまいました。
RewriteRule (^/+)/?$ /index.php?cat=$1 [L]

どうすれば良いのでしょうか?
0453こうかな?04/06/04 17:38ID:???
([^/]+)/?$
045445204/06/04 17:49ID:???
>>453
あう、おはずかしい勘違い。
うまくいきました。ありがとうございます。
0455nobodyさん04/06/21 10:56ID: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>
とやっても上手くいきません。(↑笑わないでくださいね。これでも必死なんです・・・)
エディタは秀丸です。どうかよろしくお願いします。
0456nobodyさん04/06/21 13:16ID:???
s|\d{1,4}|<a name="$&">$&</a>|;

きっとこんなんじゃ駄目なんだろうな。
045745504/06/21 13:20ID:???
いろいろぐぐって自己解決いたしました。
[0-9]+\f →<a name="\0">\0</a>
これで出来るようになりました。
今度からもっと調べてから書き込みますね。
スレ汚し失礼しました。
0458nobodyさん04/06/21 13:23ID:???
>>456
すいません、書き込んでいる間にレス下さってたんですね。
ありがとうございます<(. .)>
0459nobodyさん04/06/23 14:38ID:StfIGGBa
'<tag>test1<tag>test2</tag>test3</tag>';

上記の文字列から'test2'の部分だけを取り出したいのですが、
'm /<tag>(.*?)<\/tag>/;' では$1に 'test1<tag>test2' まで入ってしまいます。
'm /<tag>.*?<tag>(.*?)<\/tag>/;' で望みどおりにはなるのですが
エレガントではないように思います。
もっと良い表現はないでしょうか?
0460nobodyさん04/06/23 15:40ID:???
m!.<tag>(.*?)!;
046146004/06/23 15:57ID:???
m!.<tag>(.*?)<!;
0462nobodyさん04/06/23 16:02ID:???
ありがとうございます。>>461
0463nobodyさん04/06/23 18:16ID:???
正規表現2chスレッド (WEBプログラミング) http://pwiki.chbox.com/pukiwiki.php?%C0%B5%B5%AC%C9%BD%B8%BD


(03/11/19) http://snapshot.publog.net/html/php/2003/11/19/214238.html
(02/11/24) http://pc5.2ch.net/php/kako/1038/10381/1038146241.html
(01/07/26) http://pc.2ch.net/php/kako/996/996105815.html
0464nobodyさん04/06/24 22:52ID:???
正規表現掲示板 - Users Group of EmEditor FrontPage

http://cgi25.plala.or.jp/~c6h6/em_wiki/index.php?%C0%B5%B5%AC%C9%BD%B8%BD%B7%C7%BC%A8%C8%C4
0465nobodyさん04/06/25 11:54ID:g4l68VjT
"A1B5A2B6A3B7A4B8"

と言う文字列があったとして、'B'の2個目の後ろの数字とか、
'A'の3個目の数字などの指定はどうしたら良いでしょうか?
Perlでお願いします。

{m回目にマッチ}を使えば良いかと思ったのですが、使いかたがわかりません。
0466nobodyさん04/06/25 12:01ID:g4l68VjT
書き忘れましたが
m /.{3}(\d)/;
とかで'B'の2個目の後ろの数字は取り出せるのですが、
'A'や'B'はhtmlのタグの変わりですので、任意の文字列の
希望するヒット回数の後ろの文字列を取り出したいと思っています。
0467nobodyさん04/06/25 12:15ID:???
>>466
もうちょっと元々何をやりたかったかを具体的に。
0468nobodyさん04/06/25 12:20ID:???
つか、{m}はm回数目にマッチじゃないからね。
/.*B.*B(\d)/
とかやるしかないんじゃないの?
0469nobodyさん04/06/25 12:25ID:g4l68VjT
>>467

htmlの中の2個目のtableタグの中の文字列を取り出したり、
3個目の画像のURLを取り出したりしたいです。

>>468
>つか、{m}はm回数目にマッチじゃないからね。

ご教授ありがとうございます。
0470nobodyさん04/06/25 12:34ID:???
>>469
だから具体的にそのタグを書けと(ry
047146804/06/25 12:36ID:???
回数固定じゃないならこうかな? mとかBのところは適宜入れてやる。
/(?:.*?B){m}(\d)/

……でもこれってHTML解析とは違うような気がする。
0472nobodyさん04/06/25 12:46ID:g4l68VjT
>>470
2個目の<tabe></table>内の10個目の<td></td>の間の文字列を取り出したいのですが、
エレガントな表記方法をお願いします。

>>471
まだまだ初心者なので的確な表現ができなくて申し訳ありません。
自分で調べるとっかかりが欲しかったので、>>465のような質問にしました。
0473nobodyさん04/06/25 13:09ID:???
>>472
具体的という意味がわからないならもう帰っていいよ
0474nobodyさん04/06/25 13:15ID:???
HTML のパースネタは盛り上がる (≒ 荒れる) ねえ。

>>472
そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉。
0475nobodyさん04/06/25 13:31ID:g4l68VjT
>>473

ぐたい-てき 0 【具体的】
一般的なものや観念的なものではなく、個々の事実によっているさま。
「―に例をあげる」

具体的に例をあげているだろうが。
具体的という意味がわからないならもう帰っていいよ

>>474
>そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉

ご教授ありがとうございます。
HTML パースライブラリというのを知っただけでも大きな収穫を得ました。
0476nobodyさん04/06/25 13:42ID:???
なんだよ、やっぱり分かってねぇじゃん。
一番必要なのは日本語の勉強だな。
0477nobodyさん04/06/25 14:10ID:???
>>475
>2個目の<tabe></table>内
<table><td><table/></td></table><table/>
どれが2個目のテーブルですか。

どこが具体的ですか。
脳内ですか。そうですか。
おめでたい頭してますね。カワイそうに。
0478nobodyさん04/06/27 01:16ID:???
>>475
HTMLもわかってないようだからそっちを先に勉強しなさい。
マスターするまで二度とこの板には来ないこと。
047946204/06/29 17:06ID:???
>>463
ごめんなさい。
ereg_replace("\++","+",$word);
で出来ました。
0480nobodyさん04/06/29 20:28ID: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>タグが入っていない場合は、うまくいくのですが…。
0481nobodyさん04/06/29 21:16ID:???
>>480
preg_match("/<a href=(.*?)>(.*?)<\/a>/i",$str,$str_reg);
048248004/06/29 22:01ID:???
>>481
ありがとうございます。できました!
0483nobodyさん04/07/03 16:46ID: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桁のユニークな英数字
を得たい。
よろしくお願いします。
0484nobodyさん04/07/03 16:48ID:???
ser\d{11,15}
SN\d{12}
0485nobodyさん04/07/03 16:59ID:???
>>484
それはかわいそうだろw
■ このスレッドは過去ログ倉庫に格納されています