[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/03 06:01 / Filesize : 179 KB / Number-of Response : 640
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現道場



1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

126 名前:nobodyさん mailto:sage [2007/07/30(月) 23:54:01 ID:???]
>>125
誘導してやってくれ。(PHPわからん)

127 名前:nobodyさん mailto:sage [2007/07/31(火) 01:38:26 ID:???]
ちなみにPerlも同じだから。正規表現は関係ないけどね。

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

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

www.google.com/search?sourceid=mozclient&ie=utf-8&oe=utf-8&q=utf8+%E5%A4%89%E6%8F%9B+%E5%85%A8%E8%A7%92%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9+%E5%8C%96%E3%81%91%E3%82%8B

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


129 名前:nobodyさん mailto:sage [2007/07/31(火) 02:24:36 ID:???]
△▲ WebProg 初心者の質問 Part15 ▼▽
pc11.2ch.net/test/read.cgi/php/1169725490/

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

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

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

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

131 名前:nobodyさん mailto:sage [2007/08/10(金) 10:29:11 ID:???]
ホスト数が少ないなら列挙すりゃいいんじゃね。
(xxx.example1.jp|xxx.example2.jp|xxx.example3.jp)

132 名前:nobodyさん mailto:sage [2007/08/10(金) 13:25:55 ID:???]
ありがとうございます
なるほど…ひとつをピンポイントで指定する場合は
正規表現というのを使わなくても良いという事なのでしょうか…
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さん mailto:sage [2007/08/10(金) 18:16:54 ID:???]
>>132
そのものずばりというのも正規表現の一種だよ。
 a00abcd1.kngwnt01.ap.so-net.ne.jp
というのも正規表現だよ。

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

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

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

134 名前:nobodyさん mailto:sage [2007/08/10(金) 22:15:38 ID:???]
>>133
どうもありがとうございました!大変参考になりました
というかこれを機会にちょっと勉強してみます…
ありがとうございました



135 名前:nobodyさん [2007/08/11(土) 01:30:22 ID:2Sf3pkhN]
.*

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

136 名前:nobodyさん mailto:sage [2007/08/11(土) 02:02:02 ID:???]
.+ 1文字以上の任意の文字列
.* 0文字以上の任意の文字列
で最初から違ってましたね
ナハハ…

137 名前: ◆xIL6SyuS5U mailto:sage [2007/08/11(土) 02:39:04 ID:???]
a

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

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

140 名前:nobodyさん mailto:sage [2007/08/14(火) 23:03:21 ID:???]
>>139
3.3以上っていう決まりだけならどうかけますかね?
3.2があてはまらなければ大丈夫なんですが。

141 名前:nobodyさん mailto:sage [2007/08/15(水) 00:01:44 ID:???]
/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:[3-9](?:\.(?:[1-9]\d*|0))*))\z/

142 名前:nobodyさん mailto:sage [2007/08/15(水) 00:28:29 ID:???]
3.10 も 3.20 も蹴っていいの?

143 名前:141 mailto:sage [2007/08/15(水) 01:17:11 ID:???]
うわボケてたアルよ。

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

144 名前:nobodyさん mailto:sage [2007/08/15(水) 22:05:09 ID:???]
>>141
ありがとー!ちょっと見てみます!

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




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

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




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

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

148 名前:nobodyさん [2007/09/01(土) 15:58:40 ID:tMwZKBAJ]
>>146
>>147
理解しました。ありがとうございました。

149 名前:nobodyさん [2007/09/01(土) 16:54:59 ID:fGUplrri]
[2ch公式広告]

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

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

2ch2.net/.l?=jd2e

150 名前:nobodyさん mailto:sage [2007/09/02(日) 03:27:50 ID:???]
>>145-148

待てw


151 名前:nobodyさん mailto:sage [2007/09/02(日) 03:54:38 ID:???]
>>150
どっちも「それは正規表現じゃねえよ」からグダグダと書いても仕方ないから
待たせなくてよい。

152 名前:nobodyさん [2007/09/02(日) 09:50:38 ID:RtluGpKC]
192.168.50.5 //OK
192.168.*.* //OK
1000.1000.1000.1000/OK
*.168.50.5 //NG

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


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

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

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

> *.168.50.5

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



