[表示 : 全て 最新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]
【正規表現道場の掟】

・言語不問

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

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

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:???]
ネットで調べても、どの言語の正規表現なのか今ひとつ判らないので
取り合えずアマゾンで本を注文しました。
言語ごとの差が判るようなものがあれば...







[ 続きを読む ] / [ 携帯版 ]

前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