1 :
デフォルトの名無しさん:
(*.*)
/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < ああああああああああああああああああああああああああああああああああああああああああああああああああ
/| /\ \________
C++で使える正規表現ライブラリ教えれ。
定番のヤツない?
regex
8 :
デフォルトの名無しさん:2001/07/17(火) 21:06
ここが正規表現のスレかぁ・・・
([1-8])|([1-9][0-9]+) は逝って良し
10 :
デフォルトの名無しさん:2001/07/17(火) 22:26
規則にこういうのがありますが、
* 直前のパターンの0回以上の繰り返し。
+ 直前のパターンの1回以上の繰り返し。
*と+について、「直前のパターン」が無かった場合、どうなるのでしょう?
例えば*だけの場合。
*
これはエラーとして弾くのが妥当ですか?
11 :
デフォルトの名無しさん:2001/07/17(火) 22:38
POSIX以外に、正規表現って規格化されてる? 例えばSQLとかだって
規格があるじゃん。ANSIだっけか。
ところが正規表現って、オレはNFA、あいつはDFAってレベルで、メタ
文字はなんでも\w(別に\aでも言い訳じゃん)なのは何故でしょう。
>([1-8])|([1-9][0-9]+) は逝って良し
>>9 の本文でマッチしました
13 :
デフォルトの名無しさん:2001/07/17(火) 23:34
正規表現つったら今やperlのが代表的ですが、
pythonとかrubyの正規表現ってどの程度でしょう?
14 :
謎:2001/07/17(火) 23:48
今年3月に孫のところから出版された
『性器表現の達人』
でも買って読め
15 :
デフォルトの名無しさん:2001/07/18(水) 00:05
なんで荒れるのかなあ?
16 :
デフォルトの名無しさん:2001/07/18(水) 00:16
性器豹変の達人です。
17 :
あれら:2001/07/18(水) 00:27
言語はプログラミングのためにあるわけじゃないみたい。でしょ?
話は逆で、うちらはたまたまそこにある言語とゆものを利用したり悪用したりして、偶然なんかの役に立ったりもするコードができたりできなかったりする。
18 :
デフォルトの名無しさん:2001/07/18(水) 00:40
?わからん
>>10 *は0回以上の繰り返し、ゆえに0でもオケ。
+は一回以上の繰り返し、ゆえに0はペケ。
だったような
>>19 じゃなくて、RE自体が不正だろ、/*/なんてのは。
>>20 そっか、直前のパターンのない*は不正って事か。
勘違いしてた、さんくす
22 :
デフォルトの名無しさん:2001/07/21(土) 00:57
つまり
*
+
単体ではペケってことでいいですか?
現実的で役に立ちそうな正規表現おせーて
25 :
デフォルトの名無しさん:2001/07/21(土) 01:48
>>22 直前のパターンがないときはメタキャラクタと見なさないという実
装もある。Emacsだとか。
26 :
デフォルトの名無しさん:2001/07/21(土) 02:30
>>25 それはなんか誤解を招きそうですね。
でも、普通の式解析で言えば、2項演算子の/や*とかが、
いきなり現れた様な物だから、それは演算子ではない、
では何か?→ただの文字、って解釈もアリなのかな。
27 :
デフォルトの名無しさん:2001/07/21(土) 04:05
では何か?→エラー
の方がほんとは親切だと思う。
メタキャラクタの無効化の手段は他に用意されてるわけだし。
28 :
デフォルトの名無しさん:2001/07/22(日) 00:09
s/age//
>>28 ageを空文字列に置き換えたら上がらないのでは……?
30 :
デフォルトの名無しさん:2001/07/22(日) 02:38
31 :
30:2001/07/22(日) 02:39
ごめん、sage忘れた。
33 :
デフォルトの名無しさん:2001/07/24(火) 01:53
オライリーの詳説正規表現は難しい。
34 :
デフォルトの名無しさん:2001/07/30(月) 05:01
正規表現だけで一冊の本が書けるものなの?
35 :
デフォルトの名無しさん:2001/07/30(月) 05:34
>>34 既にこのスレの中だけでも二冊タイトルが出ているが?
36 :
デフォルトの名無しさん:2001/07/30(月) 05:50
sage
s/a//
sgeにしてどうする
s/s//
性器表現
ぷっぷぷぷ。使い古されたネタを書き込んで楽しいか?
40 :
デフォルトの名無しさん:2001/07/30(月) 10:22
sedで改行コードを無くし複数行を連結する方法を教えて下さい。
'\n'で追加はできるんですけど削除はできないものなのでしょうか?
awk使えば?
42 :
デフォルトの名無しさん :2001/07/30(月) 19:01
>>42 ワラタ。最初 sane って何よ? とか思ったけど(w
>>40 sed でできない気がする...
tr -d '\n' とかならできるけど、正規表現でもなんでもないな。
ということで sage
ハァ?
>>40 s/\n//gじゃだめかい?
crlfなら
s/\r\n//g
昔、sedで足し算したり、
位取り付き漢数字変換(12345←→壱拾弐万参千四百五拾六)する
スクリプトを作ったことがある。
今となっては懐かしい思い出。
47 :
デフォルトの名無しさん:2001/07/31(火) 12:55
>>40 Perlだと簡単にできるような気がします。
Perlはsed、awkの機能も含んでるからいいと思います。
root用のシェルスクリプトにはperlは使わないね。
49 :
43:2001/07/31(火) 14:09
>>45 少なくとも GNU sed 3.02 はダメだったけど...
いける実装の sed もあるのかもしれない。
>>48 そうでもないよ。
50 :
40:2001/08/03(金) 17:19
遅くなりましたがレスくれた方どうもです。
えーと"sed"で、と書いたのはvi系のエディタのコロンコマンドで連結を
行いたかったからです。Perlやawkとか答えてくれた方すいません。
Jコマンド+map機能を使ってもいいのですが・・・。
パターンを含む行の改行を取り除くみたいなことが簡単に行いたいです。
ちなみに使っているエディタはviviです。vimとかなら可能なのでしょうか?
s/a/g/e
オス qp db o|o
メス (())
53 :
デフォルトの名無しさん:2001/08/03(金) 20:51
>qp db o|o
何かと思ったら、ちんぽか。
御開帳: ((@))
55 :
デフォルトの名無しさん:2001/08/03(金) 22:11
良スレage!
8------------>
ネスレ
58 :
デフォルトの名無しさん:2001/08/08(水) 03:10
ニッポン
59 :
デフォルトの名無しさん:2001/08/09(木) 22:14
日本語対応した正規表現ライブラリ(かDLL)で
お勧め教えてください。
60 :
デフォルトの名無しさん:2001/08/10(金) 03:03
regex
\|/
/⌒ヽ
│ ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
│ ゚ Θ゚)<ちょっと、おめこをナメてくらあ。
〕 〔 \_______
/ ヽ
/ ∵ \
/ / ∵∵ト、\
│ |ヽ ∵∵/ \ \
│ | │ ∵│ (_)
(_)│ ∵│
\ \/
/ \ \
/ / \ \
/ / \ \
(  ̄) (  ̄)
62 :
デフォルトの名無しさん:2001/08/12(日) 00:10
定期age
63 :
デフォルトの名無しさん:2001/08/12(日) 19:04
yamada と tarou の両方が含まれている(大小文字及びyamadaとtarou順番は問わない)文字列にマッチするのは
(.*([yY][aA][mM][aA][dD][aA]).*([tT][aA][rR][oO][uU]).*)|(.*([tT][aA][rR][oO][uU]).*([yY][aA][mM][aA][dD][aA]).*)
とするしかないのでしょうか。
64 :
デフォルトの名無しさん:2001/08/12(日) 19:05
>>63 /(yamada.*tarou|tarou.*yamada)/i
ではダメ?
65 :
デフォルトの名無しさん:2001/08/12(日) 19:16
UZURAすごいな。
どういう仕組みになってるんだろうか…?
66 :
デフォルトの名無しさん:2001/08/12(日) 19:17
$a="yamada";
$b="tarou";
/($a.*$b|$b.*$a)/i
でもいいのかな?演算子の優先順位が良く分からんが…
67 :
デフォルトの名無しさん:2001/08/12(日) 19:21
品詞分解って何をどうやってるの?
68 :
デフォルトの名無しさん:2001/08/12(日) 19:59
69 :
デフォルトの名無しさん:2001/08/12(日) 21:15
<history date="YY/MM/DD" memo="更新内容">
こういうタグの解析をしたいのだけど、”更新内容”には
2バイト文字が入る事を前提にしたいのね。
2バイト目の " と、半角文字の " はどうやってくべつすればいいのかしら?
/(<history(\s+)date=[\"](\d+)[\/](\d+)[\/](\d+)[\"][\s]+memo=[\"](.*)[\"]>)/i;
$year =$1;
$month=$2;
$day=$3;
$memo=$4;
でいけるかな。
>>69 幸いにして"はEUCやSJISとは重ならない。
ISO-2022-JPが対象ならいっぺん変換した方がいい。
71 :
デフォルトの名無しさん:2001/08/14(火) 12:33
1-3,6,7-8,9,10,111222,11111-116166
とう文字列があります
1 ハイフンでつながれた数字を取り出す
<パターン>[0-9]*-[0-9]*"
<結果>1-3 7-8 11111-116166
2 両端が,の数字を取り出す
<パターン>?
<結果>6 9 10 111222
1のほうは多分書いたパターンでいいと思うのですが、
2がなかなかうまくできないです。
教えていただけますか?
72 :
デフォルトの名無しさん:2001/08/14(火) 12:37
>>71 ,[0-9]*?,
じゃだめ?最小マッチ指定すればよいと思うんだけど
最小マッチの記号忘れた。
73 :
71:2001/08/14(火) 13:33
補足
1,2-3,4,5,6
のようなパターンもあります。
このばあいは
1 4 5 6
とマッチさせたいです
SOFTBANKから出ている「正規表現の達人」という本は良本?
75 :
デフォルトの名無しさん:2001/08/14(火) 14:02
>>75 一回マッチするとその次の検索は後ろの,のあとから始まるので、そ
の直後の数字にマッチできない。look-aheadを使えば
/,[0-9]+(?=,)/
あるいはlook-behindをつかって
/(?<=,)[0-9]+,/
前後の,を除外するにはlook-ahead/look-behind両方が必要。
/(?<=,)[0-9]+(?=,)/
77 :
デフォルトの名無しさん:2001/08/14(火) 15:03
こういうことか?Perl Regexだけど。
(?<=,)[0-9]*?(?=,)
78 :
71:2001/08/14(火) 15:50
look-aheadはPerl6からの機能ですか?
org.apache.oro.text.perl.Perl5Util
をJavaでつかってます
(?<=,)
の部分が例外になってしまいます。
やっぱり手で書くしかないのかな
[^,][0-9]*[$,]
じゃなくて?
81 :
名無しさん:2001/08/14(火) 17:24
>単純に文字列にマッチするかどうか調べる正規表現より
>ずっと難しいと思う。
正確さを諦めればずっと簡単。
かんなの辞書データで最長一致を求めていけば意外と
辞書の構成の妙でうまく単語分解するのでびっくり。
もちろん、本格的なシステムにはなんないですけど、
キーワード検索程度には使える。
83 :
デフォルトの名無しさん:2001/08/14(火) 19:27
性器表現で痴漢
>>74 オライリー「詳説 正規表現」を飼え
「正規表現の達人」は浅すぎる。
85 :
デフォルトの名無しさん:2001/08/15(水) 18:43
超厨房質問だけど、文字列hogeが*含まれない*行全体にmatchするのって
どうやればいいのかな?
そこらへんは正規表現の機能ではない。
egrepやsedなら-vオプション、
Perlなら{ hogehoge if $_ !~/pattern/; }
だろうな。
^[^h][^o][^g][^e]*$
でウチのエディタ(JRE32.dll使用)は何故かマッチした。アレ?
88 :
87:2001/08/15(水) 21:06
いや、勘違いだった。ごめん。
90 :
85:2001/08/16(木) 00:09
>>89 二つ目の.*はいらなかった。
/^(?!.*hoge).*$/
なにやってんだか。鬱。
92 :
デフォルトの名無しさん:2001/08/17(金) 20:08
数字が入っていない半角かっこを全角に置換する
ためにヒットさせる正規表現として「置換前」に入れるもの
\(\f[^0-9)\n]*\f\)
をどこかで読んで使ってるんですが、分析ができないので、応用が利きません。
これを日本語にしてもらえないでしょうか?
とくに0-9の後の ")" が分からないんです。
>>92 何の正規表現?
\([^0-9]*\)
だと
(aaa)aaa) という文字が来たとき、1つ目の ) を含めて全体を置換してしまう(*は欲張り)。
[^0-9]* は「0から9以外のいずれか1文字が0個以上」という意味なので ) という文字も含まれてしまうため。
\([^0-9)]*\)
だったら 「0から9と ) 以外のいずれか1文字が0個以上」という意味になるので、
) という文字が来たときにマッチングは止まり、 (aaa) の部分のみが正しく置換される。
つまり、92さんの分からないという ) も 0-9 と全く同じように文字を指定しているに過ぎない。
一般に最小マッチが出来ない環境で * や + といった文字の欲張りな挙動を抑えるために
.*終了文字
.+終了文字
を
[^終了文字]*終了文字
[^終了文字]+終了文字
と書く。
(正確には
[^終了文字\n]*終了文字
[^終了文字\n]+終了文字
)
こんなんでどう?
[知っていると便利な女性器の主な隠語]
穴、赤貝、赤烏帽子、赤団子、赤門、あけび、あぐら開き、上がりぼぼ、
あさぼぼ、葦原、天岩戸、穴熊、あわび、あわびくぼ、あらばち、蟻の門
渡り、青田八反、あたたかまんじゅう、空家、合わせ貝、泉、池、猪、磯
巾着、淫門、厩、うなぎ開き、大口、おかんこ、奥の院、御香箱、お黒も
の、おとし穴、斧きず、お鉢、大皿、お箱、落ちくぼ、おまんじゅう、お
まん、おまんこ、おめこ、おちゃっぴい、かくしどころ、かくれどころ、
かんこ、観音、開帳、歓器、柏餅、かわらけ、皮財布、貝、蟹、きず、巾
着、玉門、客間、局所、くぼ、くみど、くぼみ、くど、桑名、くるみ、栗、
毛雪駄、毛巾着、毛まんじゅう、毛靴、毛桃、鯉口、御秘蔵、木ノ実、故
郷、香開、細工場、さかずき、ささげ、三寸、三角、逆さ富士、逆さ舟、
鞘、蜆、四十八ひだ、しなたりくぼ、しも、下の口、品物、朱門、女根、
すずり、すだれ、巣、すり鉢、せり箱、そそ、空、そら豆、空割、たれ、
たま、谷間、大衆風呂、足袋、たらい、丹穴、茶碗、茶釜、茶壷、筑紫つ
び、ちゃんこ、ちゃんべ、ちょこ、ちんつび、つびたり、つぼみ、つぼ、
つか袋、露穴、鉄開大明神、兜巾、戸口、洞庭の月、洞門、道具、常闇、
とさか、戸立、薙刀、情所、内陣、なま貝、奈落、肉まんじゅう、如来、
沼、のこ、乗合舟、畑、蛤、花、はじけ豆、はりま鍋、火消壷、ひなさき、
びり、菱餅、秘境、人穴、船霊、風呂、舟、ふいご、篩、へき、べにうす
ざん、へへ、へっぺ、べっちょ、へその下、べこ、ほと、ぼぼ、ぼぼじょ、
ほがみ、報謝開、ぼぼっこ、牡丹餅、ぼっしょー、ぽっぽ、ぽっぽじょ
>>93 多分秀丸の正規表現だと思われ。
マッチした部分を置換後文字列に反映させる時に\fって使ったような。
96 :
92:2001/08/18(土) 21:02
>93さん、ありがとう。
秀丸マクロです。
ご説明、よくわかりました。特に前半部分。
あと、後半部分の、「終了文字」あたりがまだ理解不十分です。
良い例があったらと探しているんですが、思いつかないので、
よかったらお聞かせください。
秀○と荒らしが出てきた所で、
このスレは終了します。
98 :
終了中申し訳ありませんが・・・:01/09/08 22:09
例えば、$lines[20-21]について・・・
<td><a href="./kabe/shingomama.gif"><img src="new.gif">慎吾ママ</a>[120*120]<br>
<a href="./kabegami/you.gif">IS IT YOU?</a><br>
こういった文字列の<a href=■■■■.gif>って文字列だけを、
<a href=■■■■.htm>に変える方法がわかりません(^^;
どなたか解いていただけませんか?
99 :
デフォルトの名無しさん:01/09/09 00:37
そもそも正規表現ってどういう意味なのですか?
>>99 正規文法・正規言語・正規表現・有限オートマトンあたりで検索。
「何が正規表現であるか」はおれもわかるけど、
「なぜそれを正規表現と呼ぶか」は、たいていだれも、
なかなか技術の本では教えてくれないな。
たぶん言語学の本にのってる?
102 :
デフォルトの名無しさん:01/09/09 01:15
>>98 undef $/;
while(<>){
s/(<.*?>)/gif2html($1)/esg;
print ;
}
sub gif2html{
my $string = shift;
$string =~ s/([\w\d]+\.)gif/$1html/g;
return $string;
}
>>101 「正規文法と同等の表現力を持つから」だと思うが、そもそも何で
正規文法と呼ぶのかは謎ですね。
文脈自由文法あたりは、なんとなく意味が通るけど。
>>102 s/(<a href="\w+)\.gif(">)/\1.html\2/g;
じゃだめなの?
スラッシュわすれた。あと.htmか。
s/(<a href="[\w\/]+)\.gif(">)/\1.htm\2/g;
>>103 文字通り、文法の規則性が高いからじゃないの。
入力文字列にどういう規則があるか、と考えたときに
有限個のキャラクタと数少ない規則で全てが表現
できます、というわけだから。微分もできるし。
108 :
デフォルトの名無しさん:01/09/09 02:13
じゃあ、「正則文法」とかいったほうが数学的にぴったりってこと?
109 :
デフォルトの名無しさん:01/09/09 02:32
>>108 あくまで「数学的には」そうかもね。
regularの訳語 正規/正則 は両方ある。
regularって原語でどういう意味に使われてるんだろうな。
110 :
デフォルトの名無しさん:01/09/09 02:36
111 :
デフォルトの名無しさん:01/09/09 02:41
マカロックとピッツ!こんなところで名前をみるとは。。
112 :
デフォルトの名無しさん:01/09/09 02:54
>>110 ほぉ。ふむ。
じゃ、正則じゃなくて正規って呼ばれるのは何でだろうね。
数学のほうのregularの訳語で正規って使うのかな?
ほんとは性器表現と書きたかった
とか
115 :
デフォルトの名無しさん:01/09/09 08:01
>113
「詳説 正規表現」と同レベルだな
116 :
デフォルトの名無しさん:01/09/09 08:05
Cのプログラムを正規表現であらわしてください。
118 :
デフォルトの名無しさん:01/09/09 10:01
$VAL = ([0-9]*)|([0-9].[0-9]*)
$NAME = [_A-Za-z][_A-Za-z0-9]+
$TYPE = (int|double|float|char)
$VAR = TYPE[ ]*(NAME|NAME = $VAL)*;
$FUNC = $TYPE[ ]+NAME[ ]+\(|TYPE NAME(;TYPE NAME)\)
119 :
デフォルトの名無しさん:01/09/09 20:00
「regular」という語には「気持ちの良い」という意味があるんだよ。
例: a regular fellow
いいやつ、好漢
>>117-118
「Cの構文規則を」とは言ってないみたいだけど?
121 :
デフォルトの名無しさん:01/09/09 23:33
正規表現で検索できるWebの検索エンジンって無いッスかね
122 :
デフォルトの名無しさん:01/09/20 16:12
value="value"
でvalue以外をnullに置き換えたいんです
value=\"*\"
以外ってどう表現したらいいですか?
>>122 言語/環境は?
Perl ならたとえば
s/^value="(?!value\b)[^"]*"$/value="null"/;
…なんてのがうまく動いているようにみえる。
124 :
デフォルトの名無しさん:01/09/21 23:53
正規表現で、開き括弧と閉じ括弧が対応した文字列のマッチが作れないことって証明できる?
125 :
デフォルトの名無しさん:01/09/22 00:16
大学生の演習問題だな...
DFAと正規表現が同等なことを利用して、
DFAをつくろうにも状態数が無限になってしまうといえればいいのか?
126 :
デフォルトの名無しさん:01/09/22 00:34
DFAがなんなのか知らなくて、ウェブでちょろちょろ検索してみたんだが、
今も漠然としか分かってないんだけどね、まぁ要するにツリー状に
表せる状態遷移の系図ですか?
Perlの正規表現は\1とかで後方参照できるから、厳密には
正規表現からDFAへの対応は作れないような気がするんだけど、
どんなもんでしょうね。
>>127 後方参照は言語の機能であって正規表現とは関係ない。
129 :
デフォルトの名無しさん:01/09/22 03:06
関係あるだろ。\1入れたら本来の正規表現じゃない。
よって DFAにも落とせないと。
正規表現実装した(実装しようとした)ことがあれば、
\1がまっとうなDFAではできないことは明白だな。
サポートしてるやつはだいたい、NFAで工夫してるようだね。