155 名前:nobodyさん [2007/09/02(日) 11:40:01 ID: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さん mailto:sage [2007/09/02(日) 12:28:15 ID:???]
\.

157 名前:nobodyさん mailto:sage [2007/09/02(日) 13:10:37 ID:???]
どうせ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さん mailto:sage [2007/09/02(日) 19:09:05 ID:???]
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さん [2007/09/02(日) 19:35:53 ID:/HflMMhV]

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

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

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


162 名前:nobodyさん mailto:sage [2007/09/04(火) 09:42:52 ID:???]
>>161
> 2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?

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

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

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

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

164 名前:nobodyさん mailto:sage [2007/09/04(火) 11:29:12 ID:???]
>>163

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

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



165 名前:nobodyさん [2007/09/04(火) 11:54:02 ID:/G1gxUUQ]
>>164
できました。ありがとうございます。

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

167 名前:nobodyさん [2007/09/10(月) 21:26:12 ID:lrmAiBXN]
>>166
Perl互換の正規表現だと

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

168 名前:nobodyさん mailto:sage [2007/09/12(水) 05:01:53 ID:???]
>>166
\w{3}\.com

169 名前:nobodyさん [2007/09/12(水) 11:22:48 ID:DkIOyoGe]
>>168
それだと大文字とアンダースコアにもマッチしてしまいます。

170 名前:nobodyさん mailto:sage [2007/09/15(土) 15:32:58 ID:???]
<title>ほげほげ</title>
の「ほげほげ」だけを抜き出すのにはどう表記すればいいのでしょうか?

171 名前:nobodyさん mailto:sage [2007/09/15(土) 16:48:18 ID:???]
/<title>([^<]+)<\/title>/

172 名前:nobodyさん mailto:sage [2007/09/15(土) 17:17:54 ID:???]
>>171
ありがとうございます。

173 名前:nobodyさん [2007/09/16(日) 01:35:56 ID:6P4HpCmY]
PHP 4.4.7で

hoge
hage
123.txt

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

hoge
hage
123

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

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



175 名前:nobodyさん mailto:sage [2007/09/16(日) 02:19:07 ID:???]
^^

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

/^(.+?).txt/



hoge
hage
123.txt

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

hoge
hage
123

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

177 名前:nobodyさん mailto:sage [2007/09/16(日) 12:32:40 ID:???]
>>173
まあとにかく「マッチしてしまう」とかいうそのコードを晒してみ。

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


179 名前:173 [2007/09/16(日) 15:18:36 ID: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 mailto:sage [2007/09/16(日) 15:27:38 ID:???]
あれ?正確にはも何も最初に書いたのであってるなあ。
なんで「マッチしてしまう」のだろう。

181 名前:nobodyさん [2007/09/16(日) 21:38:24 ID:YMkvDZNb]
>>179
ああ、 改行コードをCRにしているのですね。
私は

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

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

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

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

183 名前:173 [2007/09/17(月) 00:37:12 ID:/5o1hJUZ]
>>181
> と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。

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

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

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

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

184 名前:nobodyさん [2007/09/17(月) 01:05:58 ID:T68tRmUw]
あと1つ指摘しますと、 「.txt」 は 「\.txt」 にすべきですね。



185 名前:173 [2007/09/17(月) 15:37:44 ID:/5o1hJUZ]
> あと1つ指摘しますと、 「.txt」 は 「\.txt」 にすべきですね。

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

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

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

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

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

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

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

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

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

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

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

191 名前:nobodyさん mailto:sage [2007/09/20(木) 01:57:42 ID:???]
ありがとう。時期を見計らって購入するよ。第三版出るみたいだし

192 名前:nobodyさん mailto:sage [2007/09/20(木) 02:42:28 ID:???]
>>191
え、日本語訳出るの?


193 名前:nobodyさん [2007/09/20(木) 13:36:17 ID: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さん mailto:sage [2007/09/20(木) 13:42:18 ID:???]
/<TD.*?><div.*?>(.*)?</div><\/TD>/

こんな感じ?



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

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

197 名前:nobodyさん mailto:sage [2007/09/20(木) 19:58:25 ID:???]
>>193
正規表現は二作出てるから次も一年たった今頃出るかなという予想込みだけど出なかったら出ないのもタイミングかなと。

198 名前:nobodyさん mailto:sage [2007/09/20(木) 22:27:42 ID:???]
>>197
日本語でおk

199 名前:nobodyさん mailto:sage [2007/09/20(木) 23:09:32 ID:???]
>>198
おk!=日本語

200 名前:nobodyさん mailto:sage [2007/09/21(金) 00:43:48 ID:???]
>>191
ソースは?

201 名前:nobodyさん [2007/10/02(火) 19:12:55 ID: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さん mailto:sage [2007/10/02(火) 19:26:37 ID:???]
m#(MSIE\D*[\d\.]+).*?((?:Win|Mac)\D+\d+)#

こんな風でどう?

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

204 名前:nobodyさん [2007/10/05(金) 23:08:47 ID:ivRnBDKk]
質問です

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

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

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

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




205 名前:nobodyさん mailto:sage [2007/10/06(土) 00:06:57 ID:???]
>>204
* や + は、そのままだと最長の文字列でマッチしてしまうので、
最短マッチにするために .*? みたいにすると良い。

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

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

こんな風でどう?

207 名前:nobodyさん [2007/10/06(土) 00:35:40 ID:1+GhnPpX]
>>205-206
どちらも上手く機能しました。
奥が深いですね

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

209 名前:nobodyさん mailto:sage [2007/10/06(土) 17:45:43 ID:???]
まずはそれを試してみてください

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

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

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

212 名前:nobodyさん [2007/10/06(土) 18:34:59 ID:kTx5Crj6]
>>211
なんという\
いけました。ありがとうございます。



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


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

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



215 名前:nobodyさん mailto:sage [2007/10/25(木) 16:34:35 ID:???]
>>214
どゆこと?どんな制限をかけたい?

216 名前:nobodyさん mailto:sage [2007/10/27(土) 01:42:21 ID:???]
>>214
つマルチバイト

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

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

218 名前:nobodyさん [2007/11/05(月) 12:38:12 ID:EztAcqYR]
もしスレ違いでしたら案内していただけると助かります

219 名前:nobodyさん mailto:sage [2007/11/05(月) 12:47:34 ID:???]
>>217
まずは >>1 の二項目。

220 名前:217 [2007/11/05(月) 13:09:25 ID:EztAcqYR]
>>219
失礼しましたPerl5です。
www.hi-ho.ne.jp/~babaq/bregexp.htmlのDLLを使って
Nameryでリネームするつもりです。

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


221 名前:nobodyさん mailto:sage [2007/11/05(月) 13:59:05 ID:???]
「連続置換・マクロ」にチェックして、こんなんでどう?

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

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

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

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

223 名前:nobodyさん [2007/11/05(月) 14:41:33 ID:EztAcqYR]
間違えた>>222は無視してください

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

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

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




225 名前:nobodyさん mailto:sage [2007/11/12(月) 10:41:44 ID:???]
>>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さん [2007/11/13(火) 16:45:36 ID:KDxCSN/c]
質問です

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

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

教えてください

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

228 名前:nobodyさん mailto:sage [2007/11/13(火) 17:39:32 ID:???]
>>227
ありがとうございました。そのとおりですね

229 名前:nobodyさん mailto:sage [2007/11/13(火) 22:44:37 ID:???]
質問です
phpスクリプトで

$str = ereg_replace(

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

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

$str);

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

230 名前:nobodyさん [2007/11/14(水) 12:22:47 ID:E8xVrSo0]
あげわすれ

231 名前:nobodyさん mailto:sage [2007/11/14(水) 13:37:57 ID:???]
>>230
次回からはまずマニュアル嫁

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


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

233 名前:nobodyさん mailto:sage [2007/11/23(金) 15:30:11 ID:???]
>>5

234 名前:nobodyさん [2007/11/23(金) 20:53:35 ID:tvqFA7ba]
それは無理ですよ
すべての文字
を取り出す事は



235 名前:nobodyさん [2007/11/27(火) 18:05:34 ID:fIXcwnBh]
Dカップ以上の25歳以下で抽出したいです
PHP5です

236 名前:nobodyさん mailto:sage [2007/11/27(火) 19:15:14 ID:???]
[D-Z]カップ.*(1?[0-9]|2[0-5])歳

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

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

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

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

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


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

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

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

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

243 名前:nobodyさん mailto:sage [2007/12/12(水) 01:18:37 ID:???]
>>242
もちっとくわしく。src属性以外に属性をもつのかとか。
多分alt属性がついていそうだけど。

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

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

244 名前:nobodyさん [2007/12/19(水) 16:38:31 ID: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さん mailto:sage [2007/12/19(水) 18:16:44 ID:???]
>>244
後読み表明は量指定子を含められないから、もしpreg_replaceだけでやろうとするなら、
それ以外の部分を食わせておいて置き直すという、やや気持ち悪いことになると思う。

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

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

246 名前:nobodyさん mailto:sage [2007/12/19(水) 18:44:19 ID:???]
大田区ホームページ:職員の不祥事について(処分の公表)
www.city.ota.tokyo.jp/oshirase/mokutekibetsu/other/fusyouji_syobun/index.html

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

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

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

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

処分の内容
 停職3月

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

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

247 名前:nobodyさん [2007/12/22(土) 08:43:52 ID: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さん mailto:sage [2007/12/22(土) 14:06:28 ID:???]
可能です

249 名前:nobodyさん mailto:sage [2007/12/22(土) 16:17:35 ID:???]
/(0¥d+-¥d{1,4}-¥d{4})/
でどうよ

250 名前:nobodyさん [2007/12/22(土) 17:39:05 ID:6MoMAQ1+]
perlの正規表現について質問です。
>>244の方と同じ様なものなのですが

"test <a href="test.jp"> test"
の様な文字列があった場合、タグ内のtestは変更せずに
"[test]<a href="test.jp">[test]"
という形にしたいのですが、どのようにすれば宜しいでしょうか。

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


251 名前:nobodyさん mailto:sage [2007/12/22(土) 17:52:18 ID:???]
s/(<.*?>|test)/$1?$1:"[$2]"/ges

252 名前:250 mailto:sage [2007/12/22(土) 18:04:13 ID:???]
>>251
なるほど、どうも有難う御座いました!

253 名前:nobodyさん [2008/01/14(月) 12:16:38 ID: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さん mailto:sage [2008/01/14(月) 13:51:53 ID:???]
1[3-8](?::[0-5]\d){2}



255 名前:nobodyさん [2008/01/15(火) 02:35:00 ID:HyHnFj45]

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

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

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

www5.diary.ne.jp/logdisp.cgi?user=532063&log=200705


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

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

257 名前:nobodyさん mailto:sage [2008/01/20(日) 11:37:26 ID:???]
[]の中で|を使ってOR条件にしてるから書いた人は勘違いしてる

258 名前:nobodyさん [2008/01/20(日) 12:50:55 ID:TPbCvsXG]
本来なにをしたかったんでしょうか・・・。

259 名前:nobodyさん mailto:sage [2008/01/21(月) 16:00:34 ID:???]
PHPの正規表現についての質問です。
2chのdatを各要素毎にキャプチャしたいのですが、

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

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

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

260 名前:nobodyさん mailto:sage [2008/01/21(月) 16:01:39 ID:???]
>>258
こちとらお前さんにそれを聞きてえぐらいだよ。

261 名前:nobodyさん mailto:sage [2008/01/21(月) 16:03:38 ID:???]
>>259
preg_split で "<>" で配列にばらした方が扱いやすいかも。

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

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

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

263 名前:nobodyさん mailto:sage [2008/01/21(月) 19:42:35 ID:???]
[^<>]

264 名前:259 mailto:sage [2008/01/21(月) 20:27:24 ID:???]
自己解決しました



265 名前:nobodyさん mailto:sage [2008/01/21(月) 22:14:14 ID:???]
>>264
どう解決したかくらいは書いてもバチは当たらなくってよ。

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

267 名前:nobodyさん mailto:sage [2008/01/30(水) 13:19:43 ID:???]
大小文字区別つけて検索したいならオプションなしで固定でいいでしょ
そこでgオプション使うケースなんてないでしょ

268 名前:nobodyさん mailto:sage [2008/01/30(水) 16:28:40 ID:???]
>>266
質問が要領を得てないんだろうけど、
大文字小文字区別つけるかつけないかを切り替えたい、って話ではないかと。

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

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

270 名前:nobodyさん mailto:sage [2008/01/31(木) 03:02:38 ID:???]
>>269

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

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

とか

 


271 名前:nobodyさん mailto:sage [2008/01/31(木) 15:56:15 ID:???]
proxomitron の正規表現(?)が独自過ぎて、イライラしてくるんだが…

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


273 名前:nobodyさん mailto:sage [2008/02/25(月) 12:38:04 ID:???]
高いね。今は Web で検索すればいいからねぇ…今更そんなの出して売れるのか。

274 名前:nobodyさん [2008/03/03(月) 22:23:33 ID: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さん mailto:sage [2008/03/03(月) 23:15:55 ID:???]
>>274
初心者なので間違ってたらごめんなさい。

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

276 名前:nobodyさん mailto:sage [2008/03/04(火) 02:59:10 ID:???]
>>275
ありがとう!
思い通りになりました。
感謝です。

277 名前:nobodyさん mailto:sage [2008/03/05(水) 17:20:52 ID:???]
<a href="jumpres/read.cgi/newsplus/1204390523/1">>>1</a>
<a href="jumpres/read.cgi/dqnplus/22043905235/34">>>34</a>

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

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

279 名前:nobodyさん mailto:sage [2008/03/05(水) 18:52:35 ID:???]
ありがとうございます

280 名前:nobodyさん mailto:sage [2008/03/16(日) 09:40:37 ID:???]
PHPの正規表現はバグバグなのでバージョンが違えば動作が変わる上に、難しいパターンになるとすぐ落ちる。

281 名前:nobodyさん mailto:sage [2008/03/16(日) 12:34:04 ID:???]
嘘書くなよ。

282 名前:nobodyさん mailto:sage [2008/03/16(日) 20:44:54 ID:???]
パターン修飾子にパラメータを渡して、長い文字列を検索するとボロボロ落ちる。常識だよ。

283 名前:nobodyさん mailto:sage [2008/03/17(月) 06:09:10 ID:???]
rubyのutf-8判定とかもやばそうだね

284 名前:nobodyさん mailto:sage [2008/03/17(月) 08:59:29 ID:???]
pcreのバグだね。
pcre-devのメーリングリストでもよんどいて損はない
ttp://www.exim.org/lurker/list/pcre-dev.ja.html



285 名前:nobodyさん [2008/03/19(水) 14:02:11 ID:6LA3ff9b]
初めて書き込みさせていただきます。

たとえば文字列が

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

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

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

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


288 名前:nobodyさん mailto:sage [2008/03/29(土) 12:12:17 ID:???]
つマニュアル


289 名前:nobodyさん mailto:sage [2008/04/12(土) 11:24:34 ID:???]
見 れる

290 名前:nobodyさん mailto:sage [2008/04/13(日) 12:03:16 ID:???]
>>287
括弧

291 名前:nobodyさん mailto:sage [2008/04/26(土) 13:57:41 ID:???]
age

292 名前:nobodyさん mailto:sage [2008/05/04(日) 23:26:54 ID:???]
オライリーの正規表現三版
ほしいけど高いね

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

294 名前:nobodyさん mailto:AGE [2008/05/23(金) 20:19:21 ID:???]
AGE



295 名前:nobodyさん mailto:AGE [2008/05/23(金) 20:19:44 ID:???]
AGE

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

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

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

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

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

297 名前:nobodyさん mailto:sage [2008/06/05(木) 17:25:51 ID:???]
^61\.(?:7[89]|8[0-5])\.

こうじゃないかな

298 名前:nobodyさん [2008/06/05(木) 18:12:26 ID:0yepAPED]
>>297
ありがとうございます。

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


299 名前:nobodyさん mailto:sage [2008/06/06(金) 03:25:44 ID:???]
これが一番わかりやすい。以上

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


300 名前:nobodyさん mailto:sage [2008/06/08(日) 17:41:28 ID:???]
PHPで、1ページ分のHTMLのソースが$sに入っているとします。

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

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

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

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

ご指南ください。

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

302 名前:nobodyさん mailto:sage [2008/06/09(月) 02:40:38 ID:???]
>>300
ereg は最短マッチの芸当はできない。
pregでもつかっとけ。


303 名前:nobodyさん mailto:sage [2008/06/09(月) 06:50:27 ID:???]
>>300
'<meta[^>]*>'

304 名前:nobodyさん mailto:sage [2008/06/09(月) 23:50:23 ID:???]
300です。

ありがとうございます!

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

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




305 名前:nobodyさん mailto:sage [2008/06/11(水) 15:58:44 ID:???]
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さん mailto:sage [2008/06/11(水) 21:01:33 ID:???]
>>305
色々間違えてる。

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

307 名前:nobodyさん [2008/06/12(木) 00:47:05 ID:Hj50XmAm]
JavaScriptで下記のようなデータを取得したいです。

hogehoge[1]→1
hogehoge[123]→123
hogehoge[1243][]→1243

[]の中身を取得したく、[]が2つあった場合は最初の[]の中身を取得します。
(ただし、2個目の[]は常に空です。)

hogehogeは任意の文字列で、[]の中身は何桁か分からない数字の繰り返しです。

以上ご鞭撻の程お願いします。

308 名前:nobodyさん mailto:sage [2008/06/12(木) 08:16:53 ID:???]
>>307
スレタイ

309 名前:nobodyさん mailto:sage [2008/06/12(木) 14:43:44 ID:???]
/\[([1234]+)\]/

310 名前:nobodyさん mailto:sage [2008/06/12(木) 14:53:37 ID:???]
GJ

311 名前:nobodyさん [2008/06/28(土) 08:39:36 ID:9QUTsyON]
PHP質問スレから誘導されてきました。

使用言語はPHPです。
以下のような変数があります。
$str = <<<EOM
あああ<br />
いいい<br />
ううう<br />
<!--S-->
えええ<br />
おおお<br />
<!--E-->
EOM;

このうち<!--S-->と<!--E-->で囲まれている<br />だけを削除したいのですが、
正規表現を使って綺麗に書けるでしょうか?
以下のように試したのですが、<!--S-->と<!--E-->が消えるだけでした。
$str = preg_replace("/<!--S-->([\W\w]+)<!--E-->/",str_replace("<br />","","\\1"),$str);
また、<!--S(E)-->で囲まれている部分は改行や半角英数字などが含まれる場合があります。
どなたかご教示いただけますでしょうか。よろしくお願いいたします。

312 名前:nobodyさん mailto:sage [2008/06/28(土) 10:12:28 ID:???]
substr_replaceとstrposでできそうな気がするが

313 名前:311 mailto:sage [2008/06/28(土) 12:26:16 ID:???]
>>312
ありがとうございます、おかげで解決しました!

314 名前:nobodyさん mailto:sage [2008/07/02(水) 18:58:36 ID:???]
,"/web/sendmail.php","10","10","2000"
こういう感じの文章の
,"2000"
のみ抽出したいんですが、どう書けばいいんでしょうか?

",".*[0-9]"$
だと"10","10","2000"まで拾っちゃうんです・・・。



315 名前:nobodyさん mailto:sage [2008/07/02(水) 21:54:01 ID:???]
,\"[0-9]{4}\"

316 名前:314 mailto:sage [2008/07/03(木) 15:40:28 ID:???]
>>315
ありがとうございます。
確かに、それで例は拾えましたが、10と2000の部分は変動するんです。
桁も4桁だったり5桁だったりと様々なので、どうしたもんかなと・・・。

317 名前:nobodyさん mailto:sage [2008/07/03(木) 15:46:05 ID:???]
,\"[1-9][0-9]*\"

318 名前:314 mailto:sage [2008/07/03(木) 15:53:01 ID:???]
>>317
ありがとうございます。

それだと ,"10","10","2000" まで拾ってしまいます・・・。
書き忘れていましたが、秀丸を使って一括選択しています。

319 名前:nobodyさん mailto:sage [2008/07/03(木) 16:04:08 ID:???]
> 10と2000の部分は変動するんです

どう変動するんだよ
とり出したい場所の条件を日本語で書いてみ

>315を5桁にも対応させるだけなら
,\"[0-9]{4,5}\"

320 名前:nobodyさん mailto:sage [2008/07/03(木) 16:05:46 ID:???]
>>318
,\"[1-9][0-9]*\"$


321 名前:314 mailto:sage [2008/07/03(木) 16:14:35 ID:???]
>>320
ありがとうございます!!!出来ました!!!
ありがとうございましたー。

>>319
ありがとうございます。
>>320で解決しましたが、極端な話1〜99999999の間で変動します。

322 名前:nobodyさん mailto:sage [2008/07/03(木) 16:21:37 ID:???]
>>321
自然数と言え

323 名前:nobodyさん mailto:sage [2008/07/03(木) 18:01:39 ID:???]
314 は情報小出し厨という事が解ったから、はやく死ね

324 名前:nobodyさん mailto:sage [2008/07/03(木) 19:43:29 ID:???]
そもそも正規表現スレで「こういう感じの文章」なんて質問する時点で(ry



325 名前:nobodyさん mailto:sage [2008/07/03(木) 20:01:56 ID:???]
抽象的な表現の質問はスルー

326 名前:PHP [2008/07/04(金) 18:37:34 ID:DM0Om0jz]
PHP 正規表現

PHPの正規表現を勉強しているのですが、どうもうまくいきません。今回は一番簡単な正規表現をつくったのですが、どうやったらよいのでしょうか。

$h = '(名前)様の会員IDは(abc12)で、(5)番目に偉い方です。';

とあったら、名前、会員ID、番号を抜き出すには、どのようにしたらよいのでしょうか?
実際に()は使用しません。
また、$1 や $2 などを使いたいのですが、解説までできればお願いしたいです。
一応自分なりに考えました。
preg_match('/^*.([a-zA-Z0-9]){2}([0-9]+)','名前$2.ID$1 $3 番目に偉い');
()を使えば、2つマッチさせたいときなどに分けることができるのでしょうか?
(名前)様は(数字)
例:太郎様は5

このとき太郎様という日本語の文字を取得するには/^(+.)([0-9])$/

ここで名前は$1になり、数字は$2になるのでしょうか?
どのような時に$1や$2がどっちがどっちなのかは、どのようにしたらわかるのでしょうか?


長々した質問すいません。わかるかた教えてください。

327 名前:nobodyさん mailto:sage [2008/07/04(金) 23:02:41 ID:???]
www.php.net/manual/ja/book.pcre.php

取り敢えず、ここを *よく読んで理解* しろ。

328 名前:nobodyさん [2008/07/15(火) 00:11:32 ID:PMHjKbcP]
質問させて下さい。
PHP5を使っています。
PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません
<INPUT maxLength=20 name=id value="">
このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」
を取得したいのです。
全文に対して繰り返し取得したいのでpreg_match_allを使っています。

preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs )
このように書いたのですがヒットしてくれません。
ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが
文字列に関してはどのようにすればよいのでしょうか?
アドバイス頂ければ幸いです。
宜しくお願い致します。

329 名前:nobodyさん mailto:sage [2008/07/15(火) 02:02:18 ID:???]
>>328

悪いこたいわないから二段階で抽出しとけ。
先読みを使えば書けないこともないけど、メンテできなくなるぞw


330 名前:328 [2008/07/15(火) 03:07:47 ID:PMHjKbcP]
>>329
レス有り難う御座います。
一段階目は
preg_match_all( "/(<input 「typeを含まない文字列にマッチするような正規表現」[^<]>)/is", $data, $matchs )
となると思うのですが、この部分はどのようにして書けばよいのでしょうか?
はじめ、二段階抽出も考えたのですが、結局
「typeを含まない文字列にマッチするような正規表現」がどうしてもわからずでした。

331 名前:328 mailto:sage [2008/07/15(火) 08:05:16 ID:???]
自己レスですが、夜通し色々試していたらいけました。
お騒がせしました。
取りあえず、該当範囲をpreg_match_allで取得後、preg_matchでtypeがあるか判定して二段回抽出しました。

332 名前:nobodyさん [2008/07/17(木) 17:35:14 ID:LcfXPY+p]
<<が出てきて、その後初めて<br><br>が出るところまでのマッチ方法を教えてください。
pregです。

例えば、
hogehoge<<hogehogeh<br>oge<br><br>hogehoge<br><br>hoge<<hoge の
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~    の部分です。

333 名前:nobodyさん mailto:sage [2008/07/17(木) 17:53:17 ID:???]
<<.*?<br><br>

334 名前:332 mailto:sage [2008/07/19(土) 19:22:36 ID:???]
>>333
333おめです
なぜか、
hoge<<hogehog
eh<br>oge<br><br>hoge
だとマッチしないのですが。



335 名前:nobodyさん mailto:sage [2008/07/19(土) 19:32:09 ID:???]
<<【¥S¥s】*?<br><br>

336 名前:nobodyさん mailto:sage [2008/07/20(日) 09:34:06 ID:???]
できました。スマソ

337 名前:nobodyさん mailto:sage [2008/07/20(日) 11:43:35 ID:???]
携帯絵文字をすべて
「絵」に置き換えすることはできないのでしょうか?
preg_replace("/[ - ]/","絵",$hoge);

338 名前:nobodyさん [2008/07/20(日) 12:01:15 ID:LU799vx+]
>>337
キャリアは?

339 名前:nobodyさん mailto:sage [2008/07/20(日) 12:03:54 ID:???]
>>338
SoftBankです。
余裕があればau,DoCoMoもですが。。。

340 名前:nobodyさん mailto:sage [2008/07/20(日) 12:18:57 ID:???]
>>337
置き換える事はできるけど、正規表現だけでは無理

341 名前:nobodyさん mailto:お願いします [2008/07/20(日) 12:27:01 ID:???]
>>340では、正規表現以外のものもOKなので、
教えていただきたいです。

342 名前:nobodyさん mailto:sage [2008/07/20(日) 13:09:57 ID:???]
絵文字 変換 preg とかでググればいくらでも出てくるだろ。。。
ここで聞くより100倍速い。

343 名前:nobodyさん [2008/07/24(木) 00:50:31 ID:/c2OsNI4]
example.htmlに書かれた
<table>

344 名前:nobodyさん [2008/07/24(木) 00:58:57 ID:/c2OsNI4]
>>343
誤爆した。。申し訳ない。。
example.htmlに書かれた
<table>
<tr><th>2ちゃんねる</th><td>WebProg板</td></tr>
</table>
をphpのfopen, fgetsで1行ずつ読み取っています。
<tr>から始まった行の「2ちゃんねる」とWebProg板「WebProg」部分のみ抽出したいので
preg_replace("/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i","$1$2",$str);
としたのですが、うまく抽出できません。
アドバイスをいただければありがたいです



345 名前:nobodyさん mailto:sage [2008/07/24(木) 01:43:31 ID:???]
/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i

正規表現が / で始まってるから / で終わることになるわけだけど、途中に</th>ってのがあるわけよ

m#<t[dh][^>]*>(.*?)</t[dh]><t[dh][^>]*>(\w+)#i
こんな感じになるかな

346 名前:nobodyさん mailto:sage [2008/07/24(木) 23:33:27 ID:???]
デリミタの問題だけじゃないの?
preg_replace("/^<tr><th>(.*?)<\/th><td>([a-zA-Z])<\/td>/i","$1$2",$str);


347 名前:nobodyさん mailto:sage [2008/07/25(金) 08:54:32 ID:???]
これって[a-zA-Z]、[a-zA-Z]+こうしなくてもいいの?

348 名前:nobodyさん [2008/07/27(日) 01:11:32 ID:sEx2Pn85]
質問させてください。

サクラエディタに鬼車5.9.1を搭載して正規表現の勉強をしているのですが、手元にある詳説正規表現には

(<)?\w+(?(1)>)

このような例があり、<があれば>のマッチを試みる?ということができるみたいです。

ただ、鬼車はこの表現をサポートしていないみたいです。
www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt

同様のことを鬼車でも実現する方法ってあるのでしょうか?

349 名前:nobodyさん mailto:sage [2008/07/29(火) 05:43:25 ID:???]
一番最初に出てきた「=」だけ反応するにはどうしたらいいでしょうか。
C#です。

350 名前:nobodyさん mailto:sage [2008/07/29(火) 19:46:22 ID:???]
行頭の=という意味なら
/^=/m
だけどC#での正規表現の使い方は知らんので応えられん。

351 名前:nobodyさん [2008/08/06(水) 01:01:06 ID:hVakYDWk]
PHP5覚えたての初心者です
スレ冒頭に()と(?:)の違いについて質問されてましたが
?:の意味ってなんですか?
わかりやすい解説ページなどもあれば教えてください。

352 名前:nobodyさん mailto:sage [2008/08/06(水) 02:34:12 ID:???]
google

353 名前:nobodyさん mailto:sage [2008/08/06(水) 19:40:10 ID:???]
>>351
?:じゃ?と:だよ。
(?:〜)で意味をなす。

354 名前:nobodyさん [2008/08/21(木) 14:34:46 ID:wSsr/o3s]
質問させて下さい。
PHP5を使用しています。
文字列内にマルチバイト文字が一つでも含まれていれば真と言う正規表現を行いたいのですが
どのようにすればよいでしょうか?
ドキュメント等から調べてみて、
mb_ereg("[0-9a−zA−Zあ−んア−ン]", $str )
のようにしてみたのですが、これでは漢字にヒットしません。

アドバイス頂ければ幸いです。
宜しくお願い致します。



355 名前:nobodyさん mailto:sage [2008/08/21(木) 14:44:38 ID:???]
単純に先頭ビットがおったってるかどうか見ればよくない?

[\x80-\xff]

356 名前:nobodyさん mailto:sage [2008/08/21(木) 15:28:45 ID:???]
>>355
ありがとうございます。
やってみます。

357 名前:nobodyさん mailto:sage [2008/08/22(金) 02:32:16 ID:???]
>>354
1バイト文字を列挙したのを否定すれば?

あと、文字コードによっては半角カナがマルチバイトだったり
そうじゃなかったりするんだけど、どうするのかな?


358 名前:nobodyさん [2008/08/25(月) 10:35:16 ID:P/JycA8t]
htmlのタグを削除するのに、ふつうは
$line =~ s/<\/?[^>]+>//g; ----(1)

だと思うけど、どこかで見た方法では、

$line =~ s/<[^>]*(>|$)//g; ----(2)
となってた。これ動作は同じなのかな?(2)の意味がイマイチ分からない。

359 名前:nobodyさん mailto:sage [2008/08/25(月) 20:52:33 ID:???]
(1)の \/? は書いても意味ない(/は[^>]に含まれるから)
(2)の (>|$)は、$lineという変数名から推測するに行単位で読み込んで逐次処理した
場合に、タグの途中で改行されていて>が見つからなくても行末まで削除する為?
でもそうしたら次の行で処理がうまく行われないしよくわからん

行単位だとタグ途中で改行される場合もあるから全部読み込んで一気に処理がいい
s/<.*?>//g;
s/<[^>]*>//g;
などなど・・

360 名前:359 mailto:sage [2008/08/25(月) 21:09:55 ID:???]
間違った、s/<.*?>//g;だと改行に対応できないから
s/<[\s\S]*?>//;みたいになるね

361 名前:nobodyさん mailto:sage [2008/08/25(月) 21:28:12 ID:???]
いや、s使うだろ、普通。

362 名前:nobodyさん mailto:sage [2008/08/25(月) 22:34:46 ID:???]
>>358
(2)はSGMLのショートタグの対応とか?
ttp://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/appendix/notes.html#h-B.3.7

開始タグで前のタグを閉じる以外は、メジャーなブラウザは対応してなかったはずなので、
あまりこだわらなくてもいいと思うけど。

363 名前:358 mailto:sage [2008/08/25(月) 23:08:43 ID:???]
ありがとうございました。
改行文字の件とか、勉強になりました。
プログラム上では、どちらも同じ動作なので、気になってたもので。


364 名前:nobodyさん [2008/08/27(水) 15:31:16 ID:j0h2/LpG]
正規表現で悩んでいます。
preg_match_all( "/((aaa|bbb|ccc).*?)(aaa|bbb|ccc|$)/is", $str, $maches )

このような形にて以下のような内容の繰り返し文を部分的に抜き出そうとしているのですが一部上手くいきません

---------------------
aaa
あいうえお

bbb
かきくけこ

ccc
さしすせそ
---------------------
上記正規表現では
aaa
あいうえお

bb
かきくけこ

cc
さしすせそ
と言うように一つ目以降のパターンマッチ文字列の先頭がbbやccとして一文字かけてしまいます。
本来はbbb、cccとちゃんとヒットさせたいのですが、これが行えません。
マッチ後の文字列ポインタを「三歩歩いて二歩下がる」のようにずらす事をするか、何か他のパターンマッチ構文を
書けばいけそうだと思うのですが、どうにもよい方法が思いつきません。
お力添え頂ければ幸いです。



365 名前:nobodyさん mailto:sage [2008/08/28(木) 12:04:03 ID:???]
テストしてあげるからそのままコピペできるコードに書き換えてここに載せて

366 名前:nobodyさん [2008/08/28(木) 18:14:41 ID:Gzy07epa]
あいうえお かきくけこ
さしすせ そたちつてと
なに ぬねの はひふへほ

この
「あいうえお」「さしすせ」「なに」
を太字に置き換えるにはどうすればいいですか?
(PHP)

$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);

じゃうまくいきません。。。

367 名前:366 mailto:sage [2008/08/28(木) 18:25:55 ID:???]
すいません。
自己解決しました。

368 名前:nobodyさん mailto:sage [2008/08/28(木) 18:44:08 ID:???]
解決策を書いて下さい。

369 名前:nobodyさん mailto:sage [2008/08/28(木) 18:50:35 ID:???]
いやぁ

$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);
$hoge = str_replace("<br>","<br>\n",$hoge);

って書いてましたwww

370 名前:364 [2008/08/29(金) 11:10:56 ID:rNMP0NTC]
>>365
レスありがとうございます。
もう一度考え直してみて書き直すとこのようなコードになりましたPHP5になります。

// 対象文字列
$str = "ABCDaaaEFGaaaaHIJKaaaaa";

// 正規表現
preg_match_all( "/([A-Z]+?aaa.*?)([A-Z]|$)/is", $str, $maches );

// 結果表示
$c = count( $maches[1] );
for ( $i = 0; $i < $c; $i++ ) {
print "=> {$maches[1][$i]}\n";
}

=> ABCDaaa
=> FGaaa
=> HIJKaaa

これを
=> ABCDaaa
=> FGaaaa
=> HIJKaaaaa

と表示させたいのです。
どうか宜しくお願い致します。

371 名前:nobodyさん mailto:sage [2008/08/29(金) 11:57:14 ID:???]
以前と仕様変わってるようだけど・・・
詳しい仕様を書いてないからわからんけど

先頭が一つ以上の?英大文字がつづくだけマッチして
次にa小文字が3つ以上?つづくだけマッチ
を繰り返すってこと? isオプションがあるのはどういうことかわからんが
/([A-Z]+aaa+)/

372 名前:364 mailto:sage [2008/08/29(金) 12:11:28 ID:???]
>>371
・・・!申し訳ありません。
色々考えて試している内に頭が混乱して有らぬ方向になってしまっていたみたいです。
ちゃんともう一度考えて仕様も伝えられるようにしてから書き込ませて頂きます。
お手間をおかけいたしましてすみません><

373 名前:nobodyさん mailto:sage [2008/08/29(金) 12:39:10 ID:???]
新入社員の研修みたいでほほえましい。

374 名前:nobodyさん [2008/09/01(月) 15:52:31 ID:ME+mffWY]
使用言語はPHP4です。
PHPスレから誘導されて来ました。よろしくお願いします。

$str = '<a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>  <br />';

この文字列の中からリンク先の特定の数字とリンクテキストを抽出したく
preg_match_all ( "/"."<a href=\"entry-(.*)-18\.html\">(.*)<\/a>"."/i", $str, $match );
このような正規表現を書いたのですが、実行結果は

[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>

)

[1] => Array
(
[0] => 1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3
)

[2] => Array
(
[0] => パイナップル
)

となります。



375 名前:nobodyさん [2008/09/01(月) 15:53:28 ID:ME+mffWY]
下記のような実行結果にしたいのですが、正規表現の書き方を教えて下さい。よろしくお願いします。

[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>

)

[1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[2] => Array
(
[0] => りんご
[1] => バナナ
[2] => パイナップル
)

376 名前:nobodyさん mailto:sage [2008/09/02(火) 00:14:52 ID:???]
<a href="entry-(\d+)-18.html">(.*?)</a>

377 名前:nobodyさん [2008/09/02(火) 09:20:23 ID:gwaiq/Cc]
>>376
うまく動きました
ありがとうございました

378 名前:nobodyさん [2008/09/02(火) 17:55:54 ID:IiWNBMxF]
バイオインフォマティックスに詳しい方いらっしゃいますか?perlを使って突然変異前後における終止コドンのカウントをしたいんですが、初心者なのでまったく分かりません・・・(涙)


379 名前:nobodyさん mailto:sage [2008/09/02(火) 18:31:39 ID:???]
先頭にhttpまたはttpを含まない
という正規表現はどう書けばいいでしょうか

380 名前:nobodyさん mailto:sage [2008/09/02(火) 18:35:50 ID:???]
!/^h?ttp/

381 名前:nobodyさん mailto:sage [2008/09/02(火) 18:37:44 ID:???]
^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))

382 名前:nobodyさん mailto:sage [2008/09/02(火) 19:18:50 ID:???]
>>380
>>381
助かりました
有難うございました

383 名前:nobodyさん mailto:sage [2008/09/03(水) 09:02:07 ID:???]
^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))

だとhとかttにマッチしない罠。

^($|[^ht]|h($|[^t]|t($|[^t]|t($|[^p])))|t($|[^t]|t($|[^p]))))

普通は380のようにするけどな。

384 名前:nobodyさん mailto:sage [2008/09/04(木) 10:49:47 ID:???]
^p^



385 名前:nobodyさん mailto:sage [2008/09/04(木) 10:50:59 ID:???]
^w^

386 名前:nobodyさん [2008/09/04(木) 19:48:29 ID:ZxHTo/La]
codezine.jp/article/detail/1573
こんな問題集を見つけたんだが
正規表現道場に近いな

387 名前:nobodyさん [2008/09/04(木) 21:53:09 ID:AVvRqwBM]
$が肯定先読みというのは目から鱗。

388 名前:nobodyさん [2008/09/17(水) 17:44:57 ID:TGrFERMS]
質問させてください。
OSはubuntu8.04で正規表現を勉強し始めの者です。

電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ
抽出するという条件なんですが、

郵便番号はxxx-xxxx(xは0-9の数字)、電話番号はxx-xxxx-xxxx(xは0-9の数字)
で、grep -E [0-9]\{3\}-[0-9]\{4\} とやっても電話番号も全て抽出されてしまいます。
どこが間違っているのでしょうか。

389 名前:nobodyさん mailto:sage [2008/09/17(水) 17:54:16 ID:???]
その正規表現だと電話番号にもマッチしちゃうからね。

具体的には、

xx-xXXX-XXXX

の大文字Xであらわしたところ

まあ宿題なんだろうからもうすこし良く考えましょう。

390 名前:nobodyさん mailto:sage [2008/09/17(水) 19:24:47 ID:???]
>>389
grep -E ^[0-9]{3}-?[0-9]{4}$
でうまくいきました。ヒント有難うございます。

391 名前:nobodyさん mailto:sage [2008/09/22(月) 18:03:26 ID:???]
質問です。
下記のような配列の中から、
(2)〜(4)までのみを抽出したいと思っています。

 (1) testa@hoge
 (2) _testb@hage
 (3) _testc@noge
 (4) _testd@nage
 (5) _teste@n_ge

ルールとしては、
 ・頭に[_]が付いている事、
 ・@の後ろに[n_]が付いていない事
です。上記前提で下記のように書いたのですが、
これですと(2)しか抽出されませんでした。

 $test =~ /^_.*@[^(n_)]/

@の後ろの正規表現が悪いのだと思うんですが、
この場合どのように書けばいいんでしょうか。
ご教示お願いしますm(_ _)m

392 名前:nobodyさん mailto:sage [2008/09/22(月) 18:09:42 ID:???]
>>391
それじゃ文字クラスだよ。こういうときは否定先読みだろ。

393 名前:nobodyさん mailto:sage [2008/09/22(月) 18:13:12 ID:???]
/^_\w*\@\w+$/ and !/\@n_/

先頭_と@の間はどんな文字でもいいのか、@以降はどんな文字でもいいのかとか
詳しいルールはわからないが、素直に分けたほうがいいと思う

394 名前:nobodyさん mailto:sage [2008/09/22(月) 18:18:30 ID:???]
>>392-393
ありがとうございます!
とりあえず、>>392さんの方法で抽出できました。

$test =~ /^_.*@(?!n_)./

ありがとうございました。



395 名前:nobodyさん [2008/09/25(木) 14:22:28 ID:bEreCYy4]
使用言語はPHP5です

html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたいと思い
以下の置き換えを行い成功したのですが、

$html = preg_replace('{<img (.*?)>}' ,'<img $1 />' ,$html);

元々imgタグ内にスペースとスラッシュが最後に入っているのもありますので、それ以外ということで

$html = preg_replace('{<img (.*?)^\/>}' ,'<img $1 />' ,$html);

このように記述してみましたが、これですと全部のimgタグに置き換えが効かなくなりました
どういう記述をすればよいのでしょうか?



396 名前:nobodyさん mailto:sage [2008/09/25(木) 14:30:11 ID:???]
/<img (.*?[^\/])>/

397 名前:nobodyさん [2008/09/25(木) 14:38:21 ID:bEreCYy4]
>>396
動きました
素早い回答ありがとうございました

398 名前:nobodyさん mailto:sage [2008/10/07(火) 01:09:40 ID:???]
対象が

<a href="test/index.html">あああ</a>
<a href="hogehoge1.com" target="_blank">いいい</a>

のような文字列から

test/index.html
hogehoge1.com

だけを取り出すにはどうすればよいのでしょうか?

使用言語はPHP5です。

preg_match("/<a href=\"(.*)\"\>.*/",$str,$m);

ではtarget="_blank"が残ってしまい期待通りの結果が得られません。
最短一致というのが原因かとおもい

preg_match("/<a href=\"(.*)\"{1}?\>.*/",$str,$m);

としましたが駄目でした。
アドバイスよろしくお願いいたします。

399 名前:nobodyさん mailto:sage [2008/10/07(火) 01:57:33 ID:???]
/<a\s.*?href=\"(.*?)\"/is

400 名前:nobodyさん mailto:sage [2008/10/07(火) 21:57:53 ID:???]
>>399
無事期待通りの結果が得られました!
ありがとございました!

401 名前:nobodyさん mailto:sage [2008/10/09(木) 19:29:23 ID:???]
PHP5で使います

$numには、

+数字
-数字
数字

というようなパターンの時のみマッチさせたいです
数字のところは 0〜999999999までの値が入ってきますが、0以外の時に頭に0がある場合0123とかは除外したいです
試行錯誤して下記のようにしてみましたが、思った結果が得られません。エラー出まくりでなみだ目です
どうかよろしくお願いします


preg_match('/^(([^+]*)*(++[^-][^+]*)*)*?[^0-9]*$/',$num)

402 名前:nobodyさん mailto:sage [2008/10/09(木) 19:32:07 ID:???]
[\+\-]?(?:0|[1-9]\d*)

403 名前:402 mailto:sage [2008/10/09(木) 19:33:52 ID:???]
不十分か。。

^[\+\-]?(?:0|[1-9]\d*)$


404 名前:nobodyさん mailto:sage [2008/10/10(金) 00:47:33 ID:???]
>>403
ありがとうございます
動作を確認したところ
0のみの場合と数字の部分が9桁以上でもマッチしてしまうので、

^([^0]|[\+\-]?)(?:0|[1-9]\d{1, 9}?)$

試行錯誤してこのようにしてみましたが、全くもってマッチしなくなってしまいました
どのように書けばよろしいのでしょうか?



405 名前:nobodyさん mailto:sage [2008/10/10(金) 00:58:41 ID:???]
^[\+\-]?(?:0|[1-9]\d{0,8})$

406 名前:nobodyさん mailto:sage [2008/10/10(金) 07:43:15 ID:???]
>>405
できました
ありがとうございました

407 名前:たまちゃん ◆ExGQrDul2E [2008/11/02(日) 16:02:00 ID:wDYsJgfV]
URLが、変数$urlにいくつ使われているか調べるために
preg_match_allを使いましたが、動きません。
どのようにしたらよいか教えてください。
<?php
$url = <<< URL
a
x.x
http://
google.jp/
URL;
preg_match_all ("|(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)|",$url,$out, PREG_SET_ORDER);
echo count($out);
?>

実行結果:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'f' in /match.php on line 8
0


408 名前:nobodyさん mailto:sage [2008/11/02(日) 16:11:53 ID:???]
別の正規表現構文を探してきてコピペする

409 名前:nobodyさん mailto:sage [2008/11/02(日) 17:38:13 ID:???]
デリミタ|で始めたならm|にする必要があるっしょ
で、途中にORの意味で|使ってるから別のデリミタにしちゃいなよ

410 名前:たまちゃん ◆ExGQrDul2E [2008/11/02(日) 21:36:24 ID:0rYlog69]
>>409
回答ありがとうございます
\(・∀・)/

途中で
https?|ftp
で使っているのですが、
最初を
||
//
以外に、何を使えばよいのでしょうか?

それとも

\(エスケープ)させればよいのでしょうか?

411 名前:nobodyさん [2008/11/03(月) 20:39:21 ID:XFsZ1V0e]
文字クラス外部の?について。
URLの最短マッチさせる正規表現
(https?)
について、
この場合なら、
http
https
両方にマッチします。
(https)
これなら、
https
にしかマッチしません。
ここで、?の意味を調べたら、『(の意味を拡張。0回または1回の繰り返し最短マッチ』と書いてありました。なぜ
(https?)
これをすることによって、httpとhttpsをマッチさせられるのでしょうか?最短マッチなら、httでもいいのじゃないですか?

412 名前:nobodyさん mailto:sage [2008/11/03(月) 21:26:40 ID:???]
https? なら ?は直前のsに対して0回か1回かだからね^^

413 名前:nobodyさん mailto:sage [2008/11/04(火) 00:18:26 ID:???]
>>411
最短マッチではなく最長マッチじゃないの。
http までマッチしていることを前提にして、さらに s に対して 0 回または 1 回の
「より長い方」に優先してマッチする。

414 名前:nobodyさん mailto:sage [2008/11/08(土) 03:56:35 ID:???]
最短マッチて言葉は*?とか量指定子のあとにくるときの
解説文でよく使われるからそれとごっちゃになっちゃったんじゃないかな



415 名前:nobodyさん [2008/11/08(土) 14:37:01 ID:Ln3BC38n]
この道場にふさわしい記事だ!!!

codezine.jp/article/detail/3039
codezine.jp/article/detail/2676


416 名前:nobodyさん mailto:sage [2008/11/09(日) 02:37:50 ID:???]
>>415

正規表現がらみのスレにそのリンクはりまくってんな。
関係者?



417 名前:nobodyさん mailto:sage [2008/11/15(土) 02:31:51 ID:???]
ヤター
近所の図書館に詳説正規表現が入荷したお
まともなオライリ本は詳説イーサネットしかないとこだから嬉しい
以前は電子メールプロトコルがあったけど、
除籍されてリサイクルコーナーから旅に出てしまったよ

418 名前:nobodyさん mailto:sage [2008/11/24(月) 00:38:36 ID:???]
2つの正規表現を1つにまとめる方法はありますか?

A→か
7→イ

という2ステップ手作業でやっていることを1ステップで済ませたいのです。

419 名前:nobodyさん mailto:sage [2008/12/08(月) 02:09:36 ID:???]
PHPです。
$search="/^(.+?)<>(.*?)<>(.+)ID:(.+?)<>(.+)<>(.*)/";
preg_match($search,$res[$i],$match);
$id[$i]=$match[4];

$resは2chのdatファイルを一行ごとに配列に入れた物です。
Notice: Undefined offset: 4 (略) on 47
というエラーが出てしまいます。
47行目は$id[$i]=$match[4];です。

420 名前:nobodyさん mailto:sage [2008/12/08(月) 02:21:41 ID:???]
>>419ですが、自己解決しました。
1001の場合には、IDがないからでした。


421 名前:nobodyさん mailto:sage [2008/12/19(金) 23:54:16 ID:???]
正規表現の先生方、phpで質問させて頂きます。

$str = '[db]name[/db] たべたり [db]email[/db]';
preg_match_all('/\[db\].*?\[\/db\]/s',$str,$match);

print_r($match);



[db]name[/db] と
[db]email[/db] が抜き出されるのですが、
この [db] [/db] を無しで

name と email だけを抜き出すにはどう書けばよいでしょうか。
ご教示のほどよろしくお願いします。

422 名前:nobodyさん mailto:sage [2008/12/19(金) 23:58:55 ID:???]
\](.*?)\[\/

423 名前:nobodyさん mailto:sage [2008/12/20(土) 00:04:41 ID:???]
>>422
ありがとうございます!
このご恩忘れません。

424 名前:nobodyさん mailto:sage [2008/12/20(土) 14:46:40 ID:???]
もう忘れてるだろw



425 名前:nobodyさん [2008/12/22(月) 00:30:52 ID:EdTiga+3]
Jeditで
【あいう】を【6あいう】
【かき】を【4かき】
のように【 】でははさまれた文字列の頭に文字数×2の数値を追加したいのですが
どのように検索してどのように置換すればよいでしょうか?
【 】ではさまれた文字数はまちまちです。
よろしくお願いします。

426 名前:nobodyさん mailto:sage [2008/12/22(月) 03:02:21 ID:???]
>>425

無理だろ。

マッチした部分の長さを得る手段がない。


427 名前:425 mailto:sage [2008/12/22(月) 15:22:20 ID:???]
orz






428 名前:nobodyさん mailto:sage [2008/12/22(月) 15:42:49 ID:???]
マクロ組み合わせれば

429 名前:425 mailto:sage [2008/12/22(月) 17:01:35 ID:???]
>>427

マクロですね!
ありがとうございます。

430 名前:nobodyさん mailto:sage [2008/12/23(火) 02:31:08 ID:???]
マクロ使ってよかったのかよっ!w


431 名前:nobodyさん mailto:sage [2008/12/28(日) 04:14:06 ID:???]
失礼します
使用言語はperl5です

配列に、前からマッチしたところまでの文字列を繰り返し入れようとしています
($str = 'hogehugahage';
という文字列があって、hでマッチさせたら
@data = ['h', 'hogeh', 'hogehugah']
という配列になることを想定しています)

@data = $str =~ m/h/g;
のときは予想どおり
@data = ['h', 'h', 'h']
となったのですが、
@data = $str =~ m/^.*h/g
の場合は
@data = ['hogehugah']
となって1回最大マッチするだけのようです

どうすれば予想通りの結果になるでしょうか?

432 名前:nobodyさん mailto:sage [2008/12/28(日) 08:21:40 ID:???]
$str = 'hogehugahage';
$c= substr($str, 0, 1);
while ($str=~ /$c/go){
push(@data, substr($str, 0, pos($str)));
}
for (@data){print $_,"\n";}

正規表現使わないとダメなの?

433 名前:431 mailto:sage [2008/12/28(日) 13:37:57 ID:???]
>>432
ありがとうございます
それでいけそうです

実は正規表現を必ず使わなきゃいけないというわけではなく、
もっと簡潔にかけるならなんでも大丈夫です

434 名前:nobodyさん mailto:sage [2009/01/01(木) 19:19:28 ID:???]
先達のみなさま、Perl5+EUC環境で質問させてください

文字列の中で、漢字をのぞいた全角文字(全角数字、全角アルファベット、全角カタカナ)と
一部記号(丸括弧や全角スペースなど)以外が入っていたらマッチさせる、という処理をやろうとしています
文字クラスに許可する文字コードを細かく書いて、その否定で取れるかと思ったんですが
$txt =~ /[^xA3\xB0-\xB9]/
のような書き方まで来て、詰まってしまいました

$txt =~ /[^a-zA-Z0-1!#$ @]/
みたいな感じで、複数の文字コードを書くにはどうしたらいいんでしょうか?

ご教示お願いいたします



435 名前:nobodyさん mailto:sage [2009/01/02(金) 02:24:41 ID:???]
>>434

どうしたらいいってがんばって列挙するよりないと思うよ。

2byteのならびのあるパターンを除外したいという話だろうから、^ を使った形では
そう簡単にはかけないと思うけど。



436 名前:434 mailto:sage [2009/01/03(土) 20:08:16 ID:???]
>>435
ありがとうございます
何とか地道にがんばります

437 名前:nobodyさん mailto:sage [2009/01/15(木) 22:57:08 ID:???]
PHP5を使用しています。

<pre>タグで囲まれた文字列の中の<br />を削除したいのですが、どのようになりますでしょうか。

例)
置換前
<pre>
aaa<br />
bbbb<br />
</pre>

置換後
<pre>
aaa
bbbb
</pre>

宜しくお願いします。

438 名前:nobodyさん mailto:sage [2009/01/15(木) 23:33:28 ID:???]
$s= <<<EOT
置換前
<pre>
aaa<br />
bbbb<br />
</pre>

置換後
<pre>
aaa
bbbb
</pre>
EOT;
echo preg_replace("#(<pre>.*?</pre>)#es", "str_replace('<br />', '', '$1')", $s);

439 名前:438 mailto:sage [2009/01/15(木) 23:45:12 ID:???]
preg_replace("#<pre>.*?</pre>#es", "str_replace('<br />', '', '$0')", $s);

括弧は要らないか

440 名前:437 mailto:sage [2009/01/16(金) 00:04:22 ID:???]
出来ました!すっげ。

441 名前:nobodyさん mailto:sage [2009/01/19(月) 01:18:40 ID:???]
Irvine書式のURL展開アルゴリズムを教えてください。
・[?-?]表記による数値・アルファベットの連番
・[]内1コめの?の桁数に応じて0埋め
・[]内の展開箇所は複数可
といったところです。
言語は出来ればperl、次点でjsやvbsですが特に問いません。

以下のよう変換されるかんじです。よろしくお願いします。
>abc[1-2].jpg
abc1.jpg
abc2.jpg
>abc[09-10].jpg
abc09.jpg
abc10.jpg
>abc[1-2]de[099-101].jpg
abc1de099.jpg
abc1de100.jpg
abc1de101.jpg
abc2de99.jpg
abc2de100.jpg
abc2de101.jpg
>[a-b][01-02][4-5].jpg
a014.jpg
a015.jpg
a024.jpg
a025.jpg
b014.jpg
b015.jpg
b024.jpg
b025.jpg


442 名前:nobodyさん mailto:sage [2009/01/19(月) 03:14:04 ID:???]
>>441
回答とは全然関係ないですけど、
hからttp://とつなげて書くと、
検索エンジン等のクローラがそれら>>441のリンクを全てなめるので、
ネットワークリソース的にあまりよろしくないです…

今後そのように例示される際には
hを抜いたり大文字にしたり等、
リンクにならないよう工夫をご検討いただけると、
一インターネット利用者としては嬉しい限りです

443 名前:nobodyさん mailto:sage [2009/01/19(月) 03:23:29 ID:???]
あまりよろしくないって数字で言うとどれくらい?

444 名前:nobodyさん mailto:sage [2009/01/19(月) 03:24:54 ID:???]
サァン!



445 名前:nobodyさん [2009/01/19(月) 04:50:02 ID:cs1ls7yv]
ググったのですが、分からなかったので質問させてください。
align=left>1234567891011121345
上記を
align=left>1011121345
こう置換したいのですが
left>.*?1011121345
こうしてみたのですが、出来ませんでした。
どう置換すれば、良いのでしょうか、よろしくお願いします。

446 名前:nobodyさん mailto:sage [2009/01/19(月) 05:23:37 ID:???]
>>445
left>.*1011121345

447 名前:nobodyさん mailto:sage [2009/01/19(月) 09:02:38 ID:???]
s/>\d*1011121345//

448 名前:441 mailto:sage [2009/01/19(月) 14:17:19 ID:???]
なんだかオープンソースだったようで自己解決しました。

>>442
いまだにh抜きを強要する人っているんだね。
見ず知らずの他人一人一人を啓蒙していくよりも
管理者へ[http://」をNGワードに追加してくれるよう説得した方がいいんじゃないの?
有益であれば受け入れてくれるはず。

449 名前:nobodyさん mailto:sage [2009/01/19(月) 14:46:18 ID:???]
キミは自分さえよければ他はどうでもいいんだね。
まあがんばってよ。

450 名前:nobodyさん mailto:sage [2009/01/20(火) 02:49:36 ID:???]
>>442が強要に見えるようじゃ苦労しそうだな

451 名前:nobodyさん [2009/01/20(火) 03:53:44 ID:TjAtrikI]
ざっと眺めた感じだと
http〜リンクを見るたび指摘(要望)してしまう442
その指摘(要望)が強要に見えてしまう441
どちらも2chに向かないタイプではあるが
頻度の度合いからして苦労するのは441の方が上だな
公衆便所のトイレットペーパーが三角に折れてなかったらイラっとしちゃうタイプでそ

452 名前:nobodyさん mailto:sage [2009/01/20(火) 04:11:05 ID:???]
あ〜ハイハイ自治厨vs爆笑田中の構図ね
スレ違いだから他でやってくれ

453 名前:nobodyさん [2009/01/22(木) 00:53:40 ID:2qACQkO/]
正規表現で$文字を含む検索や置換ってど〜してます?

454 名前:nobodyさん mailto:sage [2009/01/22(木) 01:00:03 ID:???]
お前は何を言ってるんだ



455 名前:nobodyさん mailto:sage [2009/01/22(木) 02:57:05 ID:???]
>>453
$は海外の通貨記号なのでうまくいかない。
\$のようにローカルな通貨記号を重ねればうまくいく。

456 名前:nobodyさん mailto:sage [2009/01/22(木) 03:22:48 ID:???]
>>455
何言ってんだこいつ

457 名前:nobodyさん mailto:sage [2009/01/22(木) 17:35:54 ID:???]
<br>***********

-----

上記のような文字列で「*」には日本語と英語が混ざっています。
そこで、、<br>から-までの間から、英語文字だけを削除するような正規表現って無いでしょうか?
<br>から-の部分は改行が入ってます。
ご存知の方居られましたら、よろしくお願いします。

458 名前:nobodyさん mailto:sage [2009/01/22(木) 17:45:32 ID:???]
>>457
>無いでしょうか?

そりゃつくりゃあるだろ

459 名前:nobodyさん mailto:sage [2009/01/22(木) 17:56:19 ID:???]
>>458
すみません。言葉足らずでした。
普段Speeeeedをいうソフトを使っているのですが、これで>>457は可能でしょうか?


460 名前:nobodyさん mailto:sage [2009/02/01(日) 00:44:32 ID:???]
>>459
ここ正規表現のスレ
ソフトの使い方はスレ違い、ソフトウェア板へどうぞ

461 名前:OraOra [2009/02/01(日) 01:57:15 ID:2VNzjYUZ]
検索文字の中であるパターンの検索の仕方が
分からず困っています。

どなたか御教授お願いします。

プラットフォームはOracleのPL/SQLです。

検索対象は以下の日付書式の文字です。
'yyyymmdd hh24:mi:ss'

以下のように正規表現の結果を関数で受取り
その結果をチェックしています。

bool_result := regexp_like('20080230 11:20:22','(20)[0-9]{2}(0[1-9])|1[0-2])(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9])');

if bool_result then
dbms_output.put_line('OK');
else
dbms_output.put_line('NG');
end if;

現状では上記の正規表現で'0230'、'0231'のチェックが出来ず困っています。

上記の正規表現の中で'0230'、'0231'も含めてチェックする方法を
ご存知の方いましたらどなたか御教授お願いします。

462 名前:nobodyさん [2009/02/02(月) 21:43:16 ID:H9hEncfV]
「id="72157612930889935" primary="3224910389" secret="be0cf48b4f" server="3468" farm="4" photos="131" videos="0"」という文字列から、
「id=""」の数字を抜きたいのですが(この例であれば「72157612930889935」が欲しいです)

$patern = 'id="(.*)" ?';
ereg($patern,$line,$id);
echo $id[1]."<br />\n";

では最後のvideosの終わりのダブルコーテーションまで入ってしまいました。

>>421に近いと思うのですが?で最短マッチ?になるような気もしますし
>>412にあるように?は0か1回の繰り返しのようにも思うし…。
OSはCent4系、PHP4.1.3、関数はeregを使いました。どなたか助けて下さい

463 名前:nobodyさん mailto:sage [2009/02/02(月) 21:51:38 ID:???]
id="([0-9]*) とか・・

464 名前:462 [2009/02/02(月) 21:55:09 ID:H9hEncfV]
>>463
神!ありがとうございました。
?は結局使わず終いでしたが?とか難しいのを使うよかよっぽどスマートす。



465 名前:nobodyさん mailto:sage [2009/02/05(木) 13:33:36 ID:???]
?と*の意味を知ってたら難しいとかの発言にはならない

466 名前:nobodyさん mailto:sage [2009/02/06(金) 11:54:32 ID:???]
だよね。
{0,1}か{0,1,2,3...}かの違いだけだ。

467 名前:nobodyさん mailto:sage [2009/02/06(金) 16:00:49 ID:???]
質問する人は最低限基本は知ってて欲しいと思う今日この頃

468 名前:nobodyさん mailto:sage [2009/02/10(火) 00:16:26 ID:???]
F, f, t, S, P が正規表現のとき、
FtSPPP または FfSPPPP は
F(tS|fSP)P{3} より短くなりますか?

PPP と PPPP ではなく X と Y (Fの直後に来るものによってSの後に来るべきものがまったく違う場合) には応用可能でしょうか?

469 名前:nobodyさん mailto:sage [2009/02/10(火) 00:53:38 ID:???]
F(tS|fSP)PPP

470 名前:nobodyさん [2009/02/23(月) 09:51:32 ID:0L52Pp6H]
.*?
これの意味を教えて下さい。

471 名前:nobodyさん mailto:sage [2009/02/23(月) 10:49:52 ID:???]
「.」はカニだな
「*」は0匹以上の生息してるやつ最後まで
つまり、「.*」でカニがいるだけ全部を捕り尽くすという意味(昨今の乱獲問題)

そこで捕り尽くしたら絶滅するという問題を受けて「.*?」という思想が考え出された
意味は、最初にカニがいたらその一匹を捕まえて漁を止めるということ

472 名前:nobodyさん [2009/02/23(月) 15:41:23 ID:0L52Pp6H]
>>471
では、 .*? と .? の違いを教えて下さい。

473 名前:nobodyさん mailto:sage [2009/02/23(月) 17:58:21 ID:???]
>>472
「.」はカニだな
「?」は捕れるかとれないか分らないがとりあえず努力するという意味
つまり、「.?」で幻のカニ探索するという意味

474 名前:nobodyさん [2009/03/02(月) 19:46:41 ID:/g2x4kDh]
phpです。
たとえば普通に
google.co.jpと書いてあるものと
<a href="google.co.jp">test</a>と書いてある文字列があります。

この文字列内のタグになってないUrlをAタグでリンクを張りたいんですがどうしたらいいでしょうか。




475 名前:nobodyさん mailto:sage [2009/03/02(月) 21:22:30 ID:???]
httpから始まり、半角英数字と.?&%が含んでるか見ればおk

476 名前:nobodyさん mailto:sage [2009/03/05(木) 18:30:50 ID:???]
>>471
先生 ノシ
「.*?」で最初の一匹目のカニも取れませんでした。
でも幻のカニは取れたみたいです。

477 名前:nobodyさん mailto:sage [2009/03/11(水) 00:46:27 ID:???]
*.2ch.net/*/test/bbs.cgi*
これを正規表現にすると、どうなりますか?


478 名前:nobodyさん mailto:sage [2009/03/11(水) 01:27:39 ID:???]
*.2ch.net/*/test/bbs.cgi*

479 名前:nobodyさん mailto:sage [2009/03/11(水) 11:15:58 ID:???]
>>477
"{^https?://[0-9a-zA-Z]*\.2ch\.net/[0-9a-zA-Z]*/test/bbs\.cgi[0-9a-zA-Z/_-]*$}"

480 名前:nobodyさん mailto:sage [2009/03/20(金) 02:34:11 ID:???]
phpのクラスファイルの特定の関数を正規表現で抜き出したいのですが可能でしょうか?

例 class.test.php から public function test($a){ 本文 }

スケルトンコードの場合簡単に抜き出せるのですが、
本文中にif,swichなどで } が存在した場合どうすれば良いのか悩んでいます。

481 名前:nobodyさん mailto:sage [2009/03/20(金) 04:11:43 ID:???]
{が出たら探す}を1つ増やせばいいじゃん

482 名前:nobodyさん mailto:sage [2009/03/20(金) 22:15:43 ID:???]
言語は
BoostライブラリBoost.Xpressiveか、Boost.Regexか、Boost.Spirit
です。(標準C++,コンパイラg++。)

括弧の対応のバランスがとれているならマッチさせるという正規表現はどう書けますか?
boost::xpressive::sregex parens;
parens = *( '(' >> by_ref(parens) >> ')' );
だと
 ()→マッチ
 ()()→マッチ
 ()(()((()))())→マッチ
 (()))))→マッチしない
