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


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

正規表現 Part5



1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ]
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

前スレ
正規表現 Part4
pc11.2ch.net/test/read.cgi/tech/1186030400/

476 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 12:56:55 ]
>>475
ありがとうございます。わかりにくい表現で申し訳ありません。
↓が対象データの例と希望する結果です。

●対象データ
>>123
>>456

●希望する結果
#aa(){{{>>123}}}
#aa(){{{>>456}}}

477 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:01:41 ]
>>476
検索 >>(\d+)
置換 #aa\(\)\{\{\{>>$1\}\}\}

478 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:18:38 ]
置換後の文字列が↓のようになってしまいました。
$1 のところを \d+ や (\d+)、$\d+、$(\d+) に変えて色々やってみましたが
ダメでした。置換には EmEditor Pro 7.02 を使っていますが、
何かやり方が誤っているでしょうか?

#aa(){{{>>$1}}}
#aa(){{{>>$1}}}

479 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:37:14 ]
それはソフトの使い方を読むか、サポートに聞け

480 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:31:04 ]
>>478
後方参照を $1 ではなく \1 で行う
置換 #aa\(\)\{\{\{>>\1\}\}\}

481 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:49:18 ]
>>480
お返事遅れました。
すっげwマジで出来たw 正規表現って本当にすごいですね。

自分は \t や \n 等、基本的なものしかわからなかったのですが、
今回の質問が非常に勉強になりました。

次に疑問が湧いた時には、正規表現でできないことはないという姿勢で
解決に望もうと思います。
ありがとうございました。

482 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:49:51 ]
>>480
その括弧のエスケープはなんかいみあるの?

483 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:55:12 ]
■追記
ちなみに、今回の置換の目的なのですが、
atwiki という wiki のページで
>
のような特殊文字を書くと、
適切に表示がされない不具合(?)があるので、
アスキーアート表示用のメソッド
#aa(){引数}
を用いて、> を囲みたいなと思ったのが目的でした。

初めは手動でやっていたのですが、あまりにも数が多いので
置換化できないかな、と思った次第です。

長文失礼いたしました。

484 名前:480 mailto:sage [2008/11/29(土) 15:01:52 ]
置換文字列なので無いw

置換 #aa(){{{>>\1}}}

こうだね。 吊ってくる



485 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:21:23 ]
>>482,484
小かっこ () って、正規表現モードでも \ をつける必要ないんですか。
勉強になりました

486 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:29:35 ]
>>485
置換文字列は正規表現じゃないというだけ。
正規表現で書かなきゃいけないところで()そのものを書くには
エスケープする必要がある。

487 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:46:28 ]
●正規表現の使用環境
.NET FrameworkのRegexクラス。
ですが、Perlなどの正規表現でもかまいません。

●検索か置換か?
検索です

●説明
エスケープ記号(\)がついていない括弧で囲まれた文字列の検索が目的です。
[^\\]\((?<content>[^\(]+[^\\])\)という正規表現で試したところ、
入力文字列"a(b)"で正しくマッチし"a\(b)"や"\(b)"で正しくマッチしないのですが、
"(b)"では本来マッチしてほしいのにできなくなります。

●対象データ
エスケープ文字がついてないカッコで囲まれた文字列

●希望する結果
マッチ:  "a(b)", "(b)"
非マッチ: "\(b)", "a\(b\)", "a(b\)"


488 名前:487 mailto:sage [2008/11/30(日) 14:12:51 ]
申し訳ありません。(^\(|[^\\]\()(?<content>[^\(]*[^\\])\)
で解決しました。

489 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:16:29 ]
/(?<!\\)\((?<content>.*)?(?<!\\)\)/

490 名前:デフォルトの名無しさん [2008/12/03(水) 17:36:22 ]
aaa777 あああああ
aaa778ああああ
aaa7
aaa7あああ
aaa7aaa8
aaa7 aaa8

目的はaaa7をbbb7に置き換えたい。
しかしマッチ方法で苦しんでいます お助けを・・

/aaa7/ これでは全部置き換わる
/aaa7[^\d]/これでは 下の3つが余計な部分含めてマッチしてしまう。。

下から4つ、aaa7のみマッチさせる方法はあるでしょうか。

www.rider-n.sakura.ne.jp/regexp/regexp.php 
ここで簡単に調べられるのですが宜しくお願いします。
Perl互換の正規表現にチェックをいれていただけるといい感じです。


491 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:46:49 ]
>>490
/aaa7(?=[^\d])/

次からは>>5でお願い。

492 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:48:08 ]
aaa7(?=[^\d]|\Z)

そのチェッカーとやらの使い方がよくわからんので試してないが。

(?=ほげ) で先読みが、\Z で改行または文字列末にマッチ、ができることを
前提としている。
何を使っているのかよくわからないが(PHPのPerl互換モード?)
先読みと改行と文字列末の扱いを確認してみること。

493 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:50:47 ]
よく考えたら /aaa7(?!\d)/ でよかった。

494 名前:490 mailto:sage [2008/12/03(水) 18:28:57 ]
>>491 
もうしわけないです次から気をつけます。
>>491-493
ふむふむ 先読みという事ができるのですね
結果うまくいきました!ありがとうございました。
先読みと改行と文字列末 これを詳しく勉強してみます。



495 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 18:31:18 ]
よくそれだけで答えられるな
こう読んだけど違うのかな
s/aaa(?=7)/bbb/
>>494が来てたのでもういいみたいだけど

496 名前:492 mailto:sage [2008/12/03(水) 18:47:11 ]
[^\d] は \D でよかったな。

>>495
aaa777 にもそれだとひっかかるよね?
それにはひっかけたくないらしかったから。

497 名前:  mailto:  [2008/12/05(金) 00:09:56 ]
()()
[][]
{}{}

498 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 21:09:48 ]
ふらっとC#,C♯,C#(初心者用) Part34
ttp://pc11.2ch.net/test/read.cgi/tech/1227521785/607
から来ました

C#でRegexを使って正規表現を利用しています

if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}
Console.WriteLine("カンマあり");
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}


マッチする場合は後で ((\w+\.?)+)$ の部分について処理をして、マッチしない場合はそのまま次にいくようにしたいのですが
このパターン文字列だと上記のような文字列でカンマが末尾にある場合はfalseが返ってくるまで異常に時間がかかってしまいます
最終的に ((\w+\.?)+)$ 出マッチする場合とと同じ文字列が得られる、末尾にカンマが合っても処理が遅くならないパターンがあれば教えてください


499 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:50:00 ]
>>498
(\w+)+ みたいな感じになるから遅いんだろうねえ。

\s+\w+(\.\w+)*$

でどうか。


500 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:50:51 ]
キャプチャするから
\s+(\w+(\.\w+)*)$
こうか。



501 名前:498 mailto:sage [2008/12/06(土) 23:56:46 ]
>>499,500
ありがとうございます、見違えるように早くなりました
(\w+)*は良くても(\w+)+は遅くなるんですね

502 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 03:52:21 ]
>>501
> (\w+)*は良くても(\w+)+は遅くなるんですね

んー、そういうことではないぞ。
\.? は有っても無くてもいいけど、(\.\w+)* の \. は必要でしょ。
(\.?\w+)* にしたらやっぱり遅くなるはず。

(\w+\.?)+ は「.xxxxxx」だけにも何通りもマッチの仕方があるけど、
(\.\w+)*は1通りしかマッチできない。この違いだよ。


503 名前:498 mailto:sage [2008/12/07(日) 10:07:49 ]
>>502
? と +(もしくは*) の組み合わせが最悪だったわけですか
今度から注意します

