正規表現 Part5
..
564:デフォルトの名無しさん
09/01/08 17:36:17
>>562
バックリファレンスかな
<([a-z]+) lang="ja">.*?</\1>
こんな感じで
565:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/08 17:54:09
>>564-565
> <([a-z]+) lang="ja">.*?</\1>
でうまくいきました。
残念ながら、XMLパーサの使い方がわからない。勉強しないとなぁ…
目的は和英中が混在しているxmlから日本語の部分だけ抽出したかったので、
今回はこれで十分です。
XMLとHTMLタグが混在した形式だったんですが、何故か、HTMLタグにlang設定が
されていて途方にくれていました。
567:デフォルトの名無しさん
09/01/08 18:39:02
たとえば <xxx lang="ja"><xxx>foobar</xxx></xxx> というときにちゃんと取り出せないねえ
本当にちゃんとやろうとしたら正規表現だと無理だな
568:デフォルトの名無しさん
09/01/10 12:59:56
XMLは文脈自由文法だからPCREの拡張とか使わないと無理
569:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/20 13:53:47
正規表現のライブラリを自作してるのですが参考になるサイトはないでしょうか。
容易な拡張性を確保するためにオブジェクト指向を使って実装してます。
例えば
inputstr[k] == pattern[k] ?
ではなくて
pattern.can_eat(inputstr[k])
のようなpatternをレシーバ(インスタンス)としたかんじです。
現在はグループの中にグループがあるとどうやって解決するか悩んでいます。
(ab(cd|ef)gh)
などで、一応JAVAで実験してます。
571:デフォルトの名無しさん
09/01/20 13:59:04
pattern.can_eat(inputstr[k]) ?
pattern.contains(inputstr[k]) ?
などでboolean関数です。
性能は速いかどうかではなく、コンパクト・コードサイズ小さいなど目指しています(機能拡張はオブジェクト指向と同じくプラグインしますんで)。
構文木を作るとかではなく容易にスクラッチから書ける程度のコードサイズで、かつ動的に実行時に機能追加できると言うのが条件で作っています。
572:デフォルトの名無しさん
09/01/20 14:04:39
他の言語の正規表現APIは参考にしてる?
OOならJava, Ruby, Python, .NETとあると思うけど
573:デフォルトの名無しさん
09/01/21 01:14:50
あれ?反応ないですね。
オブジェクト指向を使った実装だと構文木を使ったものよりもだいぶ簡単になる(見通しがよくなる)んですけど・・・
多少コード量(というかクラス・ファイル数)は多くなるんですけど、やっぱりインタプリタは旧来式の構文木を使った実装しかやらないんでしょうか。
574:デフォルトの名無しさん
09/01/21 01:28:45
何をしたいのかが伝わってないんだろう。
読んで、正規表現ライブラリを利用者に見せるためのAPIの話ではないの
かも、という印象は持ったが、それ以上は考えるが面倒くさいのでス
ルー。
575:デフォルトの名無しさん
09/01/21 02:07:17
もっぱら使う側が多いからじゃないのかな。特に不満もないし。。
鬼車のポジションを奪える可能性もあるからがんばって!
576:デフォルトの名無しさん
09/01/21 02:37:56
参考になるサイトもないでどうやって頑張るんだよ!
3日ぐらい悩んで大体めどがたってきたから別にいいけど。
577:デフォルトの名無しさん
09/01/21 07:29:45
要するにこういうことだろ。
いずれにしても、パターンの構文木()笑を作る必要はあるよ
/(ab(cd|ef)gh)/.match("xabefgh")
/ab(cd|ef)gh/.match("xabefgh")
/ab/.match("xabefgh")
/(cd|ef)gh/.match("efgh")
/(cd|ef)gh/.match("efgh")
/(cd|ef)gh/.match("efgh")
578:デフォルトの名無しさん
09/01/21 07:29:58
途中で書き込んでしもた。めんどくせ
579:デフォルトの名無しさん
09/01/22 11:45:20
●正規表現の使用環境
prel
●検索か置換か?
置換
●説明
特定タグ間のHTMLタグを全て削除する
(<body>から</body>までのタグを全て削除)
●対象データ
<html>
<body>
テスト<BR>
<b>です。</b>
</body>
</html>
●希望する結果
<html>
<body>
テスト
です。
</body>
</html>
580:デフォルトの名無しさん
09/01/22 13:41:18
>>579
$html =~ s{(?<=<body>).+(?=</body>)} {
(my $body = $&) =~ s/<.+?>//gs;
$body;
}es;
581:デフォルトの名無しさん
09/01/22 14:08:55
>>579 のおかげで prel でぐぐっても perl が検索対象になることを知った
582:581
09/01/22 14:11:05
ごめん、正確には
prel 正規表現
など prel と何か別のキーワードでぐぐったとき prel は perl とみなされるっぽい
583:デフォルトの名無しさん
09/01/22 16:40:10
ワロタ
584:デフォルトの名無しさん
09/01/24 10:40:12
余談になるけど、VBSの正規表現は、処理系の実務にも耐えられるくらいの機能は持ってるよ。
条件判定としての正規表現を使える事は、VBAユーザーにとってこれ以上無いほどのメリットだと思ってる。
俺もそんなに正規表現は詳しくはないけど、エクセルで使う目的を考えると、VBSの正規表現は非常に使い勝手が良い。
良くも悪くもシンプルなんだよね。
仕事で文字列操作やRDBみたいな使い方してる人ならば、絶対に覚えておいて損はないよ。
後方参照が表現できるようになって、世界が開けました。
どうでも良い話かもしれないけど、マジでお勧め。
585:デフォルトの名無しさん
09/01/24 10:40:37
誤爆しました。すいません。
586:デフォルトの名無しさん
09/01/27 23:36:14
文字列の中から名前を取り出したいのですがどうやって書けば良いでしょうか
587:デフォルトの名無しさん
09/01/28 00:08:31
「名前」の定義は?
環境も。
588:586
09/01/28 00:46:35
名前は人名です
環境はVB.NETです。
589:デフォルトの名無しさん
09/01/28 00:51:34
人名の定義は?
590:デフォルトの名無しさん
09/01/28 00:56:14
それを聞いてる
591:479
09/01/28 03:07:22
形態素解析の領分だろうね。
どこまで固有人名を解析できるかは性能と元の文章次第だけど。
592:デフォルトの名無しさん
09/01/28 03:07:56
すまん、名前消したつもりが残ってた
593:デフォルトの名無しさん
09/01/28 06:56:44
辞書も必要だな
594:デフォルトの名無しさん
09/01/28 10:19:24
形態素解析までしなくても、日本全国の苗字と名前のテーブルを作って
「苗字+名前」で引っこ抜けばいいと思う
595:デフォルトの名無しさん
09/01/28 10:37:13
「あや」と「あやの」みたいのをどう
扱うかとか考え出すとなにげに難しい
596:デフォルトの名無しさん
09/01/28 11:34:07
英語と違って日本語は「わかち書き」をしないから難しいやろね。
597:デフォルトの名無しさん
09/01/28 18:51:36
(鈴木|佐藤|山田| ... )\s*(太郎|花子| ... )
598:デフォルトの名無しさん
09/01/28 19:16:08
>>586よ、別に煽って遊んでる訳じゃないぞ。
コンピュータにとって、言うは易いが行うは難しい要求なんだ。
599:586
09/01/29 01:12:20
レスありがとう
では郵便番号か都|道|府|県|市|区|町|村のある行から
5行以内にある行で、末尾に。や、のない7文字以内の行で
その行の中には、も。もない文字列
これを抜き取ったら名前の可能性が高そうなのですが
どうやって書けば良いでしょうか
600:デフォルトの名無しさん
09/01/29 01:52:27
>>599
それは非常に喜ばしいけれど、名前じゃないものが抽出されたり、名前が抽出されなかった時に
どうするか考えてるの?
そのデータをどうやって作ってるのかよくわからんが、ごちゃごちゃしたテキストしか存在しないの?
601:デフォルトの名無しさん
09/01/29 01:57:10
人名で7文字制限つけていいのかなぁ。外国人名なんか来た日にゃえらいことになりそうだが。
602:デフォルトの名無しさん
09/01/29 09:57:27
>>599
正規表現ってのは、
人間が生活しながら身に付ける区別みたいに複雑な物じゃなく、
字面だけで機械的に振り分けする物。
それが可能なデータでないなら、正規表現での抽出は諦めた方がいい。
既存のデータなら仕方ないけど、何等かの方法で生成してる物なら、
その上流で手を打たないと難しい。
603:586
09/01/29 22:51:11
レスどうもです
たくさんのデータを一気に処理をするという感じではないので
失敗したら手動で訂正するので大丈夫です。
ちょっと補助的に便利になればという感じで
100件やったら半分でも正常に抽出できればそれでもOKです。
今↓のように書いてみましたがこれだと
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
東京都**区**町10-10
03-0000-0000
日本太郎
123-0001
上の2つは大丈夫なのですが、
日本太郎
123-0001
東京都**区**町10-10
03-0000-0000
だと抽出できなかったのですが、どこを訂正したらいいでしょうか?
r = New Regex("((\d\d\d\-?\d\d\d\d|都|道|府|県)+?.+\n)*?(.*\n{1,5}?)(?<1>.{4,8})$\n.+?(\d\d\d\-?\d\d\d\d|都|道|府|県)*?\n?", _
RegexOptions.Multiline Or RegexOptions.IgnoreCase)
よろしくお願いします。
604:デフォルトの名無しさん
09/01/29 23:15:33
うざいので他所言ってください
605:デフォルトの名無しさん
09/01/29 23:33:20
>>603
パターンが一定ではないので無理。
606:デフォルトの名無しさん
09/01/29 23:35:34
とりあえず、「住所は必ず数字で終わる」のなら、
^(\D+)\d
で引っ掛けられそうか。
607:デフォルトの名無しさん
09/01/29 23:36:39
>>603
人名なんて住所より短いんだから、行頭から全角6文字以内+行末文字の抽出で十分じゃない。
はい終了。
608:デフォルトの名無しさん
09/01/29 23:43:23
まあそれでも半分ぐらいは抽出できそうだわな
609:586
09/01/30 00:02:42
こんにちは
とかが頭にある場合があるので郵便番号と都道府県のチェックは外せないです。
610:デフォルトの名無しさん
09/01/30 00:07:35
ネタじゃないの?
611:デフォルトの名無しさん
09/01/30 00:10:28
データごとの固まりは空行で区切られてたり
行数が決まってたりすんの?
それだったら名前候補を抽出するプログラムも結構簡単に作れそうだが
全部正規表現でやるのは逆にむずそう
612:デフォルトの名無しさん
09/01/30 00:13:59
>>609
そのレベルになってくると、正規表現よりそれを扱うスクリプトの方でどうにかしたほうがいいのでは
そもそもどういう形式のデータかも想像できないし
613:586
09/01/30 00:16:01
ネタじゃないです
データは一つはj一人のデータです。
複数の人の切り分けは考慮する必要なないです。
やっぱ難しいですかね
614:デフォルトの名無しさん
09/01/30 00:25:56
>>613
いやもう本気で「日本語でおk」
どんなデータか説明してもらわないと、どうもこうも無いわ。
615:586
09/01/30 00:44:15
わかりにくくてすみません。
自由なフォーマットで送られてくる住所氏名電話番号を
ListViewに登録するということをやっています。
文章は
こんにちは
私の住所は
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
です
お返事ください。
こんな感じの文章から名前を出来るだけ高確率で取り出したいです。
段階に分けて調べた方がいいですかね
上の例だとまず郵便番号と都道府県と電話番号の位置を正規表現で探して
それらに一番近い7文字の全角句読点なしを取るという感じでどうでしょうか
「です」が怪しいですね「になります」とか書いてあったら間違うし・・・
616:デフォルトの名無しさん
09/01/30 01:00:30
>>615
> 自由なフォーマットで
って時点で、正規表現の領域じゃないと思うぞ。
617:デフォルトの名無しさん
09/01/30 01:01:54
自由なフォーマットなのか、郵便番号に近いのと電話番号に近い奴が違った場合どっちを取る?
とか問題があるな。
URLリンク(www2s.biglobe.ne.jp)
この辺から苗字のリスト拾ってきてそれが含まれてる行を抽出するとかでいんじゃね?
618:デフォルトの名無しさん
09/01/30 01:08:18
人名辞書と突合せしないと絶対に無理だろ
619:デフォルトの名無しさん
09/01/30 01:15:22
名前だけ抜き出すと考えるとまず無理
引っかからないのもNGだとすれば、全角と空白を一定以上含む行まで絞ってあとは目視しかない
フリーフォーマットを許さないといけない特段の理由がないのであれば、フォームにするべき
620:デフォルトの名無しさん
09/01/30 01:30:30
出会い系?
621:デフォルトの名無しさん
09/01/30 01:48:20
っつーか、“理系”の人間に任せろよ。
622:デフォルトの名無しさん
09/01/30 03:59:14
つーかそこそこの確率でいいなら、漢字だけで構成されてる行を
抜き出すだけでよくね?
623:デフォルトの名無しさん
09/01/30 04:18:16
「できない」 ってハッキリ言ってやれよ。その方が質問主に対して親切だ。
こんなに引っ張るような事じゃ無いだろ。
624:デフォルトの名無しさん
09/01/30 05:24:29
だからネタでしょっていってんじゃん。
食いついたもん負け。
625:デフォルトの名無しさん
09/01/30 07:44:05
>>623
すると馬鹿は「知らないなら黙っててください」と言い出す
626:デフォルトの名無しさん
09/01/30 08:16:59
srud(>>625);
627:デフォルトの名無しさん
09/01/30 19:17:21
>>625
人のことを馬鹿呼ばわりするあなたにはわかるんですか?
わかる方のみ回答お願いします
628:586
09/01/30 20:15:38
レスどうもです。
漢字の数文字の行から取るというのはいいと思いますが
折角正規表現が使えるのだからそれと郵便番号と住所なんかを手がかりにしたい
(その分確率は上がるでしょうし)と思ったのでお力をお借りできないかと
このスレを訪れてみました。
ご指摘の無理というお話もわかりますがm住所、郵便番号...の条件について、
正規表現で書く書き方を教えて頂けると助かったのですが
範囲の指定とか除外とか色々あって難しくて・・・
ちょっとアプローチを変えて自分なりの方法でやってみました。
住所、郵便番号、電話番号の位置を調べて、それの平均値を出して
それに一番近い7文字の全角でかつ、。や、のない行
から文字を取るようにしたら結構良い確率で抽出するようです。
正規表現とは離れた手法になってきたのでこの件はこれで終わりにしたいと思います。
お騒がせしてすみませんでした。有意義な回答を下さった方ありがとうございました。
629:デフォルトの名無しさん
09/01/30 20:42:45
>>628
確実に除外できるものを削除しなよ。
そうすれば全部の名前に少しのゴミを加えたものになるよ。
630:デフォルトの名無しさん
09/01/30 21:40:39
まだ引っ張るつもりか
631:デフォルトの名無しさん
09/01/31 11:13:49
<h1 class="title">
<a target="_self" class="id a "
href="http://英数字.html">
パターンマッチング1</a>
・
・
$pattern = "/
(
<h1.\s.class=\"title\">
<a.\s.target=\"\_self\".\s.class="id\s.a\s\"
href=\"[0-9|a-zA-Z|\-|\:|\.|\?|\/|\_]+.\">
)
(.*?)(<\/a>)
/";
こんなので全然マッチングできませんでした
どこがまちがっているのか、おしえてください
632:デフォルトの名無しさん
09/01/31 11:30:33
>.\s.
任意の一文字+空白文字一文字+任意の一文字=計三文字
つまり"h1 class"とか"h1! ?class"とかじゃないと引っかからない。
h1とclassの間とかは「空白文字一文字以上」だから\s+でおk
633:デフォルトの名無しさん
09/01/31 11:31:19
>"h1 class"
2chの仕様でスペース一つに見えるけど、半角スペース三つね。
634:デフォルトの名無しさん
09/01/31 12:21:07
[ ]に | は使えないよ
635:デフォルトの名無しさん
09/01/31 13:38:00
質問なんですが、4桁の数字の頭にAという文字を付けたい場合、
[0-9][0-9][0-9][0-9]をどうやって置換すればいいんですか?
636:デフォルトの名無しさん
09/01/31 13:53:10
$str ='123b2345';
echo preg_replace('/[0-9]{4}/','A$0',$str);
-- 出力結果 --
123bA2345
637:デフォルトの名無しさん
09/01/31 14:04:13
正規表現関係ないじゃん…
638:デフォルトの名無しさん
09/01/31 14:38:44
>>632-633
助言ありがとうございます、.を取り除き進歩しました
今度は
$Pattern = "/([^<]h1*>[^a\s]*>)(.*?)(<\/a>)/";
のようにしてみたんですが、全然上手くいきませんでした
639:デフォルトの名無しさん
09/01/31 14:43:53
>>638
完全にスレ違いなので、お使いの言語のスレへいってくだしあ
640:635
09/01/31 15:09:36
教えろ
641:デフォルトの名無しさん
09/01/31 16:37:42
>>640
>>1
642:デフォルトの名無しさん
09/01/31 16:42:28
>>641
おまえ教えろ
643:デフォルトの名無しさん
09/01/31 16:53:04
>>642
>>1
>>636
644:デフォルトの名無しさん
09/01/31 17:31:16
教えられてもそれが答えと気づかなかったでござるの巻
645:デフォルトの名無しさん
09/01/31 17:38:44
ござる教えろ
646:デフォルトの名無しさん
09/02/01 00:07:27
URLリンク(www.pururu.co.jp)
647:デフォルトの名無しさん
09/02/01 00:42:14
>>646
つ それ「こざる」
648:デフォルトの名無しさん
09/02/01 01:09:08
答えを教えられていることを伝えたら答えを教えろと言われたでござるの巻
649:デフォルトの名無しさん
09/02/01 05:12:34
おしえろ教えろ
650:デフォルトの名無しさん
09/02/02 04:33:30
教えろおしえろオシエロ、、、エロ!?
651:デフォルトの名無しさん
09/02/02 07:54:44
そこでこざるの出番でござるよ
652:デフォルトの名無しさん
09/02/03 17:05:09
Perlの質問です。
.......<code>.......</code>......
....<code>...........</code>......
こんな感じのドキュメントを、<code>または</code>の前で区切ってsplitで分けようとして
書きましたがうまくいきません。何が悪いのでしょうか。
@content = split( /(?=<(|\/)code>)/, $content);
653:デフォルトの名無しさん
09/02/03 17:17:00
>>652
たぶん空文字列や'/'が混じるのが御気に召さないのだろうと
思うがそれは君が (|\/) でキャプチャーしているからだよ。
いらなければ (?:|\/) とか \/? とかにするといい。
654:デフォルトの名無しさん
09/02/03 17:26:39
>>653
迅速かつ的確なアドバイス、ありがとうございます。上手くいきました。
意味はこれから勉強していきます。
655:デフォルトの名無しさん
09/02/04 19:03:45
お願いします( ゚ω゚ ) 言語はC#を用いています。
正規表現にて
[ok] 100
[ng] 01 → 1
[ok] 0.001
[ng] 00 → 0
[ok] 0.1000
前ゼロ入力をReplaceで""に置き換えたいのですが、正規表現が上手く書けませぬ
教えてくださいエロい人
656:デフォルトの名無しさん
09/02/04 19:29:16
関口宏「ベジータさん、今までいろいろな敵と戦ってきましたね?」
ベジータ「ふん、ゴミに興味などない」
関口、リーダー『ゴミに興味などない』
ベジータ「な……なんだ貴様ら!?」
リーダー「そんなベジータさんにはこんな問題!」
関口宏「ベジータさんが戦った、ギニュー特選隊のメンバー、五人全員お答え下さいスタート!」
リーダー「走って!まだよまだよまだよどうぞ!」
ベジータ「ギニュー! グルド! えー……バータ! ……待てよ、ギニュー、グルド、バー……くそ、わからん! あっ、ザーボン! なにっ!? ドドリア! くそったれ! ギニュー! グル」
ブッブー!
ベジータ「はぁ……はぁ……」
関口宏「リクーム、ジース」
ベジータ「あーリクーム……」
657:デフォルトの名無しさん
09/02/04 21:19:39
new Regex( @"^0+(?!\.)" )
でString.Emptyに置き換えてみたら
でもこれだと000は""になっちゃうけど
658:デフォルトの名無しさん
09/02/04 21:22:25
>>655
C#の構文は知らないのですが、
/^0+(\d)/$1/
に相当する正規表現でどうでしょうか
659:デフォルトの名無しさん
09/02/05 10:33:34
>>657
>>658
ありがとう(・ω・)
でもダメですた(;´Д`)
^0+(?!\.) 開始0の入力が不可ですた
/^0+(\d)/$1/ $1がサポられてないですた
お騒がせして申し訳ありませんでした。
もう少しイジくり回してみます。
660:デフォルトの名無しさん
09/02/05 11:13:55
秀丸エディタでの正規表現です。
abcdefghijxyz
abcdefg
xyzdefabc
から1行の中にabcとxyzの両方を含む行(1と3行目)を検索したいのですがどのように書いたらいいですか?
(.*abc.*xyz.*\n)|(.*xyz.*abc.*\n)
上のように書くとできるのですが含む文字列を増やした場合大変そうです。
本来はどのように書くのでしょうか教えてください。
簡単に&のような文字があるんでしょうか。
661:659
09/02/05 12:04:30
お騒がせしました(・ω・)出来まスタ スタ
解:System.Text.RegularExpressions.Regex(@"(^|(?=\.))0(?=[0-9])");
ありがとう御座いました。
662:デフォルトの名無しさん
09/02/05 13:24:20
>>660
URLリンク(www.din.or.jp)
663:デフォルトの名無しさん
09/02/05 14:27:14
>>660
^(?=.*abc)(?=.*xyz).*$
664:デフォルトの名無しさん
09/02/05 15:37:08
テキストファイルの検索でファイル内に複数の単語があるかどうか検索するときには
どういった感じにすればいいんでしょうか?
665:デフォルトの名無しさん
09/02/05 15:46:23
>>664
URLリンク(www.pururu.co.jp)
666:デフォルトの名無しさん
09/02/06 10:30:49
クラスの中でグループを使いたい場合はどうしたらいいですか?
[123(456)]
とした場合1/2/3/456にマッチする。
667:デフォルトの名無しさん
09/02/06 10:32:36
中じゃなく外でやれ。
([123]|456)
668:デフォルトの名無しさん
09/02/06 11:17:30
なるほろろ
669:デフォルトの名無しさん
09/02/06 13:05:59
いやん。中に出して!
670:659
09/02/06 18:08:08
>>667 悔しいけど感じちゃう ビクンッビクンッ
671:デフォルトの名無しさん
09/02/06 20:46:31
janeviewでwsh使用してますが、
2000にマッチして、DATE: 2000にはマッチしないようにしたいのですが
どうしたらいいですか?
672:デフォルトの名無しさん
09/02/06 22:10:55
(?<!DATE:)2000
かな。たぶん・・・
>>2 の
URLリンク(www.kt.rim.or.jp)
を読んで。
673:デフォルトの名無しさん
09/02/06 22:14:47
おっと、WSH か・・・ダメかもしれないね。
if文で2重チェックすればいいんじゃない?
674:デフォルトの名無しさん
09/02/06 22:22:42
>>2 の
.NET Framework 正規表現言語要素
URLリンク(msdn.microsoft.com)
にちゃんと書いてあった。
.NET なら (?<!・・・・) が使えるみたいだけど、WSH はよくわからん。どこに書いてるんだろう・・・
675:デフォルトの名無しさん
09/02/06 22:28:02
WSH(JScript)の正規表現は↓でおk
URLリンク(msdn.microsoft.com)
676:デフォルトの名無しさん
09/02/06 22:29:02
ググったら出てきた。
正規表現による Visual Basic Scripting Edition (VBScript) の機能強化
URLリンク(msdn.microsoft.com)
ここには (?<!・・・) は書いてない。
書いてないから出来ない、と考えるべきか、メンドクサイから書かなかったのか。
出来ることは書くが、出来ないことは書かない。フツウ、そうだよな・・・
ちなみに文書の日付は May 10, 1999 だ。
自分で実験してたしかめろや。
677:デフォルトの名無しさん
09/02/06 22:32:59
>>675 そっちのが新しい文書やね。やっぱり (?<!・・・) は書いてない。
678:デフォルトの名無しさん
09/02/06 22:42:20
鬼車使えばいいじゃん
679:デフォルトの名無しさん
09/02/07 03:54:02
>>672-678皆さんありがとうございます。
>>678さん
いつのまにか鬼車ってやつに変わってたんですね
ヘルプの更新してなかったので気が付かなかったです。
鬼車にしたら>>672さんのやり方で出来そうだったんですけど、
なぜか、「正規検索のテスト」のウィンドウ上だとうまく出来てるみたいなんですが、
実際に「ログから検索」にかけるとDATE: 2000が掛かってしまうみたいです。(でもハイライトされない)
結局、検索を本文のみに絞るオプションを発見して一応望む結果は出せたのですが、
何故そうなるのか、どうもしっくり来ないです…
逆に(?<=DATE: )2000でログ検索かけてみると今度は全くマッチしない状態になります。
でもテストウィンドウ上ではちゃんとマッチするんですよね…。
なんかおかしい気がします。Janeのバグなんでしょうかね?
680:デフォルトの名無しさん
09/02/07 20:12:26
URLリンク(hoge.net)桁の数字/3桁の数字.jpgというURLがあります
最後の「3桁の数字.jpg」を抜き出した意のですが、どのようにやったら綺麗にかけますか?
ヒントをください
681:デフォルトの名無しさん
09/02/07 20:16:20
/[0-9][0-9][0-9].jpg$/
682:デフォルトの名無しさん
09/02/07 20:41:09
/[0-9][0-9][0-9]\.jpg$/
683:680
09/02/07 20:52:29
わかりました感謝します
684:デフォルトの名無しさん
09/02/07 21:33:57
/\d{3}\.jpg$/
685:デフォルトの名無しさん
09/02/09 19:35:31
gawkの質問です。
村にはヒットさせたいが、川村とか大村とか村の前に特定の文字がついた場合にはヒットしたくない場合、正規表現ではどう書けばいいでしょう?
/![川大]村/
とかでいいんでしょうか?
686:デフォルトの名無しさん
09/02/09 21:35:40
/[^川大]村/
687:デフォルトの名無しさん
09/02/09 21:52:07
ありがとうございました。
688:デフォルトの名無しさん
09/02/09 22:03:09
これだとただの「村」にはマッチしないんだよな
689:デフォルトの名無しさん
09/02/09 22:11:32
正規表現は難しいからね。これ自体が一つのプログラミング言語と同等だし。
690:デフォルトの名無しさん
09/02/09 22:13:29
いや、それはない
691:デフォルトの名無しさん
09/02/10 01:21:53
/[^川大]村|^村/
これはどうかね
692:デフォルトの名無しさん
09/02/10 08:51:21
後方一致
/(?<![川大])村/
693:デフォルトの名無しさん
09/02/10 09:55:50
gawkでって話だから戻り読みはなしだろう。
694:デフォルトの名無しさん
09/02/10 23:02:24
●正規表現の使用環境
サクラエディタ v1.6.4.0
●検索か置換か?
置換
●説明
「 xml:space=preserve>」を検索のキーとして
キーを含む行末までの文を置換したい
●対象データ
<string1 xml:space=preserve> </string1>
<string2 xml:space=preserve> </string2>
●希望する結果
<string1/>
<string2/>
よろしくお願いします
695:デフォルトの名無しさん
09/02/10 23:27:10
s/<[^>]*xml:space=preserve>//g、でどうかな。
696:デフォルトの名無しさん
09/02/11 01:01:41
* で貪欲マッチするとマズいか。
最初の文字が x だから、
s/<[^x]*xml:space=preserve>//g、でどうだ。
697:デフォルトの名無しさん
09/02/11 13:40:25
>>694
s/<([^\s]+)\sxml:space=preserve>[^\n]+<\/\1>/<\1\/>/g
でどうでしょう。
698:デフォルトの名無しさん
09/02/11 13:44:59
s/<([^\s]+)\sxml:space=preserve>[^\r\n]+<\/\1>/<\1\/>/g
改行コードが文字コードによっていろいろなので少し修正
XMLが複雑な入れ子構造だとうまく動作しない場合がありえますが
シンプルな構造で、閉じタグも同じ行にあるのなら大丈夫かも。
サクラエディタは持ってませんが()でのキャプチャは\数字で参照できるようですね。
699:デフォルトの名無しさん
09/02/11 13:47:57
s/<([^\s]+)\sxml:space=preserve>[^\r\n]+<\/\1>/<$1\/>/g
こういう風にも書けるのかな
700:デフォルトの名無しさん
09/02/11 15:55:48
Perl互換の正規表現に対応しているソフトで
ab
cd
を検索するのに /ab.cd/m と書いたのにヒットしません。
/ab.*cd/m も /ab\ncd/m もダメです。バグでしょうか?
701:デフォルトの名無しさん
09/02/11 16:42:50
>>700
そのソフトの名前を出してくれないならどこまで互換性あるのかわからないし
作者かユーザーに聞けとしか。
702:デフォルトの名無しさん
09/02/11 17:15:32
>>700
ほんとうにperl互換なら、s オプションをつければいいと思う。
/ab[\r\n]*cd/s
703:デフォルトの名無しさん
09/02/11 18:09:38
>>701
このeDocArrangementというソフトです。業務用なので値段がすごいです。試用版で勉強中です。
OCR結果から顧客名を取り出す作業をしたいと思いまして。。。
URLリンク(www.technostyle.net)
>>702
ありがとうございました。出来ました。
\nだけではダメなんですね。詳説正規表現を読み始めたところですが、そんなことは書いてないような気がします。
別の教科書を探すべきでしょうか?
704:デフォルトの名無しさん
09/02/11 18:12:36
>>703
\r\nなのはWindows環境だからじゃないの?
それでもオープン時にテキストモード指定してれば\nでいいけど。
705:デフォルトの名無しさん
09/02/11 18:18:46
>>704
はい。窓です。正規表現の世界では異端なんですねw
706:デフォルトの名無しさん
09/02/11 18:28:21
そもそもそのデータはどうやって持ってきてるの?
もしもデータがファイルにあって、ファイルオープンのコードを自分で書いたのなら
そのパラメタが間違ってるよ。
707:デフォルトの名無しさん
09/02/11 18:46:37
>>706
OCRデータから目的のテキストだけを抜き出す作業です。
xdwファイルにOCRデータがありまして
…
氏名
西村ひろゆき
生年月日
…
というデータから名前を抜き出す作業です。
/氏名\n(.*)\n生年月日/m で抜き出せると思って試行錯誤したんですが、うまくいかなくて泣きついた次第です。
ファイルオープンのコードをかくという作業はありません。というか、低レベルなのでそういう高度な作業はよくわからない状態です。。。
708:デフォルトの名無しさん
09/02/11 18:52:31
>>703
もし、正規表現を使い始めたばかりなら、詳説正規表現はまだ読むべきじゃない。
読むならまず入門書から入るべきかと。
709:デフォルトの名無しさん
09/02/11 18:56:53
>>708
ありがとうございます。たしかに自分には早いのではないかという気がしていました。
はっきりと断言していただきありがとうございます。初心者用の教科書をAmazonで探します。
もしもお勧めがあれば、ご教示いただけましたら幸いです。希望ばかりで大変心苦しいのですが。。。
710:デフォルトの名無しさん
09/02/11 19:24:02
>>705
行の末尾がOSによって異なるんだよ。
\n だけのOS(うにくす系)
\r だけのOS(りんご系)
\r\n 両方必要なOS(まど系)
(ここまでは、パソコンの基礎知識)
この3種類に共通に使えるように
[\r\n]*
って書くんだよ。
(これは正規表現の応用問題。よく使う慣用句みたいなもの)
711:デフォルトの名無しさん
09/02/11 19:24:13
自分はPerl本から入ったクチだけど、>>709の場合、
Perlの処理部分については必要ないよね、おそらく。
特に正規表現に関して言うなら、試行錯誤して身につけたものの方が多い。
一番参考にしたのは秀丸のヘルプだったりする。
だから本を買う前に、Googleで正規表現を検索して、トップ30ぐらいまでの
ページを順に読むほうがよいかと。
テキストエディタでの正規表現の利用方法を記載しているものもあるけど、
それらも基本は同じだから、まずそこでイメージを掴むべきかと。
本を買うのは、その後。、少しでも自分のイメージができた後で書店で中身を
確認して買うべきだと思う。
最近のテキストエディタは検索結果に一致する箇所にマーカーをするものもあるから、
それで勉強するのもベストかと。
自分が知っている分では秀丸とSakuraエディタ。それ以外にもあるとは思う。
712:デフォルトの名無しさん
09/02/11 20:34:50
俺のオススメは >>2 のいちばん最初に書いてある
正規表現メモ
URLリンク(www.kt.rim.or.jp)
だな。
713:694
09/02/11 21:33:37
>>695-699
お答えいただき、ありがとうございました
早速試してみたのですが、検索に引っかかりませんでした…
714:デフォルトの名無しさん
09/02/11 22:57:49
>>713
サクラエディタを使ったことないので、サクラエディタでの置換方法は分からないのですが
<(\S+)\sxml:space=preserve>[^\r\n]*<\/\1>
で検索にヒットしないでしょうか?
あとは、それを
<$1\/>
に換えるだけですむのですが・・
715:デフォルトの名無しさん
09/02/11 22:59:51
714では、
[^\r\n]+
を
[^\r\n]*
にしました
716:デフォルトの名無しさん
09/02/11 23:28:16
っつーか、>>695のsed式での回答ってどうなんだろう?
個人的には、環境に左右されないからアリだと思うんだけど。
スラッシュで囲むっていう知識は前提にしていいのかな?
717:694
09/02/12 01:29:13
>>714
出来ました!ありがとうございます!
しばらく頑張ってたのですが、どうにもうまくいかず参ってたところでした
本当にありがとうございました!
718:デフォルトの名無しさん
09/02/12 02:18:07
>>716
まあ正規表現だってのをはっきりさせるのはいいと思うけど、
スラッシュ以外も区切りにできる(できないのもあるけど)というのを
知らない人がさらに増えるようなきがするのはやだなあ。
719:デフォルトの名無しさん
09/02/12 08:50:34
>>718
なんか論点が違う気も。
720:デフォルトの名無しさん
09/02/13 02:32:08
Firefoxのjavascriptを使って、
<div class="mori">
<h2>てすと</h2>
<img src="./test.gif">
</div>
<div>わわわ</div>
のようなHTMLからclassがmoriの上四行の部分を抜き出したいのですが、正規表現を
<div class="mori">(.|\n)*<\/div>
とすると最後の<div>わわわ</div>まで入ってしまいます。
次に
<div class="mori">[^(</div>)]*<\/div>
を試してみたのですが、これもうまくいきません。
角カッコの中は丸カッコで囲んでも無視されて一文字ずつに分解されてしまうようです。
どうすればいいんでしょうか?
721:デフォルトの名無しさん
09/02/13 03:26:11
>>720
*や+は最も長く貪欲にマッチしようとするから、最後の</div>にマッチする。
*や+の直後に?を付ければ最小マッチになってできる限り短くしようとするから
望むような結果になるはず。
722:デフォルトの名無しさん
09/02/13 10:14:34
JavaScriptならDOMで操作しないさいよ…
723:デフォルトの名無しさん
09/02/13 20:04:39
>>721
おおおおお!まさにこれを求めていました!
いろんな場面で使えそうでとても助かります。どうもありがとうございます。
>>722
それがGM_xmlhttpRequestで得る値なので、全部テキスト形式になってしまうのです。
724:デフォルトの名無しさん
09/02/14 12:09:33
phpで正規表現を使うかプログラムでゴリゴリ書くか迷ってます
やりたい事は、見出し語:[発音,][定義1][,"例文1","例文2",...][ *注記][; 定義2...]みたいな
テキストを分解して各(配列)変数に設定する、みたいな事なのですがpreg_match_allみたいな関数で
この程度なら実現可能そうでしょうか?
既に結構時間を使ってるので見込みが無さそうならサッサと見切りを付けたいのですが…
725:デフォルトの名無しさん
09/02/14 12:51:03
全部ちゃんと分割できるよ
726:デフォルトの名無しさん
09/02/14 13:28:57
うっ…出来るんですか。(まだ定義の分割すら碌に出来てない…)
もう少し頑張ってみます
727:デフォルトの名無しさん
09/02/14 20:45:00
[*]の[]を普通の文字として扱いたいときどうすればいいんですか?
\[*\]だと無理ですよね
728:デフォルトの名無しさん
09/02/14 20:49:38
ふつうは \[*\] でいいんだよ。ふつうは。
729:デフォルトの名無しさん
09/02/14 20:59:08
そうですか・・・
\[*\]だと]しかクォートされないので・・・
730:デフォルトの名無しさん
09/02/14 21:21:17
[[]*\]
731:デフォルトの名無しさん
09/02/14 21:40:27
やはり]だけでした
732:デフォルトの名無しさん
09/02/14 21:45:24
それをどうやって確かめてるんだ
733:デフォルトの名無しさん
09/02/14 21:53:05
アナログ放送をIEPGで登録すると[S]や[字]といった文字が名前に付きこれが邪魔なのでリネームしたいんです
たとえばファイル名[S][字].avi
s/\[S\]//
してやるとファイル名[字].avi
となりますが
s/\[*\]//
とするとファイル名[S[字].avi
といった感じになります
734:デフォルトの名無しさん
09/02/14 21:57:33
>>733
頭悪いのに勝手に自分で問題を切り分けずに、最初からそれをいえよw
*の使い方しらべとけ
735:デフォルトの名無しさん
09/02/14 22:00:07
わからないんですね
すいません
736:デフォルトの名無しさん
09/02/14 22:00:43
「頭悪い」なんていきなり何様ですか
わからないならわからないと言えばいいじゃないですか
737:デフォルトの名無しさん
09/02/14 22:17:22
どっからどう見ても最初に質問した奴と途中の奴が別人w
738:デフォルトの名無しさん
09/02/14 22:19:09
s/\[*m9(^Д^)\]//
739:デフォルトの名無しさん
09/02/14 22:28:42
s/\[..*\]//
740:デフォルトの名無しさん
09/02/14 23:26:05
>733
横レス失礼します。
s/\[[^\]]*\]//g
これでどうでしょうか?
741:デフォルトの名無しさん
09/02/14 23:33:42
>>733
s/\[.*?\]//g
これでも大丈夫でしょう。
最短マッチに対応している正規表現エンジンの場合は。
*や+は条件に合致しつつできるだけ多くの文字を消費するような選択をします。
*?、+?は最短マッチといって、その条件を満たす最短の場合が選ばれます。
想定される用途では否定の文字クラス [^いろいろな文字] を使うか
最短マッチの .*? を使われると良いとおもいます。
別の表現なら否定先読み (?!文字列) をつかっても長くなりそうですが書けます。
ご参考になれば幸いです。
742:デフォルトの名無しさん
09/02/15 10:10:19
>>733
最初からそれを書け。
コミュニケーション能力不足。
人間相手にコミュニケーションできないで
コンピュータ相手のコミュニケーションが出来ると思うのか?
s/\[[S字]\]//
743:デフォルトの名無しさん
09/02/15 15:20:54
補足です。
>>741の正規表現は*の前に見づらいかもしれませんがピリオド.があるのでご注意ください。
>>733の正規表現 /\[*\]/ にヒットする文字列はたとえば
]
[]
[[]
[[[]
[[[[]
[[[[[]
になります。
744:デフォルトの名無しさん
09/02/15 17:02:57
いくらなんでも初歩で躓きすぎだろ
質問に無関係な知識押し付けてる方もひどいが
745:デフォルトの名無しさん
09/02/16 00:02:06
>>742が一番馬鹿に見える
746:デフォルトの名無しさん
09/02/16 00:17:40
キラーパスだな
747:デフォルトの名無しさん
09/02/16 03:22:04
>>742はネタだろJK
748:デフォルトの名無しさん
09/02/18 14:12:37
++とか(?>)とかのpossessive quantifierってどういうときに使ったっけ?
あれば便利そうは気はするし、実際なんかで使った記憶はあるんだけど思い出せない
749:デフォルトの名無しさん
09/02/18 18:05:15
わからないから聞いてるならまだしも、忘れたから聞いてるってのはそれこそググレば?
750:デフォルトの名無しさん
09/02/19 20:45:50
すいません質問させてください
@/home/test/hoge/test/test.txt
A/home/test/hoge/test/document.txt
↑のパスがありまして、そこからtestで検索をすると
@のtext.txtのみが該当する正規表現ってうまく出来ないものでしょうか?
ファイルまでの途中のパスは含めないで最後のスラッシュ後のファイル名のみ
検索対象としたいのですが悩みまくりです・・・
イメージ的にはエディターでの正規表現で@のみ該当させる感じです。
どなたかご教授願えないでしょうか?
751:デフォルトの名無しさん
09/02/19 20:58:11
C#を使っています
string か strin か stri か str か st か s
にマッチするパターンを今は↓のように書いているんですが
^s(t(r(i(n(g)?)?)?)?)?$
もっと分かりやすい書き方ってありますか?
752:デフォルトの名無しさん
09/02/19 22:42:23
>>750
検索キー 「test.txt」
753:デフォルトの名無しさん
09/02/19 22:44:47
>>750
/([^\/]+\/)*(.*)/ で、\1がパス、\2がファイル名。
754:デフォルトの名無しさん
09/02/19 22:54:31
>>750
秀丸エディタなら↓これでいけた。他は知らん
(?<=.+/)test
755:デフォルトの名無しさん
09/02/19 22:57:56
>>750
test\.txt$
でどうでしょう
756:デフォルトの名無しさん
09/02/19 22:59:13
>>750
少し修正
test\.txt[\r\n$]
757:デフォルトの名無しさん
09/02/19 23:00:16
ひどくなってるYO
758:デフォルトの名無しさん
09/02/20 00:01:43
test\.txt(?=$|\b|[\r\n])
759:デフォルトの名無しさん
09/02/20 02:53:45
YoutubeをダウンロードするFirefoxのuserchrome.jsスクリプトの一部なんだけど
var[ \r\n\t]+swfArgs[ \r\n\t]*=[ \r\n\t]*\{(.*,|)[ \r\n\t]*(t|'t'|"t")[ \r\n\t]*\:[ \r\n\t]*['"]([a-zA-Z\-_0-9]+=)['"].*\}
の(.*,|)の意味するところがわからない。 ↑
|って○○か××を意味するメタ文字じゃないの?なんで)の直前にあるんだろう?
760:デフォルトの名無しさん
09/02/20 03:00:42
(foo|) は (foo)? と同じ意味では。
761:デフォルトの名無しさん
09/02/20 03:13:23
.*0か1個以上ある?じゃあ.+と同じ?
762:デフォルトの名無しさん
09/02/20 08:04:22
はあ?
763:750
09/02/20 08:57:02
みなさんレスありがとうございます
例えが悪かったですが実現したいのはデスクトップの検索エンジンでのファイル名検索でファイル名のみで検索したいのです。
みなさんのレスを参考に思考錯誤してみます
764:デフォルトの名無しさん
09/02/20 20:27:44
>>759
"t": "([^"]+)"
俺は、これで済ませてるw
765:デフォルトの名無しさん
09/02/20 21:39:41
すみません(foo)?の意味がわかりません教えてください
>>764
それでいけるよねw
766:デフォルトの名無しさん
09/02/21 21:02:25
>>751
C#なら
s.Length > 0 && "string".StartsWith(s)
のようにやればいいのに。
767:デフォルトの名無しさん
09/02/23 19:43:45
女のコの性器表現てどれくらいの種類があるんだろう
768:デフォルトの名無しさん
09/02/23 19:56:18
単語だけならともかく、そんなのは文脈によって変わるし、
『×××』だけでもそれを表すことができる上に、『大事なところ』などボカした表現までスコープを広げると
とても現代の正規表現で賄いきれるものではない。
言語学の分野で議論してくるがいい。
769:デフォルトの名無しさん
09/02/24 18:45:51
C#でWBCかワールド・ベースボール・クラシックのどちらかを含み、かつイチローか松坂のどちらかを含むline、と正規表現で
if (Regex.Match(line,"(WBC|ワールド・ベースボール・クラシック) && (イチロー|松坂)").Success)
と書いてみたのですが、いまいちうまくヒットしないです。アドバイスお願いします。
770:デフォルトの名無しさん
09/02/24 20:15:33
正規表現の中に && とか画期的すぎるだろ・・・
テンプレの正規表現講座でも見ておいで
771:751
09/02/24 22:56:03
>>766
確かにその方がわかりやすいですね
ありがとうございます
772:デフォルトの名無しさん
09/02/25 10:58:18
if (Regex.Match(line, "(WBC|ワールド・ベースボール・クラシック)").Success && Regex.Match(line, "(イチロー|松坂)").Success)
でいいんじゃね?C#知らないけど。
AND増えるなら条件を配列に入れてループで。
773:デフォルトの名無しさん
09/02/25 12:46:56
line = "ぽにょワールド・ベースボール・クラシックぽにょイチローぽにょ"
Set RegExp1 = new RegExp
Set RegExp2 = new RegExp
RegExp1.Pattern = "WBC|ワールド・ベースボール・クラシック"
RegExp2.Pattern = "イチロー|松坂"
If RegExp1.Test(line) And RegExp2.Test(line) Then
Wscript.Echo "うんこ"
End If
774:デフォルトの名無しさん
09/02/25 12:49:30
>>772
Regex.Match の使い方が間違ってる。ちゃんと説明書読んだ?
775:デフォルトの名無しさん
09/02/25 14:22:03
C#知らないと言っている人にそんな指摘してもなあ
776:デフォルトの名無しさん
09/02/25 15:22:22
C# カンケーない。Regex.Match の使い方が間違ってる。
777:デフォルトの名無しさん
09/02/25 15:42:59
>>769>>772
if (Regex.Match(line, "WBC|ワールド・ベースボール・クラシック").Success && Regex.Match(line, "イチロー|松坂").Success)
で良いが、IsMatchのほうが良さげ。
if (Regex.IsMatch(line, "WBC|ワールド・ベースボール・クラシック") && Regex.IsMatch(line, "イチロー|松坂"))
778:デフォルトの名無しさん
09/02/27 19:33:25
少しお聞きします。
1hage(100禿)
1hage(10毛)
1hage
という文字列があった場合に、1hage(100禿)以外をマッチさせたいのですが、
なかなかうまくいきません。
どのように正規表現を書いたものでしょうか?
779:778
09/02/27 19:34:25
>>778
すいません。追記です。
具体的には、"hage"をヒットさせたいのですが、"禿"を含むもののみマッチさせないようにしたいのです。
780:デフォルトの名無しさん
09/02/27 19:36:03
1hage にマッチしたものから 1hage(100禿) にマッチするものを取り除く、
じゃダメなのか? どうしても1個の正規表現でやんないとダメ?
781:デフォルトの名無しさん
09/02/27 20:30:52
>>780
うん、やっぱりそれの方がスマートでよいですよね・・・
わかりました。
無理に正規表現だけでやらないとことにします。
ありがとうございました。
782:デフォルトの名無しさん
09/02/28 14:16:03
文章中に「A」と「AA」が混在していて、
1文字だけの「A」を2文字の「AA」にします。
2文字以上連続していない、1文字だけの「A」は
どうやったら探せますか?
/A{1}/ でも駄目ですし、/A[^A]/ だと
行の中に A しかない物が引っ掛かりません。
783:デフォルトの名無しさん
09/02/28 16:40:50
D:\jspsh>jspsh.exe
js> "A AA AAA".replace(/(^|[^A])A([^A]|$)/g, "$1AA$2")
AA AA AAA
js> :q
Leaving "JScript Power Shell"
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4806日前に更新/194 KB
担当:undef