です。
私としては(1+3)*(4+(8-9))の様に括弧以外の文字が含まれていても括弧のバランスがとれているか判定できるようにしたいのですが。
ただし括弧としては ( か ) だけを想定し、{}[]などは判定の対象にはせず、数式として成り立っているかどうかなども判定せず、あくまで ( と ) のバランスだけを見たいです。



483 名前:nobodyさん mailto:sage [2009/03/20(金) 22:25:59 ID:???]
>>481
できました、ありがとうございました。
こんな感じで、簡単でしたね、、、

 /function test.*?\{.*? (\{.*?\}.*?)*? \}/s

484 名前:nobodyさん mailto:sage [2009/03/20(金) 23:13:32 ID:???]
echo内の { } にも対応してみました。
これでほぼ完璧かなぁ、、、
/public\sfunction\stest_if_text.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s



485 名前:nobodyさん mailto:sage [2009/03/20(金) 23:18:29 ID:???]
センスねえな
ムダがおおい

486 名前:nobodyさん mailto:sage [2009/03/20(金) 23:28:45 ID:???]
関数名だけで対応すると
/[public|private|protected]+\s+[static]?\s?function\s+関数名.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
こんな感じかなw
読みやすさ優先で記述してるからセンスは勘弁してくださいw

487 名前:nobodyさん mailto:sage [2009/03/24(火) 08:12:11 ID:???]
>>482
正規表現だけじゃ無理じゃね?

488 名前:nobodyさん mailto:sage [2009/03/24(火) 09:59:04 ID:???]
>>482
正規表現じゃ数学的に不可能。有限状態オートマトンなので閉じられてない
開きカッコの数を高々状態数までしか憶えられないからそれを越えた時点で
アウト。

Perlの正規表現みたいに再帰的なパターンが書けるように拡張されてると
別だけどね。

489 名前:487 mailto:sage [2009/03/24(火) 10:07:28 ID:???]
>>482
BoostのXpressiveならby_ref()があるから再帰的に書けないこともないハズ。
でもよーわからん。
Spiritが使えるならそっちのが楽そうじゃね?

490 名前:nobodyさん mailto:sage [2009/03/24(火) 10:20:21 ID:???]
「高々状態数」の意味がわかりません。

491 名前:nobodyさん mailto:sage [2009/03/24(火) 10:38:59 ID:???]
数学じゃよくでてくるけどね、「高々」とか「状態数」とか

492 名前:nobodyさん mailto:sage [2009/03/24(火) 10:40:15 ID:???]
>>491
俺は初めて聞いたぞ。
たかだかはよく出て来るけど(例:たかだかn次の〜)
状態数は物理学の用語じゃね?

493 名前:nobodyさん mailto:sage [2009/03/24(火) 12:16:31 ID:???]
お前ら正規表現スレにいて有限状態オートマトンもわからんのか...
いくらなんでもゆとりすぎるだろ

494 名前:nobodyさん mailto:sage [2009/03/25(水) 10:08:36 ID:???]
文字xが10個以上である場合にマッチさせるのに
x{9}x+

x{10}x*
は共に等価でOKだとおもうが、
一般論で言うとどちらが速い動作になる?



495 名前:nobodyさん mailto:sage [2009/03/25(水) 10:43:53 ID:???]
どっちも同じ動作なんだから同じじゃね
それよりももう少し改良できると思うんだがな

496 名前:nobodyさん mailto:sage [2009/03/25(水) 12:38:18 ID:???]
実装次第で一般論ではなんともいえないと思われる。

どっちを食わせても全く同じオートマトンに変換してから実行するの
でぴったり同じになる実装、なんてのもあるかもしれないし、
逆になぜか+が不得意な実装とか*が不得意な実装とかあるかも
しれない。モノによっては{..}が不得意でxを並べたほうがいいと
いうことも考えられるな。

497 名前:494 mailto:sage [2009/03/25(水) 15:11:33 ID:???]
>>495-496
なるほど。
ありがとう。。。

498 名前:中山 [2009/03/29(日) 09:39:01 ID:MqxV8vA3]
PHP 正規表現について

$str = 'test1?test2/test3;test4';

この文字の
test1
test2
test3
test4
を取り出すにはどうしたらよいでしょうか?

この価を
data1=test1&data2=test2&data3=test3&data4=test4
と変換したいです

preg_replaceを使っています
$str = preg_replace("・^([a-zA-Z0-9]+\?+[a-zA-Z0-9]+)\/+[a-zA-Z0-9];+[a-zA-Z0-9)$・","data1=$1&data2=$2&data3=$3&data4=$4",$str));


これではダメみたいです

499 名前:nobodyさん mailto:sage [2009/03/29(日) 09:49:02 ID:???]
どーゆークエリだそりゃ

500 名前:nobodyさん mailto:sage [2009/03/29(日) 09:54:22 ID:???]
$str = 'test1?test2/test3;test4';
この内容がどういうパターンで変動し得るかがわからん
書かれている正規表現見てみると ? / ; の順に区切り文字があることは固定で決まってる?

501 名前:中山 [2009/03/29(日) 19:51:10 ID:MqxV8vA3]
はい。固定できまってます。

ただし、

test1
などの文字列は半角英数字限定です。

502 名前:nobodyさん mailto:sage [2009/03/31(火) 12:09:46 ID:???]
>>498
data1,data2,data3・・・きめえwww

503 名前:nobodyさん mailto:sage [2009/04/14(火) 19:16:36 ID:???]
以下のような文字列を置換ですべて削除したいのですが
どうかけばいいのでしょうか

onMouseOver="refPopUp(1,event)" onMouseOut="hidePop()"
onMouseOver="refPopUp(23,event)" onMouseOut="hidePop()"
onMouseOver="refPopUp(345,event)" onMouseOut="hidePop()"

3行すべて削除

試した正規表現
onMouseOver="refPopUp(\d+{1,3}.,event)" onMouseOut="hidePop()"

504 名前:nobodyさん mailto:sage [2009/04/14(火) 19:24:30 ID:???]
3}.,の.ってなによ



505 名前:nobodyさん mailto:sage [2009/04/14(火) 19:31:15 ID:???]
>>504
すまんこ

一応自力解決しました。さくらエディタの正規表現オンで動作確認
onMouseOver="refPopUp\(\d{1,3},event\)" onMouseOut="hidePop\(\)"

506 名前:nobodyさん mailto:sage [2009/04/14(火) 20:09:33 ID:???]
下記の2文にあるfontタグを消したいです。
正規表現を用いた1度の置換で消せますか?

<dd><font style="font-size:;color:;"> テスト <br> テスト </font><br><br></dd>
<dd><font style="font-size:;color:;"> テスト2 <br> テスト2 </font><br><br></dd>


考え方として
<dd><font style="font-size:;color:;">がある行のうち</font>を削除し、そのあと<font style="font-size:;color:;">を削除
これで行けそうかと思ったのですが、●●がある行のうち○○を削除、という正規表現がわかりませんでした・・・

507 名前:nobodyさん mailto:sage [2009/04/16(木) 23:48:40 ID:???]
>>506

(.*)<font style="font-size:;color:;">(.*)<\/font>(.*)
$1$2$3
とすればいいんじゃない。
どこの正規表現を使うかによりできないかもしれないけど。

$nはn番目の括弧に該当するから<font style="font-size:;color:;">と</font>が消える。
<font></font>がネスとしているなど複数あったら駄目かもしれないけど。

508 名前:nobodyさん mailto:sage [2009/04/17(金) 04:08:26 ID:???]
>>507
サクラエディタで正常に動作することを確認しました。
ありがとうございます!

509 名前:nobodyさん mailto:sage [2009/04/25(土) 21:30:02 ID:???]
 ヽ('A`)ノ  ○○表現!
  (  ) 
  ノω|


510 名前:nobodyさん mailto:sage [2009/04/29(水) 05:47:07 ID:???]
チカンしまくり

511 名前:nobodyさん mailto:sage [2009/05/12(火) 06:32:22 ID:???]
12?34
12??34

違いが出るときはどんなときか答えなさい


512 名前:nobodyさん mailto:sage [2009/05/18(月) 16:49:08 ID:???]
$txt = aaa(’12165;

のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、
この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません
妙案ないでしょうか

php5 or 4

513 名前:nobodyさん mailto:sage [2009/05/18(月) 22:40:33 ID:???]
aaaの後ろにうじゃうじゃって
$txt = aaa(’12165;
$txt = aaa(’5445;
$txt = aba(’13;
$txt = aaa(’99999;
こうなんか?

結果 = preg_replace('/’(\d+);/', '$1', 入力);

結果
$txt = 12165
$txt = 5445
$txt = aba(’13;
$txt = 99999



514 名前:nobodyさん [2009/05/21(木) 08:03:14 ID:bdo2M1uu]
すみません、質問させてください。

曲名のリストを一括置換しようとしています。具体的には"〜 by"が
入る丸括弧だけ四角括弧"[ ]"に置き換えたいのです。


This is me (talk) (Composed by Johan)

This is me (talk) [Composed by Johan]

どのような書式にすればいいかご教示お願いします。




515 名前:nobodyさん mailto:sage [2009/05/21(木) 08:25:36 ID:???]
正規表現と一言に言ってもね、正規表現にもいろいろあってね、どの正規表現かで
書き方も全然違ってくるからね、その質問だけじゃなんとも言えないのね。

初心者用のサイトにいってらっしゃいなのね。

図解でみる正規表現入門
funcchan.blog16.fc2.com/

516 名前:nobodyさん mailto:sage [2009/05/21(木) 08:34:21 ID:???]
$s= "This is me (talk) (Composed by Johan)";
$s=~ s/\(([^\)]*\bby\b[^\)]*)\)/[$1]/gi;

517 名前:nobodyさん mailto:sage [2009/05/21(木) 09:43:06 ID:???]
>>515-516
ありがとうございます。

STEPというタグエディタで100曲ほど一括置換しようと
目論んでます。

教えていただいたサイトとスクリプトを手がかりに
現在悪戦苦闘中です。ちょっと頑張ってみます。

518 名前:nobodyさん mailto:sage [2009/05/23(土) 22:18:11 ID:???]
こういうときにこまるわけか

special days(arranged by hor version.) (Composed by Ellic)



519 名前:nobodyさん mailto:sage [2009/05/27(水) 00:18:24 ID:???]
質問させて下さい。

ABC
…LMNO………
……LMNO……
………LMNO…
XYZ

というような文章があったとします。
「LMNO」の前後(「…」)には文字(日本語や英数字)があります。

Perl5互換の正規表現が使えるテキストエディタや、BREGEXP.DLLが使える置換えソフトを使用し、
「ABC」から「XYZ」までにある「LMNO」を「OOOO」に置換えすることは可能でしょうか?
特定の範囲内の文字だけを置換えする正規表現がわからず、検索文字列と置換え文字列の指定で困っています。
どのようにすれば良いのか教えて頂けると助かります。よろしくお願いします。

520 名前:nobodyさん mailto:sage [2009/05/27(水) 22:50:49 ID:???]
s/(ABC.*)LMNO(.*XYZ)/$1OOOO$2/g
ってことか?

521 名前:519 mailto:sage [2009/05/29(金) 23:05:57 ID:???]
>>520
具体的な指定を教えて頂いてありがとうございました。
早速試したのですが置換えできませんでした。
「Speeeeed」という置換えソフトではBREGEXP.DLLも使えるのですが、それでも置換え結果がゼロのままです。
こちらのスレをもう一度読み返してもっと正規表現を勉強したいと思います。

522 名前:nobodyさん mailto:sage [2009/06/07(日) 21:54:50 ID:???]
s/(?>ABC)(.*)LMNO(.*)(?<=XYZ)/${1}0000$2/
これを何回もかけるとか?
なんか知らんけどgオプションつけても無駄だったんだよなぁ

523 名前:nobodyさん mailto:sage [2009/06/11(木) 09:11:23 ID:???]
>>521
>>520にsパターン修飾子つけて再帰させるしかねーよ

524 名前:nobodyさん mailto:sage [2009/06/12(金) 11:14:20 ID:???]
sed でも使えばー?



525 名前:nobodyさん [2009/06/13(土) 23:07:31 ID:56/XckFT]
Perlの正規表現で質問させて下さい。
yyyy/mm/entry-basename/index.php
↑はどのように記述すればいいのか、お手数ですがご教授願います<(_ _)>

526 名前:nobodyさん mailto:sage [2009/06/14(日) 09:14:31 ID:???]
正規表現で表すには前提条件がないと答えられない
yyyy部分が4桁数字の西暦?
mm部分が2桁数字の月(ゼロサプレス)?

m#^\d{4}/\d\d/entry-basename/index\.php$#

527 名前:525 [2009/06/14(日) 17:21:47 ID:Ycy68Wtw]
>>526さん解凍有り難う御座います。
素人で質問が下手くそで申し訳有りません
↓の場合だと
"/diary/archives/yyyy/mm/entry_basename.php"
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"
↑のように置き換えるみたいなのですが、

同様に↓の場合だと
"yyyy/mm/entry-basename/index.php"
どのように置き換えるのかが分からなくて、お手数ですがご教授下さい。

分かりにくくて申し訳ないです。

528 名前:nobodyさん mailto:sage [2009/06/14(日) 21:15:28 ID:???]
ちなみにゼロで桁を埋めるのは「ゼロパディング」ね。


> ↑のように置き換えるみたいなのですが、

「置き換える」って、いわゆる正規表現による置換処理の意味じゃなくて
「検索表現に翻訳する」って意味なのか。凄まじく紛らわしい。

さておき…、
で、どの単語が可変部分なのかがさっぱり分かんないんだよね。
"index.php" は固定なの?

それと、上の置き換え例では "entry_basename" になっているけど
お尋ねの件は "entry-basename" だよね。単なる typo かな?
"\w" を使う上では、検索対象文字列の "_" と "-" との違いは本質的だよ。

要するに、質問するにしては不備が多過ぎます。

529 名前:525 [2009/06/14(日) 23:33:00 ID:Ycy68Wtw]
>>525です

「検索表現に翻訳する」という意味です。失礼しました
そして"index.php"は固定で、"entry-basename"が正解です。

www.magicvox.net/archive/2005/05261744/
ここのページにあるランキングが利用したいのですが、
「ランキング集計したいファイル名にマッチするよう Perl の正規表現
を修正してください。」

ここの意味が分からなくて困っています。他のサイトなどを見てみると、
当方の個別エントリーパスは"/diary/archives/yyyy/mm/entry_basename.php"なわけですので、
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"としました。
とあります。

私の場合、エントリーパスは"yyyy/mm/entry-basename/index.php"です。
これを"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"のように記述
するにはどうすればいいのでしょうか?

長文失礼しました。

530 名前:nobodyさん mailto:sage [2009/06/15(月) 00:03:48 ID:???]
'/\d{4}\/\d{2}\/(\w+)\/index\.php/'

謎すぎるけど PHP の preg 使って entry_basename を $1 に入れるんだと
思い込んでみた

531 名前:nobodyさん mailto:sage [2009/06/15(月) 00:06:02 ID:???]
で、その "entry-basename" ってのはその文字列そのものではなくて
「ここにいろんな文字列が入ります」っつーダミーなんだろうけど、
どういった文字で構成されるの?

532 名前:nobodyさん mailto:sage [2009/07/05(日) 16:07:10 ID:???]
perlでテキストデータ内の日付部分を、
2009/1/1

2009/01/01
に一行で置換したいのですが。
s|/([0-9][^0-9])|/0$1|gm;
だと、2回同じ処理が必要になってしまいます。
いい方法ありますか?

533 名前:nobodyさん mailto:sage [2009/07/05(日) 16:12:40 ID:???]
splitとsprintf

534 名前:nobodyさん mailto:sage [2009/07/05(日) 17:05:36 ID:???]
>>532
後ろの1文字ってマッチする?
マッチするなら
1 while $str =~ s|/([0-9][^0-9])|/0$1|gm;
でいけるんじゃない



535 名前:nobodyさん mailto:sage [2009/07/05(日) 17:40:16 ID:???]
m はなくてもよさそうに見える

536 名前:nobodyさん mailto:sage [2009/07/05(日) 18:26:28 ID:???]
>>534
できました。ありがとうございます!

>>535
おっしゃる通りでした。


537 名前:nobodyさん mailto:sage [2009/07/05(日) 18:27:53 ID:???]
たぶんgもいらないよ

538 名前:nobodyさん mailto:sage [2009/07/08(水) 01:27:46 ID:???]
$str =~ s{/([0-9])(?![0-9])}{/0$1}g;

539 名前:nobodyさん mailto:sage [2009/07/15(水) 09:40:19 ID:???]
秀丸で、CSSの : までの部分を強調表示したいのですが、
どう表現すればいいのでしょうか。
以下の例だと、font-size:の部分です。

h1 {
font-size: 150% !important;
}

540 名前:nobodyさん mailto:sage [2009/07/15(水) 13:56:52 ID:???]
>>539
CSSに数字って出るんだっけ?
[\-a-za-z0-9]+[ \t]*:

541 名前:nobodyさん mailto:sage [2009/07/15(水) 14:47:39 ID:???]
ありがとうございます。
見やすくなりました!
:first-childや:notのセレクタで誤爆していたので

[\-a-za-z0-9]+[ \t]*:(?!\first|last|not)

としました。

また以下のようなものだと誤爆するみたいですが
これはほとんど使わないので目をつむろうと思いますw

BODY[style="width: 100%; height: 100%;"] {
font-size: 150% !important;
}

542 名前:nobodyさん mailto:sage [2009/07/15(水) 15:14:34 ID:???]
良く考えたらもっと一杯あった
[\-a-za-z0-9]+[ \t]*:(?!first|last|not|hover|focas|active|visited|link|lang|after|before)

543 名前:nobodyさん [2009/07/15(水) 23:25:43 ID:2a7dmfqp]
/(^-^;)/w(^o^)vv(-_-;)vv[^-^](^_^;)/

544 名前:nobodyさん mailto:sage [2009/07/22(水) 16:01:40 ID:???]
すみません質問させてください。
正規表現初心者です。
秀丸で、正規表現を使って文字列の置換をしようとしています。

例)
abcd,efag),

これを最初の[,]だけを[',]に置換したいと思っています。

検索文字列: [^)],
置換文字列: ',
とすると、

abc',efag),

のように文字列の後ろの1文字まで消えてしまいます。
文字列が消えないように、最後尾でない[,]だけを置換するにはどのように指定すればいいでしょうか。
教えてください。



545 名前:nobodyさん mailto:sage [2009/07/24(金) 05:32:15 ID:???]
秀丸でサポートされている正規表現の機能がどれだけのものか分からんからなあ。

候補 1(質問者の方針参考)
検索文字列: ([^)]),
置換文字列: $1',

候補 2
検索文字列: ,(?!$)
置換文字列: ',

無理なら一旦「,\n」を「,」を含まない別の適当な文字列に変換して、
全ての「,」を「',」に変換してから元に戻すとか。

546 名前:nobodyさん mailto:sage [2009/08/01(土) 13:06:24 ID:???]
候補 3
検索文字列: |-^)v!!
置換文字列: (^o^)/~~

547 名前:nobodyさん mailto:sage [2009/09/01(火) 17:17:50 ID:???]
PHP5で、$txtに格納された

<a href="javascript:userid('123456');">テキスト</a>
※「123456」と「テキスト」は変化します

といった並びの文字列からタグをぬいて

123456,テキスト,

とカンマ区切りにしたいのですが、何か良い方法はないでしょうか

548 名前:nobodyさん mailto:sage [2009/09/01(火) 17:51:35 ID:???]
自己解決しました
お騒がせして申し訳ありますん

549 名前:nobodyさん mailto:sage [2009/09/03(木) 10:54:41 ID:???]
>>548はだれ?

550 名前:nobodyさん [2009/09/03(木) 12:19:35 ID:54RqrMPZ]
301でサイト移動をする場合に関数に色々な値があるのをそれぞれリダイレクトさせたい場合は
一挙に書くにはどうすればいいでしょうか?


1つ1つ書くと下記のようなのを1つにしたいです。

Redirect 301 /index.php?a=1 "www.sample.jp/index?a=1"
Redirect 301 /index.php?a=2 "www.sample.jp/index?a=2"
Redirect 301 /index.php?a=3 "www.sample.jp/index?a=3"
 ・
 ・
 ・
Redirect 301 /index.php?a=a1 "www.sample.jp/index?a=a1"
Redirect 301 /index.php?a=b2 "www.sample.jp/index?a=b2"
Redirect 301 /index.php?a=c3 "www.sample.jp/index?a=c3"
 ・
 ・
 ・

551 名前:nobodyさん mailto:sage [2009/09/03(木) 12:27:59 ID:???]
>>550
誘導元で礼も無しとか失礼な人だな

552 名前:nobodyさん [2009/09/03(木) 12:47:58 ID:54RqrMPZ]
率直に言って「スレ違い」って程のことか?
と思ったので礼などは書かなかった。

どっちかというとこっちの方が適切とは思うが、
【.htaccessファイル(「分散設定ファイル」)の書き方・使い方などに関するスレです。 】
って説明のスレに書いても別に間違ってないと思う。

553 名前:nobodyさん mailto:sage [2009/09/03(木) 15:52:56 ID:???]
>>550
スレ違い。

【Apache】mod_rewriteについて語るスレ
pc11.2ch.net/test/read.cgi/php/1023791370/


個人的には礼とかどうでもいいと思うけど、
マルチ質問扱いされて厄介なことになる可能性があるので、
「向こうで質問し直します」とかひとこと言っておいた方が無難とは思う。

あと、ドメインの例示に使えるのは "example.jp" ね。

554 名前:nobodyさん mailto:sage [2009/09/13(日) 17:57:11 ID:???]
PHPでPerl互換のpreg_replace関数を使った置換を行おうとしているのですが、
やりたいことがうまく実現できません。

やりたいことは、

・<tagA>という文字列と</tagA>のあいだに<tagInsert>という文字列を挿入したい
・ただし、<tagA>の中に<tagB>という文字列がある場合は、その<tagB>の下に挿入したい


<失敗した正規表現>
$new_str = preg_replace("/<tagA(.*?)>(.*?)(<(?!tagB).)*/", '<tagA\\1>\\2<tagInsert>\\3', $str);

<実現したい例>
<tagA>
<tagB>
<tagB>
<tagC>
</tagA>

↓置換実行
<tagA>
<tagB>
<tagB>
<tagInsert>
<tagC>
</tagA>



555 名前:nobodyさん [2009/09/27(日) 12:15:08 ID:???]
 /身長:(\d+)\n体重:(\d+)/
という正規表現に対し、例えば
 "身長:175\n体重:67"
という文字列がきたら
 "身長:<font color="red">175</font>\n体重:<font color="blue">67</font>"
のようにHTMLタグを追加したい。

ただし
 "身長:100\n体重:100"
のように身長と体重が同じ場合も身長は赤、体重は青にしたい。

もっと欲をいえば正規表現は身長・体重だけでなく
 /年齢:(\d+)\n好きな食べ物:(\S+)/
のように可変にしたい。


556 名前:nobodyさん mailto:sage [2009/09/27(日) 13:11:58 ID:???]
そうですか

557 名前:555 [2009/09/27(日) 15:20:08 ID:???]
どうやればいいか知恵を貸してください

558 名前:nobodyさん mailto:sage [2009/09/27(日) 16:41:20 ID:???]
環境は?

559 名前:nobodyさん [2009/09/27(日) 16:49:26 ID:???]
perlでもrubyでも
できるだけトリッキーでなくて普通の正規表現のパターンマッチと置換でできる範囲で

560 名前:nobodyさん mailto:sage [2009/09/27(日) 23:10:15 ID:???]
絶対正規表現だけで書かなきゃだめなの?
普通に関数作る方が現実的だと思うけど

561 名前:nobodyさん mailto:sage [2009/09/28(月) 01:47:40 ID:???]
if使って分岐させれば

562 名前:nobodyさん mailto:sage [2009/09/28(月) 08:53:02 ID:???]
正規表現をかじったけどちゃんと理解するにいたってない人は
正規表現でやるとかえって面倒な事までさせようとしていらない
苦労をする傾向があるね。理解しちゃえば使った方がいいかどうか
判断つくようになるんだが。

563 名前:nobodyさん mailto:sage [2009/09/28(月) 10:18:45 ID:???]
>>555
こんなのとか?

html = str.sub(/(.+?)(:)(\d+)\n(.+?)(:)(\S+)/) {
"#{$1}#{$2}<font color=\"red\">#{$3}</font>\n#{$4}#{$5}<font color=\"blue\">#{$6}</font>"
}

564 名前:nobodyさん mailto:sage [2009/10/06(火) 22:32:03 ID:???]
phpのpreg_matchなのですが
文字列の中のURLからホストを取得するのは解るのですが
ホスト名とその後に続くディレクトリ名を取得する方法を教えて下さい。

$url = "hogehoge.com/hoge/index.php";

これならば
hogehoge.com/hogeの部分です。

お願いいたします。





565 名前:nobodyさん [2009/10/13(火) 11:08:03 ID:8X+N74J6]
phpで、いくつか特定の拡張子を持つファイルをマッチさせたいのですが、
最後を意味する$は下記のように最終的に1つでよいですか

if (preg_match("/\.html|\.php|\.txt$/",$value)) {
$chk = 1;
}

それともこのように全部に$が必要ですか?

if (preg_match("/\.html$|\.php$|\.txt$/",$value)) {
$chk = 1;
}

566 名前:nobodyさん mailto:sage [2009/10/13(火) 11:28:58 ID:???]
>>564
parse_url使うか"/(.*)\//"

>>565
やってみればわかることだけど当然全部に必要
だから\.(html|php|txt)$みたいに括弧でくくるのが常套だけどマッチした値を取得する必要ないなら
\.(?:html|php|txt)$と書いて少し軽くできる

567 名前:565 [2009/10/13(火) 12:34:51 ID:8X+N74J6]
>>566
ありがとうございました( ^ω^)

568 名前:nobodyさん mailto:sage [2009/10/14(水) 08:58:15 ID:???]
perl で,
「<と>で囲まれた文字列内の abc を def に全て置換する」
というのは正規表現でどう書けばよいでしょうか。

マッチだけならば
"<asaabcasalaabca>" =~ /\<(.*?)(abc(.*?))*?\>/
のようにしてマッチさせられるのですが,繰り返しがあるので後方参照で取得できません。

569 名前:nobodyさん mailto:sage [2009/10/14(水) 09:18:20 ID:???]
>>568
せっかくperlでプログラム書けるんだから、

1. 「<」と「>」に囲まれた文字列を取り出す
2. 1で取り出した文字列のabcをdefに置換
3. 2の結果を「<」「>」で挟む

とやれば難しいことは何もない。

570 名前:568 [2009/10/14(水) 10:26:28 ID:6OWMkMrw]
>>569
いや,確かにおっしゃるとおりなのですが,
Perl互換の正規表現を採用しているエディタで文章を打っているときに,
いちいち使い捨てのPerlスクリプトを作るのが面倒で,
せっかくエディタに内蔵されている正規表現置換機能で置換できれば便利なのにな……と思った次第です。

571 名前:nobodyさん mailto:sage [2009/10/14(水) 10:46:05 ID:???]
そりゃそのエディタの説明書に書いてあるだろ

572 名前:nobodyさん mailto:sage [2009/10/14(水) 16:45:59 ID:???]
「< と > で囲まれた文字列内のある一つの abc を def に置換する」を、
そのエディタのキーボードマクロ機能で繰り返し適用すればよくね?

573 名前:nobodyさん mailto:sage [2009/10/14(水) 17:59:48 ID:???]
いや、そのエディタに正規表現での置換機能もあるだろ、普通

574 名前:nobodyさん mailto:sage [2009/10/14(水) 18:10:49 ID:???]
置換というか補完じゃね?



575 名前:572 mailto:sage [2009/10/14(水) 18:34:24 ID:???]
>>573
エディタの置換機能だと複雑なことができない (この場合 < と > の間を繰り返し置換)
からどうすればいいの?っていう質問だと思ったんだが、違うのかな?

どのエディタ使ってるとか晒してくれるともっと的確に答えれる香具師がいそうだが。

576 名前:568 mailto:sage [2009/10/14(水) 23:09:15 ID:???]
>>571-574
いえ,ですから,エディタ(Mac OS X の Jedit X です)に正規表現置換機能が備わっていることは分かっています。
その正規表現の書き方を知りたいのです。

「< と > の間の繰り返し置換」は正規表現では実現不可能,ということであれば,
やむを得ずスクリプトを組みます(Perl あるいは Jedit X のマクロ言語である AppleScript)が,
可能であれば正規表現置換で実現したいのです。
やはりエディタウィンドウ内で完結するのは手軽ですので。

先読み・後読みや再帰を利用した超絶技巧的正規表現でも構いません。アイデアを求めています。


577 名前:nobodyさん mailto:sage [2009/10/15(木) 00:24:07 ID:???]
>>568=570=576
テキストエディタの実装する正規表現には方言がある。
ここで尋ねても埒が明かない可能性が大なので、新Mac板の専用スレッドに引っ越すことを推奨。

Mac用テキストエディタ Jedit X / 1.0〜4.0
pc11.2ch.net/test/read.cgi/mac/1248500724/

578 名前:nobodyさん mailto:sage [2009/10/15(木) 13:12:35 ID:???]
>>576
Perlでしてみた。
そのエディタは後方参照はできるんかな?

my $str = "<asaabcasalaabca>";
print $str, "\n";

$str =~ s/((?:<|\G).*?)abc(?=.*?>)/\1def/g;

print $str, "\n";

579 名前:578 mailto:sage [2009/10/15(木) 13:19:37 ID:???]
>>568のケースだけなら大丈夫だけど、汎用的には不具合がありそうなので取り消し

580 名前:578 mailto:sage [2009/10/15(木) 13:37:10 ID:???]
試行錯誤した結果、以下でいけそうな感じだけど、どうだろう?

$str =~ s/((?:<|\G)[^<>]*?)abc(?=[^<>]*>)/\1def/g;


581 名前:nobodyさん mailto:sage [2009/10/15(木) 13:51:05 ID:???]
utf-8の文字コード内にない文字を探すにはどんな感じにすればいいんでしょうか?
javascriptです。


582 名前:nobodyさん mailto:sage [2009/10/15(木) 20:38:57 ID:???]
>>568
Perlだったら。
s/<(.*?)>/(my $s = $1) =~ s{abc}{def}g; "<$s>"/ges;

エディタのマクロでやるのがいいかなと思うけど、ちょっと面倒。

583 名前:nobodyさん [2009/10/19(月) 23:25:42 ID:/Zspq1xO]
PHPでとあるファイルを読み込んで、読み込んだファイルの中に下記の記述
があれば正規表現(preg_replace等)で空白に置き換えたいと考えています。
正規表現で正規表現を消す記述の仕方がわかりませんorz
どのような正規表現を記載すればよいでしょうか。
すみませんがお分かりになられる方が居られましたらご教授よろしくお願いいたします。


↓↓↓消したい記述その1↓↓↓
if ( /^(To|Cc): admin@admin\.com$/:h || /^(To|Cc): .*\<admin@admin\.com\>/:h )
{
cc \"| /usr/bin/nextbb -c ISO-2022-JP -s 'xxxxx' -A 'From:yyyyy <admin@admin.com>' -t
/home/sendmail -t\"
}


↓↓↓消したい記述その2↓↓↓
/^[a-zA-Z0-9\-\.\/\[\]\(\)\{\}\|@`:<>,!?\"'#\$%&*+;\\=^_~ ]*?$/"




584 名前:nobodyさん mailto:sage [2009/10/19(月) 23:36:46 ID:???]
Linuxコマンドが入力されるインプットボックスの入力チェック処理を
正規表現でやりたいのですが、どのようなチェックを行えばいいでしょうか?



585 名前:nobodyさん mailto:sage [2009/10/20(火) 09:19:58 ID:???]
それはキミがどのような入力を許可したいかがわからないから答えようがない

586 名前:nobodyさん mailto:sage [2009/10/23(金) 15:06:47 ID:???]
それを聞いているんじゃないのか

587 名前:nobodyさん mailto:sage [2009/10/23(金) 17:07:26 ID:???]
Linuxコマンドとか、インプットボックスって何?

588 名前:nobodyさん mailto:sage [2009/10/24(土) 13:30:39 ID:???]
<input>で何か入れてsubmitすると、それが実行されるのか?
なんか巧妙にうまくごまかして危険なコマンド実行されそうだな。

正直俺の知識では知らん。
どんなコマンドも受け付けたくないな。
そもそもコマンドによってチェック内容は変わるんじゃないの?

589 名前:nobodyさん mailto:sage [2009/10/24(土) 18:23:59 ID:???]
<input name="cmd" type="text" value="rm -rf ." />

590 名前:nobodyさん mailto:sage [2009/10/25(日) 08:12:45 ID:???]
>>584
俺はこれからどのように生きていけばいいでしょうか?
くらいに漠然とした質問だなこりゃ。

構文的に shell が受理可能かどうかなら Perl なら shellwords.pl 使うとかな。

591 名前:nobodyさん mailto:sage [2009/12/09(水) 19:11:48 ID:???]
まだ正規表現が素人なので教えてください。
たとえば以下のように四行の文章があって
それら文章の最初(一番目)の空白文字だけを検索するには
どうすればいいのですか?

The environment of contents industries is so drastically changing,
though Japan has not fully.
taken advantage of the changes to develop.
its presence in the global market.

The とenvironmentの間の空白文字 、though と Japanの間
taken とadvantage の間の空白文などなどです

592 名前:nobodyさん mailto:sage [2009/12/09(水) 21:08:56 ID:???]
Perlで関数の括弧をドンドン入れ子にしていく正規表現書いてるだけと
(\([^()]*(((\([^()]*\)[^()]*))*\)[^()]*)*)*\)
↑これに穴は無いよな!?
どんなに入れ子にしても、エラーはでないかな
初めて作った正規表現なんだが。ご指南、よろ

593 名前:nobodyさん [2009/12/20(日) 20:33:27 ID:fe9ijwb+]
0*(\d+)

これの意味を教えてください

()の中はわかるのですが前がよくわかりません

594 名前:nobodyさん mailto:sage [2009/12/20(日) 20:38:26 ID:???]
数字の並びから先頭の0を取り除いてる



595 名前:nobodyさん [2009/12/20(日) 20:44:43 ID:fe9ijwb+]
なるほど
00200 とかの前の0を無視して検索できるという感じですか

596 名前:nobodyさん mailto:sage [2009/12/21(月) 08:18:48 ID:???]
>> 0*(\d+)
0が0個以上並んだ後に、0〜9が1個以上並ぶ。

597 名前:nobodyさん mailto:sage [2009/12/21(月) 20:42:38 ID:???]
>>592
見てないけど無理
(??{})あたり使えばいける

598 名前:nobodyさん [2009/12/23(水) 22:25:52 ID:Hajqsr0G]
HTMLタグの <ul> <li> について、入れ子構造になっていた場合も考慮しつつ Pukiwiki等の記法に変換しようと考えています

<ul>
  <li>1行目@1段目
  <li>2行目@1段目
  <ul>
    <li>3行目@2段目
    <li>4行目@2段目
  </ul>
  <li>5行目@1段目
</ul>

これを

- 1行目@1段目
- 2行目@1段目
-- 3行目@2段目
-- 4行目@2段目
- 5行目@1段目

こんな感じにしようと四苦八苦しているのですがどうにも難しく…
ヒントだけでも良いのでアドバイスをお願いします。

今は、<ul>が存在する限り
<ul>( <ul>以外 )<\/ul> を抜き出して
その中を /<li>(.*?)<\/li>/s で置き換えて、抜き出し元と差し替えて
最初に見つかった<ul>(.*?)<\/ul>について <ul> と </ul>を削除、と考えていますが
最初の <ul>以外 の時点で既につまづいている始末です。

599 名前:nobodyさん mailto:sage [2009/12/23(水) 23:13:19 ID:???]
$head= '';
$s=~ s/(<ul>)\s*|(<\/ul>)\s*|<li>(.*)(?:<\/li>)?\s*/$1?scalar($head.='-',''):$2?scalar(($head=substr($head,1)),''):"$head $3\n"/gei;
print $s;

600 名前:nobodyさん [2009/12/29(火) 00:08:08 ID:F3P1tBWB]
文字列の中にある¥を除去したかったのですが、preg_replace('/¥/')や
preg_replace('/¥¥/')では削除できなかったのですが、preg_replace('/¥¥¥/')だと削除できました・・・
これはなぜでしょうか。
¥は次に有る文字をエスケープするわけですから、preg_replace('/¥¥/')でいけそうな気がするのですが。。。
正規表現初心者につき、低レベルですがご教授よろしくお願いいたします。
(上記は、あえて半角ではなく、全角の¥で説明しています。)



601 名前:nobodyさん mailto:sage [2009/12/29(火) 12:06:00 ID:???]
やりたいこと自体はstr_replaceでできるだろうけどphpの正規表現がなんかおかしいな。
perlならそれで通るはずだけど。

602 名前:nobodyさん mailto:sage [2009/12/29(火) 12:38:00 ID:???]
文字列としてのエスケープと正規表現としてのエスケープは別。
'/\\/' は /\/ '/\\\/' は  /\\/ '/\\\\/' も /\\/  



603 名前:600 [2009/12/29(火) 22:52:30 ID:F3P1tBWB]
>>601-602
なるほど!!
そういうことでしたか。
ありがとうございます!

604 名前:nobodyさん mailto:sage [2009/12/30(水) 09:01:55 ID:???]
ああそうか、phpだとシングルクオートで囲んでも\はエスケープに解釈されるのか。



605 名前:nobodyさん mailto:sage [2010/01/24(日) 19:36:14 ID:???]
<a href="test.php?id=0001">あいうえお</a>
<div class="id">0001</div>
<div class="time">20100101010101</div>
<div class="name">なまえ</div>
<div class="body">コメント</div>

上記のタグがあったとして、
preg_match_all("/<a href=\"test.php\?id=0001\">(.*)/<\/div>\" style=\"display: none;\">/", $hoge, $data);
のように書くと、指定したIDのaタグ内の文字がとれるのですが、その下の<div class="id">から<div class="body">の後の</div>までのタグ、
もしくはそのタグ内の文字列を抽出したいのですがうまくいきません。
それぞれのタグは1行でつながってるものとして、複数タグの範囲内を取るのは可能なのでしょうか?



606 名前:nobodyさん mailto:sage [2010/01/24(日) 20:12:18 ID:???]
複数ならpreg_match_all()使うけど一つならpreg_match()で以下のように

preg_match('/\bid=(\d+)[^>]+>([^<]*)<\/a>.*?"id">\1<.*?"time">(\d+)<.*?"name">([^<]*)<.*?"body">([^<]*)</is', $s, $match);

607 名前:nobodyさん mailto:sage [2010/01/24(日) 21:01:02 ID:???]
有難うございます。
IDが0001以外のコメントもひろっちゃっていますが、かなり希望するのに近づいてきました。

もう少し細かく書くべきでしたが、複数のIDがあり、同じIDでのコメントも複数あった場合です。
上記のタグが一つのセットとして、いくつかある中の
<a href="test.php?id=0001">あいうえお</a>のタグとコメント部分をまとめて表示させたいと思っています。
id=の部分を改変して直接0001を指定したらだめだった・・・

608 名前:nobodyさん mailto:sage [2010/01/25(月) 01:28:52 ID:???]
試行錯誤したらなんとか希望通りのものができました。
正規表現だけに囚われててプログラムがよろしくなかった…

609 名前:nobodyさん mailto:sage [2010/02/03(水) 12:34:08 ID:???]
先生質問です
Rewriteで動的URLを静的URLにしたいのです

やりたいことは6つのクエリを書き換えたいのですが
6つのうち1つのとき、2つのとき、・・・6つのときというように組み合わせがかなりの数になってしまうと思うのですが

順列で 6P1 + 6P2 + 6P3 + 6P4 + 6P5 + 6P6 と考えてよいのでしょうか?

6つも書き換えなんてやっぱ無理でしょうか?

610 名前:nobodyさん mailto:sage [2010/02/03(水) 13:22:42 ID:???]
ちょw

611 名前:nobodyさん mailto:sage [2010/03/02(火) 21:59:18 ID:???]
 

612 名前:nobodyさん mailto:sage [2010/03/02(火) 22:11:34 ID:???]
test

613 名前:nobodyさん mailto:sage [2010/03/08(月) 15:33:08 ID:???]
MySQLダンプ内の

/*------------------ここから--------------------*/
DROP TABLE IF EXISTS `table100`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `table100` (
`code1` varchar(5) default NULL,
`zip1` varchar(7) default NULL,
`address1` varchar(250) default NULL,
`address2` varchar(250) default NULL,
`div_1` varchar(1) default NULL,
`div_2` varchar(1) default NULL,
`import_date` timestamp NULL default NULL,
`rec_key1` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`rec_key1`)
) ENGINE=InnoDB AUTO_INCREMENT=121471 DEFAULT CHARSET=eucjpms;
/*!40101 SET character_set_client = @saved_cs_client */;
/*------------------ここまで--------------------*/

`table100` → `TABLE100`
`code1` → `CODE1`
など逆クォートで囲まれた小文字→大文字変換を一括で行いたいです。。
できればlinux コマンドライン、perl などでお願いします。。


614 名前:nobodyさん mailto:sage [2010/03/08(月) 18:01:54 ID:???]
たぶんs/`(\w+)`/`\U$1`/g



615 名前:nobodyさん mailto:sage [2010/04/11(日) 00:10:39 ID:???]
eregで半角記号のみをマッチさせてfalseを返す処理を組んでいるのですが、
何故か一部の漢字が引っ掛かってしまいます…確認した所では夕焼けの「夕」の
文字などです。

if(ereg ("[[:punct:]]",$_POST['名前']))

こんな感じです。今までは普通に機能していたんですが…
どなたかアドバイス頂けないでしょうか?

616 名前:nobodyさん mailto:sage [2010/04/11(日) 02:49:42 ID:???]
>>615
ereg って多バイト文字に対応してないんじゃないか?


617 名前:nobodyさん mailto:sage [2010/04/12(月) 09:23:26 ID:???]
eregはPHP5.3.0から非推奨になってるので新しく書くプログラムでは
使わないほうがいいよ。perl互換正規表現(PCRE)をお使いください。

618 名前:nobodyさん mailto:sage [2010/05/02(日) 00:32:33 ID:???]
:wink:, :lol:, :cry:, :evil:, :twisted:, :roll:, :idea:, :arrow:, :mrgreen:, :),
:-(, :!:, :?:, :oops:, :-o,:-D,8-|,8-), :??, :x:, :-P, :ase:, =:[, :ahhh:,
:star0.0:, :star0.0:, :star0.5:, :star1.0:, :!!!:, :**:,
:heart:, :!!:, :hahaha:, :chin:, :[], :|

こんな感じのスマイリーコードをマッチさせるのに、
$string = '{[:\*8=][(^:|*|a-zA-Z\-!?_\.\d\[)]*[(.*:)(.*\*)(.?)(:*[)(\])PoD\|]};
こんな感じのコードにしてみたけど、もっとスマートに出来ますか?

しかし、正規表現はパズルみたいで面白いね。

619 名前:nobodyさん mailto:sage [2010/05/02(日) 04:08:13 ID:???]
>>618
スマートさではこっちのが上だね :P
(:(wink|lol|cry|evil|twisted|roll|idea|arrow|mrgreen|\!|\?|oops|x|ase|ahhh|star0.0|star0.5|star1.0|\!\!\!|\*\*|heart|\!\!|hahaha|chin):)
|(:)|:-(|:-o|:-D|8-\||8-)|:??|:-P|=:[|:[]|:\|)

620 名前:nobodyさん mailto:sage [2010/05/02(日) 04:53:21 ID:???]
>>619
色々バグってた

my @g = $str =~ /(
(?: \:
(?: ahhh | arrow | ase | chin | cry | evil | hahaha | heart | idea | lol | mrgreen | oops | roll | star0\.0 | star0\.0 | star0\.5 | star1\.0 | twisted | wink | x | \!\!\! | \!\! | \! | \*\* | \? )
\:)
|
(?: \:-\) | \:\-\( | \:\-D | \:\-P | \:\-o | \:\?\? | \:\[\] | 8\-\| | 8\-\) | \=\:\[ )
)/gx;

621 名前:nobodyさん mailto:sage [2010/05/02(日) 10:16:16 ID:???]
>>618のだと:aaaaa:とか存在しないものまでマッチしちゃうよ?

((?:\:(?:(?:ahhh|arrow|ase|chin|cry|evil|hahaha|heart|idea|lol|mrgreen|oops|roll|star(?:0\.[05]|1\.0)|twisted|wink|x|\!{1,3}|\*{2})\:|\?[:?]|(?:\)|\[\]|\||\-[(oDP])))|(?:8\-[|)])|=\:\[)

622 名前:nobodyさん mailto:sage [2010/05/02(日) 11:44:31 ID:???]
>>619-621
そうか、未来の拡張を考えて緩くしたけど、
2バイト文字以外のブログじゃ広くマッチしすぎるって事か。。。
それじゃスマイリーコードの方に厳格なルールを...
なんって考えるのもユーザーに優しくないし。
折り合いつけるの難しいね :|



623 名前:nobodyさん mailto:sage [2010/05/02(日) 19:52:37 ID:???]
>>622
厳格さが必要でない処理が行われるというのがイメージできんのだけど、
マッチさせてどうしたいんだ?

624 名前:nobodyさん mailto:sage [2010/05/02(日) 20:21:19 ID:???]
>>623
とあるCMSで、
引用表示の時は、リンクとか画像とか取っ払う追加プログラム書いてるから。



625 名前:nobodyさん mailto:sage [2010/05/02(日) 22:35:26 ID:???]
>>624
文から推測すると、前提として普通の記事の場合はスマイリーコードとやらが画像に変換されるということがあって、
その記事が引用されてる場合はそれらを除去したいということか?

前提が正しいならスマイリーコードを画像に変換する時に使ってるルールを厳格に使うべきだし、
正しくないならリンクでも画像でもないスマイリーコードを除去する必要がないと思うんだが

626 名前:nobodyさん mailto:sage [2010/05/02(日) 23:09:45 ID:???]
>>625
正解です。
通常記事ではスマイリーコードが画像に変換されます。
で、引用時には、それら(改行,スペース,タブ,画像,リンク等)を除去して
コンパクトにしたいのです。

引用文にスマイリーが入ってもいいんですが、
記事を丸める過程で<img>タグが邪魔したので、除去するを仕様としました。


627 名前:nobodyさん mailto:sage [2010/05/03(月) 00:05:08 ID:???]
>>626
一度img要素に置換したものをベースにするというのがそもそもおかしいのでは?
もしかして表示する直前に置換してるんじゃなくて、DBに突っ込む段階で置換しちゃってるとか?
それだったら設計を見直したほうがいいと思うんだけど

628 名前:nobodyさん mailto:sage [2010/05/03(月) 00:07:04 ID:???]
>>626
じゃあやっぱり >スマイリーコードを画像に変換する時に使ってるルールを厳格に使う が一番スマートなんじゃないか
それができないなら一旦引用されていない記事として処理して、そこからimgタグを除去するとか

正規表現の話からはだいぶそれたので俺はこれ以上何も言わないことにするよ :P

629 名前:nobodyさん mailto:sage [2010/05/03(月) 00:36:11 ID:???]
>>627-628
スマイリーコードが置換されるのはDBから引っ張ってからですが、
追加プログラムの導入IDによって優先順位があるので単純ではないんです。。。

で、私も正規表現から脱線しすぎなのでこれが最後。

脱線ついでに、タイムズスクウェアで爆発物を積んでた車って。。。
家の車も正規表現でマッチしちゃうwww


630 名前:nobodyさん [2010/05/19(水) 16:47:15 ID:t/z/xcK5]
質問させてください!

ああああああ @ ABCD @ abcd

という文字を

<b>ああああああ</b> @ ABCD @ <em>abcd</em>

のように置換したい時はどういう正規表現を使えばいいのでしょうか?

よろしくお願いいたします

631 名前:nobodyさん mailto:sage [2010/05/19(水) 17:44:20 ID:???]
その例にするための条件って何?
スペース @ スペース が区切りとか?

632 名前:nobodyさん [2010/05/20(木) 19:43:15 ID:avs5qFDL]
質問させてください。

<table>
<tr>
<th>名称1</th>
<td>
値1
</td>
</tr>
<tr>
<th>名称2</th>
<td>
値2
</td>
</tr>
</table>
のようなHTMLがあります。
実際には全ての改行とインデントはトリムされてます。
この値1の部分をとるにはどのような正規表現を使えば良いでしょうか?

<th>名称1</th><td>([^<]*)</td>
のように考えてましたが値1には<img>タグが入る場合があります。
<table>や<td>が入ることはありません。


633 名前:632 mailto:sage [2010/05/20(木) 19:44:24 ID:???]
途中で投稿してしまいました。

お手数ですがご教授よろしくお願いします。
なお、当方18歳女子になります。

634 名前:nobodyさん mailto:sage [2010/05/20(木) 19:54:06 ID:???]
<th>名称1</th><td>(.*?)</td>



635 名前:nobodyさん [2010/05/20(木) 20:40:36 ID:a5arSWsA]
www19.atpages.jp/imagelinkget/get.php?t=v&u=www.phpbook.jp/regexp/ini/img/p1-1.png
ukiya.sakura.ne.jp/index.php?plugin=ref&amp;page=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F1&amp;src=regex1.png
ukiya.sakura.ne.jp/index.php?plugin=ref&amp;page=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F8&amp;src=regex8.png


636 名前:nobodyさん mailto:sage [2010/05/20(木) 21:13:11 ID:???]
<th>名称1</th><td>(値1|<img>)</td>

637 名前:632 [2010/05/21(金) 22:05:20 ID:E8tDrX2s]
ありがとうございました。
無事に解決できました。
これより踊りに行くのでこれにて失礼致します。

638 名前:nobodyさん mailto:sage [2010/05/24(月) 12:25:48 ID:???]
便乗だけど
<table>
<tr>
<th>名称1</th>
<td class="abc">
値1
</td>
</tr>
<tr>
<th>名称2</th>
<td class="def">
値2
</td>
</tr>
...あと何個か続く

この場合 <th>名称1</th><td .*>(.*?)</td> にしたのですが
何故かうまく 値1 だけ取得できません
どうも .*で余計なものも取得しているようです
どう書けばいいでしょうか
当方JKです。



639 名前:nobodyさん mailto:sage [2010/05/24(月) 14:40:31 ID:???]
<th>名称1</th><td .*?>(.*?)</td>






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<179KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef