正規表現道場 ..
[2ch|▼Menu]
116:nobodyさん
07/07/21 13:10:23 7GHIEbSO
PHPで
URLリンク(localhost)
URLリンク(localhost)
URLリンク(test.com)
から
/index.htm
/index.htm
/index.htm
これを出力したい場合

ereg_replace('^https?://(localhost|test.com)' ,'' ,$line);
これでは間違ってるでしょうか?
どなたか教えて下さい。お願いします




117:たけもー
07/07/27 23:18:07 boPeFaxI
PHPです。

就職率−6月(この全角−を)半角に変えたいです。
$a = ereg_replace("[−]", "-", $a);

どうしたらいいでしょうか?

118:nobodyさん
07/07/28 02:31:21 k6nESKD8
ereg_* はマルチバイト文字(全角文字)に対応していない。
mb_ereg_* か preg_* を使うといい。
ただしpreg_*のほうはUTF-8でないとダメだったと思う。


119:たけもー
07/07/28 15:25:04 9w1k0jgB
PHPです。

就職率−6月(この全角−を)半角に変えたいです。
$a = mb_ereg_replace("[−]", "-", $a);

mb_でもだめでした。
どうしたらいいでしょうか?


120:nobodyさん
07/07/28 15:37:30
文字コードとかどうなっとるん?

121:たけもー
07/07/28 16:32:13 9w1k0jgB
文字コードの意味がいまいちわからないんです、テキストディタは
Shift-JISです、

122:名無しさん@そうだ選挙に行こう
07/07/29 01:50:43
PHPは本職じゃないんで良く知らんのだが、PHP自体がデフォルトの
エンコーディングを持っていて、何も指定しないとそれ使うはずだから、
自分がSJIS指定しているつもりでも、そうでない可能性があるってこと。

<?php

echo mb_internal_encoding() . "\n";
echo mb_regex_encoding() . "\n";

$v = "就職率−6月";

mb_regex_encoding("sjis");
echo mb_regex_encoding() . "\n";

$v = mb_ereg_replace("[−]", "-", $v);

echo $v;

こんなんで置換はできたっぽい。
echo しているのは確認のためなんで気にしないでいい。
いずれにしろ mb_regex_encodingで設定しないとダメだった。



123:たけもー
07/07/30 07:40:51 DqqhKvmn
解決いたしましたw
ありがとうございますw

124:たけもー
07/07/30 21:23:25 TD8Lc2Id
解決したはずが・・・

file(http://)で取得した文字列がUTF-8で
UTF-8からsjisにしたら全角マイナスが消えてしまいます。
消えて、改行されています・・・
テストソースですので
mb_ereg_replace
などで置き換えなどは一切してません。

どうしてでしょうか?

125:nobodyさん
07/07/30 23:11:52
原因知ってるけど正規表現に何の関係が

126:nobodyさん
07/07/30 23:54:01
>>125
誘導してやってくれ。(PHPわからん)

127:nobodyさん
07/07/31 01:38:26
ちなみにPerlも同じだから。正規表現は関係ないけどね。

128:nobodyさん
07/07/31 02:17:21
>>126
変換に使っている変換表の問題(なので正規表現の問題じゃない)。
PHPで使っている変換表の素性はわからん。

ぐぐれば「波ダッシュ問題」あたりとならんで見つかると思うけど
どっかのスレで話題になったか、これ?

URLリンク(www.google.com)

ま、がんがって調べてくれ >たけもー


129:nobodyさん
07/07/31 02:24:36
△▲ WebProg 初心者の質問 Part15 ▼▽
スレリンク(php板)

ここ、かなあ。
つーか、元の要件でもこのスレと無関係な str_replace で済むじゃん。

130:nobodyさん
07/08/10 10:21:28 dRcI3VfS
PHPとか全く知らない者なのですが、利用しているBBSのアクセス禁止設定が
正規表現で指定しろと言うんです。勿論正規表現は知らないどころか初めて耳にしました。

a00abcd1.kngwnt01.ap.so-net.ne.jp
123.123.123.123.ap.yournet.ne.jp

前者のIPが何らかのコード1つに変換されるタイプと後者のIPがそのまま出るタイプの
リモホをそれぞれホスト単位で全て「正規表現で指定」するとずばりどういう表記になるのでしょう?

131:nobodyさん
07/08/10 10:29:11
ホスト数が少ないなら列挙すりゃいいんじゃね。
(xxx.example1.jp|xxx.example2.jp|xxx.example3.jp)

132:nobodyさん
07/08/10 13:25:55
ありがとうございます
なるほど…ひとつをピンポイントで指定する場合は
正規表現というのを使わなくても良いという事なのでしょうか…
130の前者だけなら
a00abcd1.kngwnt01.ap.so-net.ne.jp
と、そのまま指定、両方の二つなら
(a00abcd1.kngwnt01.ap.so-net.ne.jp|123.123.123.123.ap.yournet.ne.jp)
となるんでしょうか?

133:nobodyさん
07/08/10 18:16:54
>>132
そのものずばりというのも正規表現の一種だよ。
 a00abcd1.kngwnt01.ap.so-net.ne.jp
というのも正規表現だよ。

あと細かい話を言うと、ピリオド「.」は正規表現において任意の1文字にマッチするメタ文字なので、
ピリオドそのものにマッチさせたい(他の文字にはマッチさせたくない)ときには「.」の代わりに「¥.」を使う。

 a00abcd1¥.kngwnt01¥.ap.so-net¥.ne¥.jp

んでも、この場合はそこまでしなくても問題はなさそうだけどね。

134:nobodyさん
07/08/10 22:15:38
>>133
どうもありがとうございました!大変参考になりました
というかこれを機会にちょっと勉強してみます…
ありがとうございました

135:nobodyさん
07/08/11 01:30:22 2Sf3pkhN
.*

.+
は、完全に同じ意味と考えてもOKですか?
それとも、何か挙動が変わってくることはありえますか?

136:nobodyさん
07/08/11 02:02:02
.+ 1文字以上の任意の文字列
.* 0文字以上の任意の文字列
で最初から違ってましたね
ナハハ…

137: ◆xIL6SyuS5U
07/08/11 02:39:04
a

138:nobodyさん
07/08/14 22:01:22
perl互換のPHP正規表現を勉強し始めたのですが、
3.3以上に該当するの文字列っていうのは、できますでしょうか?
たとえば3.3.4や3.5、9.0などです。
バージョンのようなものです。
やはり数値型でないと難しいのでしょうか。

139:nobodyさん
07/08/14 22:20:59
バージョン番号文字列って数値型にしてもめんどくさいんだよね。
3.10.0 とかね、真面目にやろうとすると、
'.' で split して、上の桁から順に整数値として比較していく、
みたいにやらないといけなかったりして。

140:nobodyさん
07/08/14 23:03:21
>>139
3.3以上っていう決まりだけならどうかけますかね?
3.2があてはまらなければ大丈夫なんですが。

141:nobodyさん
07/08/15 00:01:44
/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:[3-9](?:\.(?:[1-9]\d*|0))*))\z/

142:nobodyさん
07/08/15 00:28:29
3.10 も 3.20 も蹴っていいの?

143:141
07/08/15 01:17:11
うわボケてたアルよ。

/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:(?:[1-9]\d+|[3-9])(?:\.(?:[1-9]\d*|0))*))\z/

144:nobodyさん
07/08/15 22:05:09
>>141
ありがとー!ちょっと見てみます!

>>142
厳密にどういった値があり得るのかも分からないのでそこまで細かくしなくてもいいかなという感じです。
バージョンというか、ユーザーエージェントの後によくついている数値なんですが。


145:nobodyさん
07/09/01 14:16:44 tMwZKBAJ
"*"をWebで調べると「直前の文字0回以上の繰り返しにマッチ」とでてくる。
UNIXで
% ls
a0/ a1/ a2/
のとき
% cd *1
ができるけど*は何の繰り返し???

*は何でもマッチと思っていたのは間違いですか???




146:nobodyさん
07/09/01 15:26:18 epTGamb+
>>145
Perl互換の正規表現では 「*」 は量指定子というものの一種でありまして、 文字、 文字クラス、 グループの直後に付き、
それらに0回以上の繰り返しという意味を持たせるのですが、 正規表現体系が違えば 「*」 が違うことを意味することもありましょう。

147:nobodyさん
07/09/01 15:34:18 epTGamb+
要するに、 正規表現体系が違えば記号の意味も異なるということです。

148:nobodyさん
07/09/01 15:58:40 tMwZKBAJ
>>146
>>147
理解しました。ありがとうございました。

149:nobodyさん
07/09/01 16:54:59 fGUplrri
[2ch公式広告]

一瞬、ハーバーライフと間違えるところだった。。
違うよ、コレは。

ヤフオク関連の最強情報
これを知らずして、ヤフオクで稼ぐことは出来ない。(キッパリ)

URLリンク(2ch2.net)

150:nobodyさん
07/09/02 03:27:50
>>145-148

待てw


151:nobodyさん
07/09/02 03:54:38
>>150
どっちも「それは正規表現じゃねえよ」からグダグダと書いても仕方ないから
待たせなくてよい。

152:nobodyさん
07/09/02 09:50:38 RtluGpKC
192.168.50.5 //OK
192.168.*.* //OK
1000.1000.1000.1000/OK
*.168.50.5 //NG

(\d+)(\.([*(\d+)])){3}
なぜこれでダメ?


153:nobodyさん
07/09/02 11:04:51 tGLa/mAn
>>150-151
正規表現とは文字列の集合を表現する手段でありますから、
ワイルドカードを用いた表現も正規表現の一種であります。

154:nobodyさん
07/09/02 11:20:25 tGLa/mAn
>>152
> (\d+)(\.([*(\d+)])){3}

これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。

> *.168.50.5

これは数字の後、 ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が2回しか繰り返していないので、
先ほどの正規表現にマッチしません。

155:nobodyさん
07/09/02 11:40:01 tGLa/mAn
いや、 待ってください。

> (\d+)(\.([*(\d+)])){3}

だと、

> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5

のすべてにマッチしないはずです。 先ほど

> これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。

と申しましたが、 より正確には、

・ 数字が1つ以上あり、 その後ピリオドと 「*」、 「(」、 数字1つ、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現

でありまして、

> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5

のどれもそのような文字列ではないからです。

156:nobodyさん
07/09/02 12:28:15
\.

157:nobodyさん
07/09/02 13:10:37
どうせ1000がいやんって話なんだろうけど、0から255までの
数字だけがマッチする正規表現ってむずくね?
[0-9]|[12][0-2]?[0-9]|[12]?[34][0-9]|1?[5-9][0-9]|25[0-5]
とか
[0-9]|1[0-9][0-9]?|2[0-4]?[0-9]|[3-9][0-9]|25[0-5]
とか

158:nobodyさん
07/09/02 19:09:05
PHPのPerl互換の正規表現のことで質問です。

次のような文章があったとします。
左のは行番号で、実際の文章中にはありません。

01.<div>
02.text
03.<img>
04.</div>
05.
06.<div>
07.text1
08.text2
09.</div>
10.
11.<div>
12.hoge
13.<img>
14.</div>

ちなみにドットは改行にもマッチするようにしておきます。
これに対してパターン「<div>\n(.+)\n</div>」を最小マッチさせると、
サブパターンで02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれるんですが、

今度は<img>を含むdivだけをマッチさせようとして、「<div>\n(.+\n<img>)\n<div>」で最小マッチをさせると、
02,03と07,08,09,10,11,12,13行目にマッチしてしまいます。
ここで02,03と12,13行目だけにマッチさせるにはどうすればいいのでしょうか?
いろいろ考えたのですがよくわかりません。
どなたかよろしくお願いします。

159:nobodyさん
07/09/02 19:35:53 /HflMMhV

すいません
「02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれる」は
02,03と07,08と12,13の間違いですね

160:nobodyさん
07/09/02 20:08:53
すいません自己解決しました
「<div>\n((?:[^<]|<(?!div))+\n<img>)\n<div>」
これでいけるんですね

161:nobodyさん
07/09/04 05:14:07 p30GnV0e
IPアドレスの正規表現についてやっぱりわからなかったです。
2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
192.168.50.*
192.168.*.*
192.*.*.*
192.168.50.5
1000.1000.1000.1000
これらはすべてOKとします。


162:nobodyさん
07/09/04 09:42:52
>>161
> 2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?

それ先に言えよ!
どういう結果が欲しくて、どう書いたら、どうダメだったか、を具体的に書かんと。
あと、使用してる処理系 (言語やソフトウェア) も。

で、ダメだった正規表現中の [*(\d+)] だけど、
[] は「文字クラス」の正規表現なので、
>>154 の言っているように * ( 数字 + ) のいずれかの「文字」を表す。
「* または数字」を表現したいのであれば、 (\*|\d+) みたいにする。

ので、こうかな。
(\d+)(\.(\*|\d+)){3}

163:nobodyさん
07/09/04 11:21:03 /G1gxUUQ
$` (マッチした文字列の前にあるすべての文字列 )
↑これの使い方を教えてください。言語はPerlです。

164:nobodyさん
07/09/04 11:29:12
>>163

"hoge" =~ /og/;
print join(",", $`, $&, $'), "\n";

↑こんな感じで、この場合は "hoge" に対して "og" がマッチするので、
$`, $&, $' にはそれぞれ "og" の前の "h", "og", "og" の後ろの "e" が格納される。

165:nobodyさん
07/09/04 11:54:02 /G1gxUUQ
>>164
できました。ありがとうございます。

166:nobodyさん
07/09/09 01:04:12
***.com([0-9]もしくは[a-z]の文字が3つ並び、その後に.com)の表記方法を教えてください

167:nobodyさん
07/09/10 21:26:12 lrmAiBXN
>>166
Perl互換の正規表現だと

[0-9a-z]{3}\.com

168:nobodyさん
07/09/12 05:01:53
>>166
\w{3}\.com

169:nobodyさん
07/09/12 11:22:48 DkIOyoGe
>>168
それだと大文字とアンダースコアにもマッチしてしまいます。

170:nobodyさん
07/09/15 15:32:58
<title>ほげほげ</title>
の「ほげほげ」だけを抜き出すのにはどう表記すればいいのでしょうか?

171:nobodyさん
07/09/15 16:48:18
/<title>([^<]+)<\/title>/

172:nobodyさん
07/09/15 17:17:54
>>171
ありがとうございます。

173:nobodyさん
07/09/16 01:35:56 6P4HpCmY
PHP 4.4.7で

hoge
hage
123.txt

の中から 123 を抜き出したいんだけど
"/^(.+?).txt/"
だと当然

hoge
hage
123

がマッチしてしまう。
hoge や hage は任意の文字列で数字が入る可能性もあるのだけど、どうやって抽出したらいいんでしょう。

174:173
07/09/16 02:11:14
マッチした文字列を
strrev()
で逆順にして、今度は
txt. で再度マッチングさせたらとりあえず抽出できました。それをもう一度逆順に。
こんな力業じゃなくて他に方法があるんだろうな……。

175:nobodyさん
07/09/16 02:19:07
^^

176:nobodyさん
07/09/16 03:52:16 vOvwrq99
>>173
前後にデリミタ (「/」) が付いているという事はPerl互換の正規表現関数を使うのでありましょうが、
そうであれば 「.」 はs修飾子がない限り改行にマッチせず、 よって

/^(.+?).txt/



hoge
hage
123.txt

にマッチせず、 したがって

hoge
hage
123

がキャプチャされることはないはずです。

177:nobodyさん
07/09/16 12:32:40
>>173
まあとにかく「マッチしてしまう」とかいうそのコードを晒してみ。

178:nobodyさん
07/09/16 13:59:22 G/qusHMm
$bairitsu = 0.5;という風に$bairitsuに倍率を入れておいて
height:244pt を height:122pt…
height:244pt を height="150"に
といった具合にheight:●●ptやheight="●●"の数値部分を
$bairitsu倍して置換するにはどのようにすればいいですかね?
やろうとしてることは、エクセルで作ってHTMLで保存したものを、
A4サイズの用紙に合うようにHTMLの中にあるサイズ指定を変更したいです。
使用言語はPerlです。よろしくお願いします。


179:173
07/09/16 15:18:36 6P4HpCmY
>>175
それは……ヒント? それともAA?

>>176
失礼。パターンを行頭にしたり行末にしたり改行文字にしたりしてるうちにこんがらかってしまったみたい。
正確には
"/^(.+?).txt/"
でマッチしました。

>>177
コード的にはこんな感じ。

$string = "
hoge
hage
123.txt
";
preg_match("/^(.+?).txt/", $string, $matches);
preg_match("/txt.(.*?)\r/", strrev($matches[0]), $matches);
echo strrev($matches[1]);
// 結果 123

PHPも正規表現も初心者なので変な書き方してるかもだけど……。

180:173
07/09/16 15:27:38
あれ?正確にはも何も最初に書いたのであってるなあ。
なんで「マッチしてしまう」のだろう。

181:nobodyさん
07/09/16 21:38:24 YMkvDZNb
>>179
ああ、 改行コードをCRにしているのですね。
私は

> 「.」 はs修飾子がない限り改行にマッチせず

と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。

普通はスクリプトの内部では文字列の改行コードをLFにするものですが、
何か理由があってCRにしているのですか。

182:nobodyさん
07/09/16 21:48:57 YMkvDZNb
改行コードがLFなら、 m修飾子を使うことにより 「^」 が行頭にマッチするようになるのです。

183:173
07/09/17 00:37:12 /5o1hJUZ
>>181
> と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。

あー、そういう事なのか……。
勉強になります。

> 何か理由があってCRにしているのですか。

実はいつも決まった形式で入稿されるテキスト原稿を決まった形式のHTMLにするだけの仕事が定期で入ってくるんです。
で、毎回毎回コピペにつぐコピペで対応し続けるのもバカくさいので極力自動化しようと思い、PHPでシコシコ書いている次第。
そのプログラムに食わせるお客さんからの入稿原稿を元に作ってたのでCRになってました。
試しに改行コードをLFにしてm修飾子というのを試したらうまくいきました。

なるほどもらった原稿をLFに変換してから使えばいいわけだな。
ありがとーございました!

184:nobodyさん
07/09/17 01:05:58 T68tRmUw
あと1つ指摘しますと、 「.txt」 は 「\.txt」 にすべきですね。

185:173
07/09/17 15:37:44 /5o1hJUZ
> あと1つ指摘しますと、 「.txt」 は 「\.txt」 にすべきですね。

おーなるほど。ありがとうございます。

186:nobodyさん
07/09/18 14:10:13 hpuf++fz
Perlを使って、アフィリエイトのコードやJavaScriptなどを含むコメントタグがなぜか削除できません。

例)
<!--
 コード
  ・
  ・
-->

HTMLタグは s/<.*?>//sg; とすれば削除できますが
なぜかコメントタグだけが残ってしまいます。

コメントタグの開始「<」と終了「>」以外の全ての文字列・記号・改行コードを削除したうえで
s/<>//g; としてみましたが削除することができません。

s/<//g;
s/>//g;
とするとなぜか削除できます。

うまく削除できる方法をご存知の方がいたら教えて下さい。

187:nobodyさん
07/09/18 16:31:55
前処理としてまず s/<!--.*?-->//gs やってみたら?
コメントタグのネストはないだろうし(JavaScriptとかで書き出してたら別だけど・・)

188:nobodyさん
07/09/19 07:54:55
>>187
レスどうもありがとう。
s/<!--.*?-->//gsでもなぜかうまくいかないので
コメント行が現れたらif文でスルーするようにしました。

189:nobodyさん
07/09/19 21:54:47
PHPで正規表現勉強したいんですが、オライリーのふくろう本を読めるでしょうか?
もちろん本人の技量にもよると思いますが、Perlをまったく知らない人間がという解釈でお願いします。
逆に文字列処理をしたいなら、Perlを一からやっとけみたいなのもありです。

190:nobodyさん
07/09/20 00:20:26
>>189
preg_.*系関数ならPerl互換なのでふくろう本の記述が使えると思う。
というかね、ふくろう本のキモは処理系にほとんど依存しない3章と4章で、
それ以外はおまけだ。熟読すべし。

191:nobodyさん
07/09/20 01:57:42
ありがとう。時期を見計らって購入するよ。第三版出るみたいだし

192:nobodyさん
07/09/20 02:42:28
>>191
え、日本語訳出るの?


193:nobodyさん
07/09/20 13:36:17 KlmMrt1+
<TD width="52" height="25" bordercolor="#CCCCCC" valign="middle">
<div align="center">F8FA</div>
</TD>

これの

「F8FA」の部分をpreg_match_all取得したいのですが、
'/<TD .*><div .*>(.*)</div><\/TD>/Ums'

としたのですが、何も取得されません。
どのように表記すれば良いのでしょうか?

194:nobodyさん
07/09/20 13:42:18
/<TD.*?><div.*?>(.*)?</div><\/TD>/

こんな感じ?

195:nobodyさん
07/09/20 13:44:34
試してないけどひとまずパッと見でおかしそうなのを直すとこう?
'/<TD .*>\s*<div .*>(.*)<\/div>\s*<\/TD>/Ums'

196:nobodyさん
07/09/20 17:00:54 SqIRO2nC
'#<TD(?:\s[^>]*)?>\s*<div(?:\s[^>]*)?>(.*)</div>\s*</TD>#ms'

197:nobodyさん
07/09/20 19:58:25
>>193
正規表現は二作出てるから次も一年たった今頃出るかなという予想込みだけど出なかったら出ないのもタイミングかなと。

198:nobodyさん
07/09/20 22:27:42
>>197
日本語でおk

199:nobodyさん
07/09/20 23:09:32
>>198
おk!=日本語

200:nobodyさん
07/09/21 00:43:48
>>191
ソースは?

201:nobodyさん
07/10/02 19:12:55 DsttFroa
PHPの正規表現でユーザーエージェント(IE限定)から
ブラウザバージョンとOSのバージョンを取得するため
以下を作成しました
preg_match('/Mozilla\/.*(MSIE [0-9\.]+);.*(Win[^;\)]+|Mac[^;\)]+).*/i', $lua, $match)
ほぼ間違いなく取得できるのですが唯一以下形式のエージェントのみ
失敗します
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; Yahoo! JAPAN Version Windows 95/NT CD-ROM Edition 1.0.; DigExt)
古いバージョンなので切り捨てても良いとは思うのですが悔しいので
どうすれば正しく取得できるか教えていただけないでしょうか?

上記の正規表現では
MSIE 5.0
Windows 95/NT CD-ROM Edition 1.0.

ほしいのは以下
MSIE 5.0
Windows 98

202:nobodyさん
07/10/02 19:26:37
m#(MSIE\D*[\d\.]+).*?((?:Win|Mac)\D+\d+)#

こんな風でどう?

203:nobodyさん
07/10/02 19:34:02 DsttFroa
>>202
ありがとうございます
おかげ様でできました
比較検証して勉強させてもらいます

204:nobodyさん
07/10/05 23:08:47 ivRnBDKk
質問です

$text = "第41条 [国会]は、[国権]の最高機関であつて、国の唯一の[立法機関]である。";

というテキストで[]でくくられた部分を検索エンジンに飛ばすためのリンクに書き換えるための置換処理を行いたいと考えています。
そこで下のように組んでみたところ

$text =~ s/\[(.*)\]/(<a href=\/http:\/\/foo.bar?query=\"$1\">$1<\/a>)/;

置換の対象となるカッコは行の先頭の[から行の最後の]までが対象となってしまい。上手く機能しません。
この置換処理はどうかけば、いいのでしょうか?


205:nobodyさん
07/10/06 00:06:57
>>204
* や + は、そのままだと最長の文字列でマッチしてしまうので、
最短マッチにするために .*? みたいにすると良い。

あと、繰り返し処理させるために、 g オプション (/.../g みたいな) を付けるよろし。

206:nobodyさん
07/10/06 00:07:46
$text=~ s#\[(.*?)\]#my$r=$1;(my$s=$1)=~s/([^\w ])/'%'.unpack('H2',$1)/ge;
$s=~tr/ /+/;'[<a href="URLリンク(foo.bar?query=)'.$s."\">$r</a>]"#ges;

こんな風でどう?

207:nobodyさん
07/10/06 00:35:40 1+GhnPpX
>>205-206
どちらも上手く機能しました。
奥が深いですね

208:nobodyさん
07/10/06 16:42:21 kTx5Crj6
普通の文字として\を表現するにはどうすればいいですか?
C言語風には、'\\'みたいなやつです

209:nobodyさん
07/10/06 17:45:43
まずはそれを試してみてください

210:nobodyさん
07/10/06 17:50:21 kTx5Crj6
ためしたけど、駄目でした。
\\\ってかいたら一個認識した。
でも\\って連続する文字列は、\\\\\\だと駄目だった。

検索に使ってるエディタは、UnEditorです

211:nobodyさん
07/10/06 18:29:58 C0xnGICK
>>210
「\\\\」 というエスケープシーケンスが解釈されて文字列 「\\」 になり、 文字列 「\\」 が正規表現として解釈されて 「\」 を表すと見た。
その推測からすると、 「\\」 を表すには 「\\\\\\\\」 と打てばよい。

212:nobodyさん
07/10/06 18:34:59 kTx5Crj6
>>211
なんという\
いけました。ありがとうございます。



213:nobodyさん
07/10/07 17:23:56 bdyGFUK8
半角英数文字だと>>205の方法でOKなんすですが、日本語の文字列の場合、エンコードする必要があるので
>>206のようにしなければならないわけですね。今、気がつきましたよ。


214:nobodyさん
07/10/25 15:30:25
phpで、変数にファイル名を入れて処理したいんですが
正規表現で文字制限をかける場合どのように書けばよいでしょうか?

日本語を含まなければ簡単そうですが、、、、

215:nobodyさん
07/10/25 16:34:35
>>214
どゆこと?どんな制限をかけたい?

216:nobodyさん
07/10/27 01:42:21
>>214
つマルチバイト

217:nobodyさん
07/11/05 12:34:21
(愛うえお) [下記kuけこ] saし素せそ [07.07.07]
↑の様にファイルに名前をつけているのですが、これを下のようにリネームしたいのです。
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ

[07.07.07]は日付です。2006/10/15なら[06.10.15]となります。
正規表現でどのように表現したら一括変換できるでしょうか?
どなたか御教示ください。

218:nobodyさん
07/11/05 12:38:12 EztAcqYR
もしスレ違いでしたら案内していただけると助かります

219:nobodyさん
07/11/05 12:47:34
>>217
まずは >>1 の二項目。

220:217
07/11/05 13:09:25 EztAcqYR
>>219
失礼しましたPerl5です。
URLリンク(www.hi-ho.ne.jp)のDLLを使って
Nameryでリネームするつもりです。

的外れなレスだったらすみません


221:nobodyさん
07/11/05 13:59:05
「連続置換・マクロ」にチェックして、こんなんでどう?

s/^(\(.+?\))( \[.+?\] .+?)( \[.+?\])/\1\3\2/

空白の処理とか適当なので、あとは自分で調べていろいろいじってみてちょ。

222:nobodyさん
07/11/05 14:37:50 EztAcqYR
>>221
バッチリできました!ありがとうございました
しかし依頼するカタチを間違えていましたorz
gomennnasaigomennnasaigomennnasai

(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
↑ではなく↓にするにはどうすれば・・・
(愛うえお) [下記kuけこ] [07.07.07] saし素せそ

223:nobodyさん
07/11/05 14:41:33 EztAcqYR
間違えた>>222は無視してください

はぁゆとりすぎて面目ない

224:nobodyさん
07/11/12 05:47:51 Kg6xKnVX
「あいうえおABC+F481ABC+F485かきくけこABC+F7A5さしすせそABC+F3F0ABC+F39EたちつてとABC+F65AなにぬねのABC+F485ABC+F7A5はひふへほABC+F7A5ABC+F39Eまみむめも」

上記の中に、「ABC+16進数x2回」がいくつ含まれているかをPHPの正規表現で表すにはどうかけばよろしいでしょうか?
ご鞭撻よろしくお願いいたします。


225:nobodyさん
07/11/12 10:41:44
>>224
正規表現はいまひとつなのでもっと上手いやり方があるかもしれないが・・・
$input_str = "あいうえおABC+F481ABC+F485かきくけこABC+F7A5さしすせそABC+F3F0ABC+F39EたちつてとABC+F65AなにぬねのABC+F485ABC+F7A5はひふへほABC+F7A5ABC+F39Eまみむめも";
echo preg_match_all("/ABC\+[A-F\d]{4}/",$input_str,$out_ary);
※$out_aryは無いとエラーになるので消さないで


226:nobodyさん
07/11/13 16:45:36 KDxCSN/c
質問です

PHPスクリプトでpreg_match("/^[^@]+@[^.]+\..+/", $superunkoman))
という正規表現があったのですが

^[^@]+   ←最初の文字が@以外の文字の一回以上の繰り返し
@      ←で、@が入り
[^.]     ←この部分が理解できません。

教えてください

227:nobodyさん
07/11/13 17:15:59
>>226
ドット以外の文字列が1つ以上
hoge@.ドメイン.ne.jp
だとか画駄目ってことじゃないの?

228:nobodyさん
07/11/13 17:39:32
>>227
ありがとうございました。そのとおりですね

229:nobodyさん
07/11/13 22:44:37
質問です
phpスクリプトで

$str = ereg_replace(

"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",

"<a href=\"\\1\\2\">\\1\\2</a>",

$str);

この正規表現の(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)の部分とhref=\"\\1\\2\">\\1\\2</a>この部分は
何を表しているのか教えてくれませんか?

230:nobodyさん
07/11/14 12:22:47 E8xVrSo0
あげわすれ

231:nobodyさん
07/11/14 13:37:57
>>230
次回からはまずマニュアル嫁

PHPマニュアルより引用
string ereg_replace ( string pattern, string replacement, string string )
pattern の中に括弧でくくられた部分 文字列が含まれている場合、
replacement の中に \\数字 のような部分文字列を埋め込むことも
できます。この部分は、 「数字」番目の括弧でくくられた部分文字列に
マッチする文字列に 置き換えられます。また、\\0 は文字列全体を
指します。9 個までの部分文字列を使うことができます。括弧は
入れ子になっていても構いません。この場合は開き括弧 '(' が
最大 9 個まで使用可能です。


232:nobodyさん
07/11/23 11:29:24 OIbrK2sw
正規表現を先輩から教えてもらったのですが、
文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出
すことができますが、
文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。

233:nobodyさん
07/11/23 15:30:11
>>5

234:nobodyさん
07/11/23 20:53:35 tvqFA7ba
それは無理ですよ
すべての文字
を取り出す事は

235:nobodyさん
07/11/27 18:05:34 fIXcwnBh
Dカップ以上の25歳以下で抽出したいです
PHP5です

236:nobodyさん
07/11/27 19:15:14
[D-Z]カップ.*(1?[0-9]|2[0-5])歳

237:nobodyさん
07/11/28 13:29:18 fpWBgokp
PHPで正規表現であれやこれやと苦戦してます。
で、正規表現チェッカー
 URLリンク(www.asterworld.com)
 という物をみつけて、こりゃ便利だ!と思ってたのですが
作成した正規表現を preg_replace に設定してもマッチしてくれません。
そんなに方言があるとも思えないのですが...

C#2005の正規表現のようなのですがPerlの正規表現と何がちがうのでしょうか。
C#2005の正規表現をPerlの正規表現に変更するには無理なのでしょうか。
Perlの正規表現を作成するようなソフトはあるのでしょうか?

恐れ入りますがどなたか教えてください 頭がゴチャゴチャしてきて..

238:nobodyさん
07/11/28 15:10:44
もっとかなり基本的なところで勘違いしているんではないかと想像。
まずは、これ以上ないってくらい単純な正規表現で挙動を比較してみて、
そこから順次複雑な正規表現にしていって差異を見てみては。

239:237
07/11/28 15:41:05
ネットで調べても、どの言語の正規表現なのか今ひとつ判らないので
取り合えずアマゾンで本を注文しました。
言語ごとの差が判るようなものがあれば...


240:238
07/11/28 15:48:56
C# なら .NET なんだろうけど、「詳説 正規表現 (第2版)」には差異などが載ってる。
それで、ぱっと見で、基本的なところは Perl と .NET とで大した差は無いと思う。

241:237
07/11/29 13:36:57
「正規表現の達人」って本を手にして今、読んでますが、
お昼食べた後なんで眠くて眠くて フワァァ(/ 0 ̄)~゜
がんばってみます。。

242:nobodyさん
07/12/11 20:35:33
すみません、ヘルプをお願いします。
PHPにて、特定の画像ファイル名を持つ<IMG>タグを抽出するという正規表現を作りたいのですが
上手く行かなくて困っております。

どなたか、お助けください。。。

243:nobodyさん
07/12/12 01:18:37
>>242
もちっとくわしく。src属性以外に属性をもつのかとか。
多分alt属性がついていそうだけど。

preg_match('/<img .*?src=(["¥'])特定のファイル名を表す正規表現¥¥1 .*?>/', src);

とかか。今適当に作ったのでうまく動くかどうかはわからんけど

244:nobodyさん
07/12/19 16:38:31 H15tWjcK
PHPのpreg_replaceなんですが、おたたすけ願います。
特定の文字列で囲まれた文字列を変換しない正規表現を教えてください。
たとえば
preg_replace("/aaa/", "[\1]", "aaa aaa aaa aaa aaa")
だと結果は "[aaa] [aaa] [aaa] [aaa] [aaa]" になりますが
preg_replace("/aaa/", "[\1]", "aaa{{{aaa aaa aaa}}}aaa")
となっていたときに
"[aaa]{{{aaa aaa aaa}}}[aaa]" という結果を取得したいんですが
思うように出来ません。

答えを直接出なくてもいいのでヒントだけでも教えてください。


245:nobodyさん
07/12/19 18:16:44
>>244
後読み表明は量指定子を含められないから、もしpreg_replaceだけでやろうとするなら、
それ以外の部分を食わせておいて置き直すという、やや気持ち悪いことになると思う。

例えばこんなふうに
preg_replace('/(.*?(?:\\Q{{{\\E.*?\\Q}}}\\E.*?)*)(aaa)/', '$1[$2]', "aaa{{{aaa aaa aaa}}}aaa");

分解してから対象の部分だけ処理する等の方法も検討した方が宜しいかと。

246:nobodyさん
07/12/19 18:44:19
大田区ホームページ:職員の不祥事について(処分の公表)
URLリンク(www.city.ota.tokyo.jp)

当区職員が傷害の容疑で逮捕されるという事件につきましては、新聞等での報道やホームーページで公表したところですが、今回、事実関係が明らかになり、以下のとおり懲戒処分を行いましたので公表いたします。
 区民の皆様の信頼を裏切ることとなり、誠に申し訳ありません。あらためて、お詫びいたします。

懲戒処分とは
 職員が一定の義務違反を犯した場合に、公務の規律と秩序を維持することを目的として、その責任を追及するために制裁として行う処分です。
 大田区では懲戒処分の公表基準に基づき、免職処分をした場合や特に区民の関心が大きい事案又は社会的影響が大きい事案について、個別の懲戒処分を公表します。
(懲戒処分の制度の詳細は、大田区人事白書をご参照ください。)

処分発令日
 平成19年12月19日

被処分者氏名
 建築調整課 吉原 幸光

処分の内容
 停職3月

処分の理由
 一般非行関係(法令に違反し、全体の奉仕者たるにふさわしくない非行があったため)

事件の概要
 この職員は、平成19年11月16日(金曜日)、勤務時間終了後、東神奈川駅周辺で飲食した後、帰宅途中のJR京浜東北線川崎―蒲田間の電車内において、乗客男性に全治4週間の怪我を負わせる暴行を働き、傷害の容疑により蒲田警察署に現行犯逮捕されました。
 同職員は、東京簡易裁判所に起訴され、罰金刑を申し渡されています。

247:nobodyさん
07/12/22 08:43:52 KKfYoqPi
すみません、教えてください。
PHPで携帯電話に文字列を表示する際に、
電話番号の部分をteltoリンクにしたいと思い以下のように書きました。
$bodySTR = preg_replace('/([-0123456789]+)/', '<a href="tel:\\1">\\1</a>',$bodySTR);

当然ながらこれだと、「100円」や「〒123-4567」にも反応してしまいます。

そこで、
「03-1234-5678」「090-1234-5678」「03−1234−5678」等にマッチして
「100」や「123-4567」にはマッチしない正規表現は可能でしょうか?


248:nobodyさん
07/12/22 14:06:28
可能です

249:nobodyさん
07/12/22 16:17:35
/(0¥d+-¥d{1,4}-¥d{4})/
でどうよ

250:nobodyさん
07/12/22 17:39:05 6MoMAQ1+
perlの正規表現について質問です。
>>244の方と同じ様なものなのですが

"test <a href="URLリンク(test.jp)<)">[test]"
という形にしたいのですが、どのようにすれば宜しいでしょうか。

一度置換した後、<>タグ内の物は[]を外す方法も考えてはみたのですが、
思うように動作させる事が出来ず。ご教授の程、宜しくお願い致します。


251:nobodyさん
07/12/22 17:52:18
s/(<.*?>|test)/$1?$1:"[$2]"/ges

252:250
07/12/22 18:04:13
>>251
なるほど、どうも有難う御座いました!

253:nobodyさん
08/01/14 12:16:38 6AXqvVgD
時間(13:00:00〜18:00:00)までを正規表現であらわしたいのですが、

1[3-8]:[0-5][0-9]:[0-5][0-9]

という感じに今なっています
誰が見てもわかりやすいしこれでもいいのですが、もっと短い書き方はないものでしょうか?

[0-5][0-9]ここが反復なので、([0-5][0-9]:?){2}とか思いつくのですが、
これだと最後にコロンが入っててもマッチしてしまうので回避できるような書き方はないものかなぁと。

254:nobodyさん
08/01/14 13:51:53
1[3-8](?::[0-5]\d){2}

255:nobodyさん
08/01/15 02:35:00 HyHnFj45

私が小学生の頃、
日本中でノストラダムスの予言が大流行していた。
「1999年の7月に人類は滅亡する!」
という例のお騒がせ終末予言である。

大人になって社会に出て働きだして、
あくせくと忙しく日々を過ごしながら、
1999年は、
ありふれた日常の中であっさりと過ぎていった。
人類は滅ばなかった。

これからここで、
1999年に起こるかもしれなかった人類の壊滅的破局を、
誰にも知られずにこっそりと回避させた人たちがいた...
という設定で、
荒唐無稽なストーリーを描いてみたい。
無論、100%完全なフィクションである。

URLリンク(www5.diary.ne.jp)


256:nobodyさん
08/01/20 11:20:53 TPbCvsXG
/([^>|\+|\s]+)\s*([>|\+]?)\s*/g

この正規表現はどういうことでしょう?
何にマッチさせようとしているのでしょうか。
JavaScriptです。

257:nobodyさん
08/01/20 11:37:26
[]の中で|を使ってOR条件にしてるから書いた人は勘違いしてる

258:nobodyさん
08/01/20 12:50:55 TPbCvsXG
本来なにをしたかったんでしょうか・・・。

259:nobodyさん
08/01/21 16:00:34
PHPの正規表現についての質問です。
2chのdatを各要素毎にキャプチャしたいのですが、

preg_math_all('/((.*)<>)*/', $dat, $match);

と書いて実行すると全体が丸々$matchへ格納されます。
$datへは「 要素1<>要素2<>要素3<>要素4<>要素5 」という形式のデータが入っており要素5は1行目にのみ存在します。
また、各要素は空欄の場合もあります。

初歩的な質問で申し訳ありませんが、よろしくお願いします。

260:nobodyさん
08/01/21 16:01:39
>>258
こちとらお前さんにそれを聞きてえぐらいだよ。

261:nobodyさん
08/01/21 16:03:38
>>259
preg_split で "<>" で配列にばらした方が扱いやすいかも。

262:259
08/01/21 16:15:53
>>261
レスありがとうございます。
確かにphpには要素を分解する為の便利な関数が始めから用意されておりますが、今回はあえてpreg_matchを用いて自身で分解してみたく思います。
自分にはハードルが高い気もするので、手始めに要素5だけを取り出そうと挑戦してみたのですが、

/<>(.+)$/ と書くと要素3<>要素4<>要素5がキャプチャされてしまいます。
やはり当方の正規表現に対する解釈が根本的に間違っているのでしょうか。

連投になり大変申し訳ないのですが、こちらの質問へのみご回答お願いいたします。
>>259は回答を得ましても自分には理解の範疇を超えていると判断しましたので)

263:nobodyさん
08/01/21 19:42:35
[^<>]

264:259
08/01/21 20:27:24
自己解決しました

265:nobodyさん
08/01/21 22:14:14
>>264
どう解決したかくらいは書いてもバチは当たらなくってよ。

266:nobodyさん
08/01/30 11:50:28
perlのgrepで大文字小文字の区別をつけて検索したいです。
@hitlist = grep(/$search_word/i, @search_list);
これを、
@hitlist = grep(/$search_word/$serch_option, @search_list);
($serch_optionにはiやgを事前に設定)
こんな感じにしたいのですが、なんかいい案はありますか?
if文で分岐させるしかないですか?

267:nobodyさん
08/01/30 13:19:43
大小文字区別つけて検索したいならオプションなしで固定でいいでしょ
そこでgオプション使うケースなんてないでしょ

268:nobodyさん
08/01/30 16:28:40
>>266
質問が要領を得てないんだろうけど、
大文字小文字区別つけるかつけないかを切り替えたい、って話ではないかと。

どうすれば良いのかは知らないけど。

269:266
08/01/30 17:01:36
質問の要領が悪くて申し訳ありません。
正規表現のオプションをうまいこと制御できないかなと思いまして。
特に大文字小文字にこだわってるわけではないです。

270:nobodyさん
08/01/31 03:02:38
>>269

大小文字の違いを無視して検索したいときに、パターンの先頭に (?i) 埋めときゃいい。

$pat = ($icase ? "(?i)" : "") . $search_word;
@hitlist = grep /$pat/, @search_list; 

とか

 


271:nobodyさん
08/01/31 15:56:15
proxomitron の正規表現(?)が独自過ぎて、イライラしてくるんだが…

272:nobodyさん
08/02/25 06:25:28 PeKKba69
2008-03 発売(予定)
「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳)
ISBN 978-4-87311-359-3 定価 5,040円


273:nobodyさん
08/02/25 12:38:04
高いね。今は Web で検索すればいいからねぇ…今更そんなの出して売れるのか。

274:nobodyさん
08/03/03 22:23:33 3LUWkmBW
質問です!
PHP 5.2.5で、<br>以外のタグ削除を下記のようにしたところ

do {
$res = str_replace( $result_tag[1], '', $res );
} while ( mb_ereg( '(<[a/][^>]+>)', $res, $result_tag ) );

所々で効いてません。
前のサーバー(PHP 4.4.4)では正常に動いていました。
よろしく御指南ください。

275:nobodyさん
08/03/03 23:15:55
>>274
初心者なので間違ってたらごめんなさい。

strip_tagsで、タグ除去と除外タグ指定が可能なはずです。

276:nobodyさん
08/03/04 02:59:10
>>275
ありがとう!
思い通りになりました。
感謝です。

277:nobodyさん
08/03/05 17:20:52
<a href="URLリンク(jumpres)">>>1</a>
<a href="URLリンク(jumpres)">>>34</a>

スレッドまとめサイトの作成においてアンカーのタグだけ外したいのです
よろしくお願いします

278:nobodyさん
08/03/05 18:23:39
>>277
実装言語が Perl と仮定して (Perl でなければ >>1 を読んでちょ) 、こんなかんじ?
s/<a href=".+?">(.+?)<\/a>/$1/g;

279:nobodyさん
08/03/05 18:52:35
ありがとうございます

280:nobodyさん
08/03/16 09:40:37
PHPの正規表現はバグバグなのでバージョンが違えば動作が変わる上に、難しいパターンになるとすぐ落ちる。

281:nobodyさん
08/03/16 12:34:04
嘘書くなよ。

282:nobodyさん
08/03/16 20:44:54
パターン修飾子にパラメータを渡して、長い文字列を検索するとボロボロ落ちる。常識だよ。

283:nobodyさん
08/03/17 06:09:10
rubyのutf-8判定とかもやばそうだね

284:nobodyさん
08/03/17 08:59:29
pcreのバグだね。
pcre-devのメーリングリストでもよんどいて損はない
URLリンク(www.exim.org)

285:nobodyさん
08/03/19 14:02:11 6LA3ff9b
初めて書き込みさせていただきます。

たとえば文字列が

{if(a)}
あああ
{if(b)}
いいい
{/if}
{/if}

と入れ子があったときはどのようにマッチさせたらいいでしょうか?
PHPでお願いします。

286:nobodyさん
08/03/19 15:32:59
入れ子のマッチは正規表現 (だけ) では無理。と憶えておくと良いことがあるらしい。

287:ジョアン
08/03/28 16:46:01 FsCFbn2K
perl の正規表現をPHPに書き直しているのですが、どうしてもわかりません。
Perlではマッチした前後を $` $' で取得できますがPHPではどうして取得するのでしょうか?


288:nobodyさん
08/03/29 12:12:17
つマニュアル


289:nobodyさん
08/04/12 11:24:34
見 れる

290:nobodyさん
08/04/13 12:03:16
>>287
括弧

291:nobodyさん
08/04/26 13:57:41
age

292:nobodyさん
08/05/04 23:26:54
オライリーの正規表現三版
ほしいけど高いね

293:nobodyさん
08/05/19 20:19:05
phpでhoge("****","*****");の****と*****を[1][2]に入れたいのですがどうすればいいでしょうか?

294:nobodyさん
08/05/23 20:19:21
AGE

295:nobodyさん
08/05/23 20:19:44
AGE

296:nobodyさん
08/06/05 16:44:59 0yepAPED
すみません、FC2ブログのIPブロック条件のために、正規表現を書かなければならなくなりました。
そこで、合っているか教えてくださいー。

IP 61.78.0.0〜61.85.225.225 をブロックしたいのです。

このための表現として、私のつたない知識を使って書いてみると

^61\.[78-85]\.[0-9]+\.[0-9]+

なのかなと思ってますが、あってますか?
どうぞよろしくお願いします。

297:nobodyさん
08/06/05 17:25:51
^61\.(?:7[89]|8[0-5])\.

こうじゃないかな

298:nobodyさん
08/06/05 18:12:26 0yepAPED
>>297
ありがとうございます。

^61\.[78-85]\. のところが、^61\.(?:7[89]|8[0-5])\.
って言う意味ですよね?
なるほど。78-85じゃダメなんですね。ありがとうございます!


299:nobodyさん
08/06/06 03:25:44
これが一番わかりやすい。以上

^61\.(78|79|80|81|82|83|84|85)\..*


300:nobodyさん
08/06/08 17:41:28
PHPで、1ページ分のHTMLのソースが$sに入っているとします。

ここで、この$sから特定のタグだけを削除したいのですが、うまくいきません。

例えば<meta 〜〜〜 />というタグが複数あったとして、これをすべて取り除いたソースを作りたいのです。

$s = eregi_replace("<meta.*?>", "", $s);

とやってみたのですが、$sが空になってしまうのです。

ご指南ください。

301:nobodyさん
08/06/08 22:40:27
2過去ログぐらい嫁という言葉は一見突き放しているように見えて
その質問の答えはこのスレの中にあるよという、ヒントを出しているわけで
まぁ、ツンデレなわけです。

302:nobodyさん
08/06/09 02:40:38
>>300
ereg は最短マッチの芸当はできない。
pregでもつかっとけ。


303:nobodyさん
08/06/09 06:50:27
>>300
'<meta[^>]*>'

304:nobodyさん
08/06/09 23:50:23
300です。

ありがとうございます!

そうなんです、最短マッチが動かないなぁと思っていて、まさかeregが
最短マッチできないとは思いませんでした。

pregでやって解決しました!!


305:nobodyさん
08/06/11 15:58:44
300と似てるかもしれないのですが
<a href="aa">11</a><a href="bb">22</a> こういう文字列があるとき
11と22だけを取り出したいと思い
preg_match_all("/<a(.*)>(.*)<\/a>/", 元, $test)
とやってみたところ、取り出せたのが
href="aa">11</a><a href="bb"と22になってしまいました。
?をつけてみてもうまくいきませんでした。

意図したように取り出したい場合どのように記述すればいいのでしょうか?
使用している言語はphpです。

306:nobodyさん
08/06/11 21:01:33
>>305
色々間違えてる。

まず、Aタグで囲んでる部分だけ抜き出すなら( )のペアは一個でいいはず。
次に?を使ってみたと言うが多分何か勘違いしてる。
300はわかってて最短マッチさせてるが305わかってないだろう?
*を?に置き換えたりしてないか?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5312日前に更新/179 KB
担当:undef