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

・言語不問

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

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

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';
この内容がどういうパターンで変動し得るかがわからん
書かれている正規表現見てみると ? / ; の順に区切り文字があることは固定で決まってる?






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

前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