正規表現 part 3

このエントリーをはてなブックマークに追加
885デフォルトの名無しさん:2007/07/12(木) 15:49:56
s/^0+([1-9]|0$)/\1/;
886デフォルトの名無しさん:2007/07/12(木) 16:09:51
>>885
それだと、010系がうまくいかないような。
887デフォルトの名無しさん:2007/07/12(木) 16:20:00
マジで?
888デフォルトの名無しさん:2007/07/12(木) 16:20:49
s/^0+([0-9])/\1/;
889デフォルトの名無しさん:2007/07/12(木) 16:28:31
>>888
やっぱり、010系が。。。
890デフォルトの名無しさん:2007/07/12(木) 16:32:40
use strict;
$_ = "010";
s/^0+([1-9]|0$)/\1/;
print; # 10

$_ = "010";
s/^0+([0-9])/\1/;
print; # 10
891デフォルトの名無しさん:2007/07/12(木) 16:34:40
!?( ゚Д゚)
892デフォルトの名無しさん:2007/07/12(木) 17:20:02
>>890
あれ?
Rubyでやっているのですが、こうなりました。。。

a = "010";
/^0+([1-9]|0$)/ =~ a;
puts $1; # 1

a = "010";
/^0+([0-9])/ =~ a;
puts $1; # 1
893デフォルトの名無しさん:2007/07/12(木) 17:29:37
それは一番目のキャプチャを表示してるだけじゃん。置換しろよ。
894デフォルトの名無しさん:2007/07/12(木) 17:31:27
>>893
了解しました。
置換するメソッドを探してみます。
895デフォルトの名無しさん:2007/07/12(木) 18:39:22
(´・ω・`)
896デフォルトの名無しさん:2007/07/12(木) 20:39:59
CHIKANCHIKAN - 痴漢メソッド

ある一定の値(15から25)を持ち、かつメス属性を持った実体を過激に痴漢するメソッドです!!!!
897デフォルトの名無しさん:2007/07/12(木) 21:44:03
つまんねえこと書くなオッサン
898デフォルトの名無しさん:2007/07/12(木) 21:58:04

(?:0+?)([1-9][0-9]*) → \1

じゃだめなん?
899デフォルトの名無しさん:2007/07/12(木) 22:03:33
ミスった

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

これでどうだろう
900デフォルトの名無しさん:2007/07/12(木) 22:04:30
つかこれでいいのか

^0+([1-9]+[0-9]*|0)
901デフォルトの名無しさん:2007/07/12(木) 23:01:59
>>872=874?
わざわざ試作までして頂いたようで申し訳ありません。

>>869-875
質問の趣旨は、要件にあった物ががあれば、ちょっと教えてもらえないか、
という事であって、プログラムを書いて欲しいとまでは思ってませんでした。
自分はスキルが低いので何もお返しができませんし(汗)

今後は、似たような悩みがありそうなサーバ系のスレででも、別のアプローチで
質問してみます。

レスして頂いた方々、ありがとうございました。
902861=868=901:2007/07/12(木) 23:26:44
すみません自分のレス番つけてなかったです。
903デフォルトの名無しさん:2007/07/13(金) 08:35:24
>>900
gsubという置換メソッドを見つけましたが、その方法だと>>892のやり方でも
いけました。
どもです。
904デフォルトの名無しさん:2007/07/13(金) 19:08:46
AAAAAA/BCD→AAAAAA
BGD/HJL→BGD
/より後ろの文字列を置換で削除(/も含む)したいのですがどういう表記にすればいいんでしょうか?
905デフォルトの名無しさん:2007/07/13(金) 19:32:02
>>904

(.*?)/.* を \1 に置換

処理系によっては / は \/ にエスケープ。
906デフォルトの名無しさん:2007/07/13(金) 19:46:58
>>905
即レスありがとうございます、置換できました
907デフォルトの名無しさん:2007/07/13(金) 20:28:46
/.*を空文字置換ではいかんの?
908デフォルトの名無しさん:2007/07/13(金) 21:27:50
普通はそうなる罠
909デフォルトの名無しさん:2007/07/14(土) 21:38:25
>>901
作った。
自分のブログに上げたから、ブログ検索で見つけてくれ。
910デフォルトの名無しさん:2007/07/15(日) 00:12:39
質問です
「切れる」「切れた」「切れす」「切れてん」「切れ、」にヒットして「切れ〜レス」にヒットしないような正規表現を作ろうと思い、

(?=.*切れ)((?=.*る)|(?=.*た)|(?=.*す)|(?=.*てん)|(?=.*、))^(?!.*レス).*

というのを作ったのですが、これだと「切れ〜〜、」というものまでヒットしてしまって困っています。
「切れ〜〜、」にヒットせずに、「切れ、」にヒットするようにはどうすれば良いのでしょうか?
よろしくお願いします。
911デフォルトの名無しさん:2007/07/15(日) 00:40:48
lex的にやればできる。awkでもできそうだが。

"切れ([るたす、]|てん)" { printf("hit"); }
"切れ.*レス" { /* ignore */ }
. { /* ignore */ }
912デフォルトの名無しさん:2007/07/15(日) 01:11:22
なんでlex?
普通に

切れ(る|た|す|(てん)|、)

でいいだろ。
913デフォルトの名無しさん:2007/07/15(日) 01:13:42
切れ([るたす、]|(てん))
のほうがいいか。
914デフォルトの名無しさん:2007/07/15(日) 01:16:52
>>912

それだと 「切れるレス」 が問題になる
915デフォルトの名無しさん:2007/07/15(日) 02:03:08
「切れ〜レス」だけは駄目ってこと?

「切れるレ」とかは?
916デフォルトの名無しさん:2007/07/15(日) 02:50:06
自分のWindowsアプリに正規表現を組み込もうと思っていますが、どの既存のエンジンが
みなさんのお勧めでしょうか??安定して、日本語を正しく処理できるエンジンがいいです。
917・∀・)っ-○◎●:2007/07/15(日) 03:12:06
よく見るのはBREGEXP.DLL
最近は鬼車じゃないの。

あとはライセンスじゃね?
GPLな正規表現ライブラリ薦められて何も知らずに採用しちゃって・・・
なんてことがあっても誰も責任はとれんよ。
918デフォルトの名無しさん:2007/07/15(日) 03:13:52
>>916
文字コードは?Unicode, Shift_JIS?
919・∀・)っ-○◎●:2007/07/15(日) 03:20:30
Boostの文字列操作ライブラリはshift-jisと相性良くないからな。
自分でトークンイテレータを作りこむ人にはアリな選択
920デフォルトの名無しさん:2007/07/15(日) 03:25:31
文字コードはUnicodeでお願いします。Windowsの内部形式と同じUTF-16LEで。
BREGEXPか鬼車ですか。わかりました。調べてみます。
921デフォルトの名無しさん:2007/07/15(日) 03:39:48
Unicodeなら、Bregexp.dllは使えないな。鬼車かBoostかな?
鬼車は置換処理は自分で書かないといけないので注意。

あとは、Bregexp互換で中身は鬼車のbregonig.dllってものもあるけど、
ベータ版のUnicode対応版が出てる。置換もあるけど、まー、ベータ版だから様子見かな。
922デフォルトの名無しさん:2007/07/15(日) 06:32:38
>>915
「切れるレス」にヒットしなければいいです。

専ブラJaneのあぼーんで使いたいので、perl互換で作りたいのです。
>>910の正規表現だと、「切れ、」と「切れ〜〜、」のどちらにもヒットしていしまい、この2つを区別したいのです。
例えば「切れないし、」は残したい場合でも、「切れ」と「、」が含まれるのでヒットしてしまうのです。

どうすれば解決できるのでしょうか?よろしくお願いします。
923922:2007/07/15(日) 06:48:52
書き忘れました。
情報小出しにしてすいませんでした。
924デフォルトの名無しさん:2007/07/15(日) 06:55:11
しね
925デフォルトの名無しさん:2007/07/15(日) 13:17:40
UTF-8 なら PCRE でも良くね?
926・∀・)っ-○◎●:2007/07/15(日) 13:54:29
単純な文字列マッチの性能は鬼車>PCRE

文字列固定の部分をBoyer-Moore法使って高速化してるからな。
Xpressiveもそうだっけな
927デフォルトの名無しさん:2007/07/15(日) 14:23:29
>>922
手元に環境無いから試せないが

/切れ([るたす、]|(てん))(?!レス)/

では、どうか?
928デフォルトの名無しさん:2007/07/15(日) 19:49:29
>>927
だめでした。
「切れ、」と「切れ〜〜、」は解決できているのですが、「切れるレス」にもヒットしてしまいました。
929デフォルトの名無しさん:2007/07/15(日) 20:11:02
正規表現はxxを含まないというのを書くのに向いてないのに
なぜ無謀にもやろうとする奴が後をたたないのだろうか...
930デフォルトの名無しさん:2007/07/15(日) 20:18:39
NOT ○○を含む
で実現すればいいのにねぇ
931デフォルトの名無しさん:2007/07/15(日) 21:00:59
そうは言っても、ソフトがそれに対応していないとどうにもならんわけで。
(Janeはどうか知らんが)
932デフォルトの名無しさん:2007/07/15(日) 22:44:49
>>928
そもそも Jane の正規表現って、Perl 互換なの?
あと、日本語をちゃんとサポートしてるのか?

Jane で使える正規表現を説明しているページ Plz
933デフォルトの名無しさん:2007/07/15(日) 23:38:25
素朴な疑問だけど、正規表現に否定がないのはなぜ?

!(正規表現) で(正規表現)にまっちしない文字列、みたいのが
あってもよさそうなものじゃないかと思うのですが
934デフォルトの名無しさん:2007/07/15(日) 23:54:22
>>932
JaneView.txtに
▼01101-040210RC1
▽正規検索ユニットを変更
 ・これまで使っていたRegExpRから、Windows/IE付属のRegExpオブジェクトに変更
 ・文法はPerl5互換(これまでと同じ)
 ・パフォーマンスは純粋な検索部分の速度で約2〜3倍に向上
 ・以前のユニットに戻すには、「設定」「設定」「その他」の「正規検索にWSHを使う」
  をオフにして再起動
 ・環境の問題でWSHが使えない場合は、初回起動時に警告ダイアログが出て自動でオフに
  設定されます(その場合、チェックボックスはグレーアウトされる)
  ※WSHで問題の報告がなければ、いずれRegExpRを取り除く予定です。
とありました。
日本語は使えてます。
935デフォルトの名無しさん:2007/07/16(月) 00:01:42
>>933
まいっちんぐしない文字列を痴漢するときはどうするんだい?
936デフォルトの名無しさん:2007/07/16(月) 00:18:35
というか、1文字の入力から状態遷移を繰り返してるから
入力から遷移先が決まらないものはダメなんじゃねえの
937デフォルトの名無しさん:2007/07/16(月) 00:38:03
[^hoge]
938デフォルトの名無しさん:2007/07/16(月) 00:38:19
正規言語の補集合も正規言語だから、!(正規表現)みたいのが
なくても書けるので不要ということだろうな。でも与えられた
正規表現が受理する言語の補集合を受理する正規表現を書くのは
大変なので、そういうシンタックスシュガーがあれば便利かも?


939デフォルトの名無しさん:2007/07/16(月) 00:47:15
grep -v 'regexp'
940デフォルトの名無しさん:2007/07/16(月) 00:52:00
>>938
意味がわかりません。
941デフォルトの名無しさん:2007/07/16(月) 00:58:26
>>940
自分の無知を偉そうに自慢されても私たちに出来る事は何も有りません
942デフォルトの名無しさん:2007/07/16(月) 01:03:39
>>934
確かに

> ・文法はPerl5互換(これまでと同じ)

って書いてあるけど

> Windows/IE付属のRegExpオブジェクトに変更
> ・環境の問題でWSHが使えない場合は

とも書いてあるので、細かいところまで Perl 互換かはちょっと怪しいな。

とりあえず
http://tehen.hp.infoseek.co.jp/abone/abone.html
によると、

/切れ([るたす、]|(てん))[^レ][^ス]/

あたりは動きそう。

(行末とかが "切れる" とかなってるとちょっと不味いかも...。)
943デフォルトの名無しさん:2007/07/16(月) 01:10:31
>>941
小難しい単語並べりゃいいってもんじゃないんだよ。

>正規言語の補集合も正規言語だから、!(正規表現)みたいのが
>なくても書けるので不要ということだろうな。

書いてみろ。

この作業が酷く大変なら、そういうシンタクスシュガーが無い理由もわかるだろ。
944デフォルトの名無しさん:2007/07/16(月) 01:29:25
なんちゅう詭弁
945デフォルトの名無しさん:2007/07/16(月) 01:29:33
>>943
特定文字列が含まれてるかどうか調べるなら
if( $pero =~ /kari/ ){print "バーロー\n";}

含まれていないことを調べるならその補集合で
if( !($pero =~ /kari/) ){print "ローバー\n";}

ってことを言っただけでしょ?
これだけじゃ超えられない表現もいっぱあるけどさ
946・∀・)っ-○◎●:2007/07/16(月) 03:13:12
クイックハックでパターンの先頭に1個「!」があれば否定にするようにしたことあったな。
実現方法は後察しの通り。
947デフォルトの名無しさん:2007/07/16(月) 06:55:18
if( $pero !~ /kari/ ){print "バーロー\n";}
948デフォルトの名無しさん:2007/07/16(月) 07:19:42
団子って何歳?
949デフォルトの名無しさん:2007/07/16(月) 09:26:50
たしか40代だったな
950・∀・)っ-○◎●:2007/07/16(月) 15:21:25
永遠の12歳だお
951デフォルトの名無しさん:2007/07/16(月) 22:51:37
36進法で。
952糾 ◆OlivettiFg :2007/07/17(火) 23:14:00
>>950
人間のトシに換算すると(ry
953・∀・)っ-○◎●:2007/07/17(火) 23:22:46
縦読み厨うざい
954デフォルトの名無しさん:2007/07/19(木) 00:36:58
print "バーロー\n" unless( $pero =~ /kari/ );
955デフォルトの名無しさん:2007/07/25(水) 17:23:43
ここに書き込むのは気が引けるほどの、ど初心者なのですが質問させてください。

FirefoxのSearchBox Syncというアドオンを使っています。
これは検索した文字列を検索ボックスに自動的に挿入させるアドオンです。

これで適用させるサイトを増やしたくて、正規表現を見始めました。
そこで本題なのですが、

^http://www\.amazon\.com?\.?(\w+)?/.*keywords=([^&]+)

amazon.*keywords=([^&]+)

では、どちらも検索語句を抽出できますが、どちらの記述の方がスマートな記述なのでしょうか?

なお、最後尾のグループに入る文字列が検索ボックスに挿入されます。
956デフォルトの名無しさん:2007/07/25(水) 19:08:55
どちらがスマートかというより、上のほうが厳密で、下のほうは緩やか。
例えば下のだとamazon.co.jpのほうもマッチします。
957デフォルトの名無しさん:2007/07/25(水) 22:10:23
>>956
上のも co.jp にマッチするというかマッチさせたいという話じゃないのかな?
958デフォルトの名無しさん:2007/07/25(水) 23:29:47
YouTubeのIDだけをとりだしてみたいんだけど
できるGUYいる?

このパターンを
http://jp.youtube.com/watch?v=GUUxY6mJ2es
http://youtube.com/watch?v=GUUxY6mJ2es
http://www.youtube.com/watch?v=GUUxY6mJ2es

こんなかんじ
GUUxY6mJ2es
959デフォルトの名無しさん:2007/07/25(水) 23:37:41
できるよ

分かったら後は自力で頑張れ
960デフォルトの名無しさん:2007/07/25(水) 23:39:29
>>959
レスありがとな!
今「サルでもわかる正規表現」ってサイト読んでるぜ!
961デフォルトの名無しさん:2007/07/26(木) 10:52:33
&または行末 というつもりで[&$]と書いてもうまくいかない
962デフォルトの名無しさん:2007/07/26(木) 10:58:14
行末は文字じゃないから
963デフォルトの名無しさん:2007/07/26(木) 11:04:53
>>962
&または行末 という表現はどうかけばいい?
964デフォルトの名無しさん:2007/07/26(木) 12:02:58
(&|$)
965デフォルトの名無しさん:2007/07/26(木) 13:02:34
>>950
次スレはテンプレに「質問する香具師は実装言語・処理系を言え」を加えて立てといて。
よろしく。
966デフォルトの名無しさん:2007/07/26(木) 13:23:00
()が必要なのか・・・無しで書きたいな・・・
967デフォルトの名無しさん:2007/07/26(木) 13:32:33
なんで?
968デフォルトの名無しさん:2007/07/26(木) 13:47:42
いや、なんでもない
?=を使えばいいのを忘れてた
969デフォルトの名無しさん:2007/07/26(木) 22:08:56
そんなに正規表現による検索って需要あるのか??
だとしたら、俺のソフトにも追加してやるか。
970デフォルトの名無しさん:2007/07/26(木) 22:17:44
いや、お前のには要らない。
971デフォルトの名無しさん:2007/07/27(金) 00:28:35
そもそもお前のソフトが要らない
972デフォルトの名無しさん:2007/07/27(金) 00:56:37
お前もいらない
973デフォルトの名無しさん:2007/07/27(金) 09:41:15
俺もいらない
974デフォルトの名無しさん:2007/07/27(金) 09:59:45
俺にはお前が必要
975デフォルトの名無しさん:2007/07/27(金) 12:12:38
いらないのは俺だけ
976デフォルトの名無しさん:2007/07/27(金) 21:17:33
おらだけいらね
とりなしてくだせ
977デフォルトの名無しさん:2007/07/28(土) 14:46:07
文章から特定の単語以外をすべて空文字に置換することはできますか?
978デフォルトの名無しさん:2007/07/28(土) 15:38:23
>>977
できるかもしれないが、まずは >>965 で。
979977:2007/07/28(土) 15:40:46
すいません。

サクラエディターもしくはEclipseのテキストエディターでできれば、と思います。
980デフォルトの名無しさん:2007/07/28(土) 15:40:45
そのへん言わないやつらは全員perl準拠だと思えばいいよ
違う環境だったら死ねと言えば済むこと。
981デフォルトの名無しさん:2007/07/28(土) 17:49:23
>>979
死ね
982デフォルトの名無しさん:2007/07/28(土) 18:22:22
>>979
死ね
983デフォルトの名無しさん:2007/07/29(日) 00:19:13
ヒドスw
まあ、結論だけ言うと出来ないよ。>>977
984デフォルトの名無しさん
サクラエディタマクロでWindowsSriptで否定の先読みが使ってやれ。
空文字ならnul文字だな。\c@だ。