504 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 13:53:02 ]
>>503
なんかまだ誤解してるっぽいな。
*)*
みたいに、カッコの内側の最後に繰り返し指定(*やら+やら)があって、
その外側すぐにも繰り返しがあるのが問題(になることが多い)。
498が最初に書いたようなマッチしないデータを食わせたときに、
バックトラック回数がとんでもなくでかくなって遅くなる(可能性がある)。




505 名前:498 mailto:sage [2008/12/07(日) 15:05:16 ]
>>504
理解が遅くてすみません、ようやく分かりました
丁寧にありがとうございました

506 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 20:39:26 ]
正規表現が手に入れた強力すぎる「構文理解(マッチ)能力」って、
外国語の翻訳に使えそうな気がするんだけど、その観点での研究って進んでないの?

507 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:38:53 ]
そりゃ無理でしょ。
yaccやbisonで実用になる翻訳ソフトが作れるって話は聞かないから。

508 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:53:34 ]
>>506
正則言語はそんなに広いクラスじゃないぞ

509 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:56:51 ]
>>506
一般の自然言語と正規言語では言語のクラスとして天と地ほどの差があるよ。
たとえば、多くの自然言語は無限回のネストを許容するが、これは正規文法で表せない。

510 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 08:03:55 ]
お前らちゃんと日本語話せよ何言ってるか分かんねぇよ

511 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:28:01 ]
お前が勉強不足なだけだ。

512 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:45:24 ]
なんて面白みの無い、むしろマイナスなレスなんだ

513 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 18:38:31 ]
●正規表現の使用環境
PHP4.4以降

●検索か置換か?
検索後、個々に置換

●説明
ユーザーが入力したhtmlデータ内に
特定の文字で囲まれたものを変換したい。
%test%や%nullpo%など。

●対象データ
フォームで送信されたhtmlデータ
<html>
<head>
</head>
<body>
%adv%
あいうえおかきくけこ<br>
%adv%
</bnody>
</html>

●希望する結果
%adv%を発見した位置を返し、それを指定された文字列で置換する。
%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。

よろしくお願いします。

514 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 19:41:55 ]
>>513
>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この時点で、正規表現でやるのには無理がある。
状態を持つには何らかのプログラミング言語で。
HTMLならJavaScriptか。



515 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:03:49 ]
PHP使ってるからテンプレートエンジン使ったらどうだろうか

516 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 02:35:21 ]
よくわかんないけど、%date%→2008/12/12 %name%→田中みたいにして

%name%様への%date%のお知らせです。

田中様への2008/12/12のお知らせです。みたいになるようにしたいんじゃないの?
正規表現っていうか普通に置換すればいいだけじゃないの?%name%→%date%とかなると置換順序によってはおかしくなるから、
そこは%name%を%date%で置換したいなら%%date%%と入力しといて後で%%を%に(ryみたいにすればいいと思うけど。
>>514は何が言いたいのか良くわからない。
>>515に同意。Smartyとか使えば全部やってくれるから楽だけど…

517 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 09:24:04 ]
>>516
>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この文章を素直に解釈すると、同じ「%adv%」でも状況に応じて
「こんにちは」にも「さようなら」にもなるって事じゃないのかな。
で、そういう状況依存的な内部状態を持つ操作は、
変数や条件判断文のあるプログラミング言語でないと不可能。
何か変?

518 名前:506 mailto:sage [2008/12/13(土) 22:59:58 ]
>>507-509
正規表現の(現時点での)限界があることはわかりました。
が、自然言語の「(ある種の)典型的な表現」を滑らかに翻訳するという狭いクラスのタスクに対しては
正規表現がその強力な威力を発揮できると今でも思っています。

519 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:02:11 ]
限界とか威力とか意味わかんね。
正規表現なんて正規文法を別の記号で書き直しただけじゃん。
数学的に厳密な定義のあるものなんだから、
明日になって威力が変わったりしないよ。

520 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 02:58:28 ]
正規表現を、どんな夢でもかなえてくれる魔法の呪文とでも勘違いしてないか?

521 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 08:53:37 ]
文法の表現力では
正規文法 < 文脈自由文法 < 文脈依存文法 < 解析表現文法

522 名前:デフォルトの名無しさん [2008/12/15(月) 00:24:39 ]
ABCを含まない行にマッチさせたい場合

^(?!.*ABC)  ←OK
(?!.*ABC)  ←NG

となるのでしょうか?
上記の違いが分かりません


523 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 00:38:48 ]
>>522
.*がABCを食うから。

524 名前:デフォルトの名無しさん [2008/12/15(月) 00:49:37 ]
^があるとなぜ食えないんですか?



525 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:52:03 ]
/^(?!.*ABC)/の場合、まず/^/が文字列の頭にマッチする。
そこから後ろ(即ち元の文字列全体)が、/^(.*ABC)/にマッチしなければ、全体としてマッチする。

/(?!.*ABC)/の場合は、どんな文字列であっても末尾にマッチする。
なぜなら文字列の末尾から後ろ(即ち空文字列)は/^(.*ABC)/にマッチしないから。

526 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 15:17:08 ]
>>517
あーなるほどね。1回目の%adv%では「こんにちは」、2回目の%adv%では「さようなら」にしたい、とかか。
そりゃ正規表現じゃ無理だわ。いや、限定的な状況ならいけるかもしれないけど。

527 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:11:49 ]
含まない行、のような指定は、できるなら -v オプションとか
正規表現より上のレイヤでやったほうがよい。

528 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:32:43 ]
それはスレ違い

529 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:58:47 ]
いいんじゃない?
正規表現だけでは何もできないんだから。
perl とか、テキストエディタとか、そのた言語と組み合わせないと。

530 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:12:40 ]
perlとかテキストエディタとかその他の言語のサポートまではしてられないってことだろ。よう知らんけど。

531 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:43:09 ]
>>527はどこまで正規表現を使うべきかという立派な正規表現ネタに見えた。
正規表現で実現可能なことは無理してでも正規表現を使え
なんていう愚かなスレでもないだろうw

532 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 09:10:18 ]
実用的な解と、パズル的な解か。

533 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:32:23 ]
例えば、 ABC と DEF という文字列があったとき、

ABCの場合
ABC (123)

DEFの場合
DEF (345)

という形に置き換えるのは可能でしょうか?
また、可能ならどのように書いたらいいでしょうか

534 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:53:58 ]
>>533
できる。正規表現は
/ABC/
/DEF/

意地悪はさておき、ABCやDEFを検出するのは正規表現だけど
置換をするのはそれぞれの「実装言語や処理系ソフトウェア」だから
>>5のテンプレ埋めてくれないと答えられない。



535 名前:533 mailto:sage [2008/12/22(月) 15:54:12 ]
すみません
訂正します

●正規表現の使用環境
Jane Style Version 3.01

●検索か置換か?
検索後に置換

●説明
文字列にマッチさせた後、マッチした文字列ごとに指定された文字列を後ろに
追加させて置換させたい

●対象データ
@ ABC
A DEF

●希望する結果
@ ABC (123)
A DEF (345)

536 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 16:25:00 ]
普通の置換でよくね?

537 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 16:51:55 ]
すみません、説明が足りませんでした

この二件だけの場合は二つ表現を書けばいいですが、
後ですぐに置換したい文字列を追加できるよう、(ABC|DEF)のように
orか何かでまとめて作りたいと思っています

それは可能でしょうか
それともやはり一つ一つ書いたほうがいいでしょうか

538 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:24:29 ]
>>537
まとめようにも法則性が無いが。

539 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:27:44 ]
てか、Jane Style って専ブラだよね?
どういう機能で何をしようとしてるのかがわからないとどうにもアドバイスのしようが...
(このスレは基本的には、grepやawkやPerlやPythonやJavaの正規表現のスレなので)

540 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:41:12 ]
<rx2>(?<=ABC)[TAB] (123)[TAB]msg
<rx2>(?<=DEF)[TAB] (345)[TAB]msg



541 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:35:21 ]
これですね。ちゃんと書いてあります。
www.monazilla.org/index.php?e=65

542 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:36:27 ]
>>538
あまり正規表現について詳しくないもので
やはりちょっと無理がありましたね・・・

>>539
すみません
少し勘違いをしていました

>>540
有難うございます!
すごくスッキリしていていいですね
参考にさせて頂きます

543 名前:デフォルトの名無しさん [2008/12/27(土) 19:09:30 ]
perl で

abc-def-1234-ghi-jkl
これから
abc-def
を取りたい

1234は数字が4文字です
1234の前を取るのはどうすればいいですか?


544 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:14:41 ]
「取る」とは?

「抽出したい」 → 結果として abc-def が欲しい
「削除したい」 → 結果として -1234-ghi-jkl が欲しい
どっち?

できれば >>5 を参考に。



545 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:31:16 ]
もっと高級言語っぽい表記で書けるといいのになぁ。

546 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:31:35 ]
(ちょっと変えました)
prelで

●検索か置換か?
検索

●説明
12-34は数字が2文字ハイフン2文字です
(\d{2}-\d{2} こうかな?)

12-34の前を抽出するにはどうすればいいですか?
12-34の前の部分に数字が2文字は無いです。

●対象データ
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl


●希望する結果
abc3-d5ef-
ho-1ge=+-e


547 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 20:59:42 ]
>>546

12-34でもその一般化したパターンでも使ってマッチングさせてから
特殊変数 $` や@- を参照するなり他の手段で抜き出すなりすればよろしかろ?


548 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 23:26:09 ]
>>546
カッコ ( ) をつかえばいいよ。

549 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 11:20:42 ]
>>546
print /(.*)(?=\d{2}-\d{2})/ ? "match:[$1]\n" : "unmatch.\n" for qw(
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl
);

550 名前:デフォルトの名無しさん [2009/01/01(木) 12:55:59 ]
単純にたくさんのテキストファイルから目当てのキーワードのある行を
正規表現で検索したい場合、Windows環境だとどのツールが便利・一般的なの?
秀丸かな?
Unixだとgrepコマンドがあるけど…

551 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:29:08 ]
>>550
一般がどうかはしらないけど自分は秀丸やxyzzyの機能を使ってる

552 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:32:37 ]
grepでいいよ

553 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:44:45 ]
XP以降だと標準でfindstrコマンドがあるね
Cygwinを入れるのもいいし、各種テキストエディタに頼るのもいい

でも一番の検索ツールは、



| 何について調べますか?
| ┌────────────┐
| |                   |
| |                    |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ

554 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:51:57 ]
| 何について調べますか?
| ┌────────────┐
| | おまいの消し方        |
| |                    |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ



555 名前:550 mailto:sage [2009/01/01(木) 14:13:35 ]
さんくす、やっぱりそのへんかぁ。

556 名前:551 mailto:sage [2009/01/01(木) 14:17:19 ]
このスレのせいで550がイルカの虜になってしまった
なんて親切なスレなんだ

557 名前:553 mailto:sage [2009/01/01(木) 14:17:59 ]
名前間違えた、>>556は553

558 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 11:43:20 ]
2007ではイルカ出なくなってるよね

559 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 11:46:47 ]
冴子先生がいい

560 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 16:37:56 ]
スターウォーズのジャージャービンクス
Office のイルカ

大ヒットメーカーが調子に乗りすぎて生み出してしまった
世界の2大うざキャラ。

561 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 17:31:36 ]
なんかわかるw

562 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 11:11:00 ]
perlで下のような場合にマッチさせたいのですが、どのようにすればいいのでしょうか?

<[a-z]+ lang="ja">.*?</[a-z]+>

最初の[a-z]+と最後の[a-z]+は同じタグを指定したいのですが、
このままだと、</a>や</b>といった終了タグが先に引っかかってしまい、
いびつな形でマッチしてしまいます。

563 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:22:05 ]
>>562
正規表現一発じゃキツい
スキャナを書くか、素直にHTMLパーザ使った方が

564 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:36:17 ]
>>562
バックリファレンスかな
<([a-z]+) lang="ja">.*?</\1>
こんな感じで



565 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:36:39 ]
単純にそういう条件だと\1使えばいいんじゃ? いろいろやるつもりなら
結局パーサ使った方が楽ってことになりそうだけどね。

$s = q{<hoge lang="ja"><a>hogehoge</a><b>hoge</b></hoge>};
print $& if $s =~ m{<([a-z]+) lang="ja">.*?</\1>};

566 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:54:09 ]
>>564-565
> <([a-z]+) lang="ja">.*?</\1>
でうまくいきました。

残念ながら、XMLパーサの使い方がわからない。勉強しないとなぁ…

目的は和英中が混在しているxmlから日本語の部分だけ抽出したかったので、
今回はこれで十分です。

XMLとHTMLタグが混在した形式だったんですが、何故か、HTMLタグにlang設定が
されていて途方にくれていました。

567 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 18:39:02 ]
たとえば <xxx lang="ja"><xxx>foobar</xxx></xxx> というときにちゃんと取り出せないねえ

本当にちゃんとやろうとしたら正規表現だと無理だな

568 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 12:59:56 ]
XMLは文脈自由文法だからPCREの拡張とか使わないと無理

569 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 15:34:24 ]
Perlなら再帰的なやつもイケる
ちゃんとチェックしとらんが

local our@A;
my$a="jjj<unko>an<unko>hoge</unko>gf</unko>";
local our$b=qr{(.*?(<unko>(??{$b})</unko>)(?{push@A,$2}))*.*?};

$a=~$b;

print join($/,@A),$/;


570 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:53:47 ]
正規表現のライブラリを自作してるのですが参考になるサイトはないでしょうか。
容易な拡張性を確保するためにオブジェクト指向を使って実装してます。

例えば
inputstr[k] == pattern[k] ?

ではなくて
pattern.can_eat(inputstr[k])

のようなpatternをレシーバ(インスタンス)としたかんじです。
現在はグループの中にグループがあるとどうやって解決するか悩んでいます。
(ab(cd|ef)gh)

などで、一応JAVAで実験してます。

571 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:59:04 ]
pattern.can_eat(inputstr[k]) ?
pattern.contains(inputstr[k]) ?

などでboolean関数です。
性能は速いかどうかではなく、コンパクト・コードサイズ小さいなど目指しています(機能拡張はオブジェクト指向と同じくプラグインしますんで)。
構文木を作るとかではなく容易にスクラッチから書ける程度のコードサイズで、かつ動的に実行時に機能追加できると言うのが条件で作っています。

572 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 14:04:39 ]
他の言語の正規表現APIは参考にしてる?
OOならJava, Ruby, Python, .NETとあると思うけど

573 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:14:50 ]
あれ?反応ないですね。
オブジェクト指向を使った実装だと構文木を使ったものよりもだいぶ簡単になる(見通しがよくなる)んですけど・・・
多少コード量(というかクラス・ファイル数)は多くなるんですけど、やっぱりインタプリタは旧来式の構文木を使った実装しかやらないんでしょうか。

574 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:28:45 ]
何をしたいのかが伝わってないんだろう。
読んで、正規表現ライブラリを利用者に見せるためのAPIの話ではないの
かも、という印象は持ったが、それ以上は考えるが面倒くさいのでス
ルー。




575 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:07:17 ]
もっぱら使う側が多いからじゃないのかな。特に不満もないし。。
鬼車のポジションを奪える可能性もあるからがんばって!

576 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:37:56 ]
参考になるサイトもないでどうやって頑張るんだよ!
3日ぐらい悩んで大体めどがたってきたから別にいいけど。






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

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef