1 :
デフォルトの名無しさん :
2007/08/02(木) 13:53:20 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
保守
5 :
デフォルトの名無しさん :2007/08/06(月) 18:53:14
今デジカメのデータをリネームソフト(Flexible Renamer)で編集しています。 正規表現で()の中の文字列と()を消したいのですが 全く知識がないので分かりません。 プリセットの(.*)\(\d+\)(.*)で数字は消せるようなのですが、、、 場違いなレベルなのは重々承知しておりますが できればどなたかご教授よろしくお願いいたします。
よくわからんが、その正規表現と似たもので括弧の中に数字以外も含めるってことなら (.*)\([^)]+\)(.*) でどうだろう。
>>6 ありがとうございます!できました。
凄く便利なものなんですね。
これを機会に勉強してみようかな。
しかし作ってるときは便利だけど、あとから見ると自分でも何やってんのかわかんないことあるよねw
9 :
デフォルトの名無しさん :2007/08/10(金) 02:20:23
10 :
デフォルトの名無しさん :2007/08/10(金) 02:21:53
言語は何なの? Perlだったら、s///gのオプションのgを指定しなければ繰り返さない。 PHPなら_Allが付いてる関数を使わない。
オミトロンwikiによると正規表現(PerlやJavascriptなどで見られる物とは大分違う)と書いてありました ちょっとそれ以外に自分では探せませんでした オミトロンの方のスレで質問することだったのかもしれません
13 :
12 :2007/08/11(土) 01:38:05
それは正規表現の問題じゃない ループして適用されるのはオミトロンの事情では ここで訊いても無駄
15 :
12 :2007/08/11(土) 02:40:30
どうもお答えありがとうございました
16 :
デフォルトの名無しさん :2007/08/13(月) 08:17:52
PHPでURLの正規表現をしたいです。
$pat = "(https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";//検出パターン
$rep = "<a href=\"\\1\">\\1</a>";//置換パターン
$body = ereg_replace($pat, $rep, $body);
で、大体はOKなのですが、URLのあとに例えば
<a href="
http://yahoo.co.jp/ ">hello</a>私のHP
のように入力すると、ダブルクォーテーション以降も入ってしまいます。
(</a>の閉じカッコまで)
何か良い方法ありませんか?お願いします。
17 :
デフォルトの名無しさん :2007/08/13(月) 22:27:33
あげます
よくわからんけど、途中ドット入ってるじゃん。 エスケープしてみな
19 :
16 :2007/08/14(火) 00:15:17
>>18 thx
$pat のことですよね?エスケープって\マークを前に付ければいいですよね?
ドットにやってみたけど駄目でした。$と/にもやってみたけど駄目でした。
じゃあ駄目だな
うまく動いてるような。 やりたいこととがよくわからん。
PHP知らんけど、文字列のエスケープと正規表現のエスケープをごっちゃにするなよ
23 :
16 :2007/08/14(火) 01:32:05
<?php
$body="<a href=\"
http://yahoo.co.jp/\ ">hello</a>私のHP";
$body = htmlspecialchars($body);
$pat = "(https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";//検出パターン
$rep = "<a href=\"\\1\">\\1</a>";//置換パターン
$body = ereg_replace($pat, $rep, $body);
echo "<p>$body</p>";
?>
ソースをあげておきます
>>22 すみません・・
何がしたいの 希望する結果を提示しなさいよ
26 :
16 :2007/08/14(火) 01:44:58
>>24 文章にURLが含まれる場合、自動的にリンクにしたいのです。
>>25 そのまさかです
htmlspecialcharsした後の文字列がどうなっているのか考えたほうがいい
28 :
16 :2007/08/14(火) 01:56:09
全角文字に囲まれた半角空白を削除するにはどうしたらいいのでしょ」?
s/\(全角文字\)(半角空白)+\(全角文字\)/\1\2/g
こういう寒いレスする奴ってどこの土舐めながら生きてるんだろうね
君が寒い
何と言う即レス。地面ばかりでなくスレにまで張り付いてるとは。
寒い寒い
あと文字コードもな。
37 :
デフォルトの名無しさん :2007/08/14(火) 14:54:33
日本語が扱えない言語には、 日本語が理解できない人間が集まる。 このスレの事ですよ〜〜〜〜w
痛いやつだな、万年夏休みなんだろうか
∩___∩ 。 | ノ ヽ \<^i、 ● ● | もしもし、警察? |ヽ(⌒)、( _●_) ミ 知的障害者がいるクマー 彡/ ト、_>|∪| 、`\ /ノ / ヽノ /´> ) (_/ / (_/ | /
それだけでは警察は動かんよ
41 :
デフォルトの名無しさん :2007/08/16(木) 00:16:34
しつもん。 RHEL4です。 # cd /etc # cat protocols | grep 12. とすると 12 aaaaa 120 bbbbb 121 ccccc ・・・ てなふうな中身が出てきます。 「12」だけ排除したかったので # cat protocols | grep "12[^ ]" # cat protocols | grep 12[^$s] 等してみましたが想定どおりにいきません うまく12以外を取り出す方法はないでしょうか。 いや、別に/etc/protocolsじゃなくてもいいんですけど
42 :
41 :2007/08/16(木) 00:20:45
しまった、目的が書いてなかった。 「120〜129の行だけ抜き出す」です
protocolsの書式おかしくない? 120〜129の行を抜き出すなら grep "\b12[0-9]\b" /etc/protocols でいいかと
>>41 grep2回かけるに1票。
cat ほげ | grep "^12" |grep -v "^12 "
perl5.8.6です。 複数の空白を1つのアンダーバーに置換したいのですが、どうすればよいでしょうか。 空白分のアンダーバーが表示されてしまいます。 あと、Regexp-Commonなるモジュールを今日知って驚いたのですが ほかに便利だったモジュールがあったら教えてください。 あ・・・・それとRegexpってなんて発音するんでしょうか?excite辞書にはなかったです
レゲーXP
>>46 元がRegular Expressionなのにか?w
>>45 s/\s+/_/g とか。
オライリーの「詳説正規表現 第2版」の p25 の脚注には、
> "regexp" というどう見ても不格好な略称も思いつくだろう。
> 筆者はこれをどう発音するのかわからないが、
> 舌足らずの話し方をする人なら抵抗なく発音できるのかもしれない。
とあり、その筋のひとでも読み方がわかんないと言っているくらいだから、
好きなように読めば良いんじゃないかな。
>>45 perlは知らんが、s/ +/_/g かs/ */_/g 同様のことをすればいいだけだろ。
初歩中の初歩だ。
それから、日本語読みは「れぎゅらーえくすぷれっしょん」だな。
たとえばURLの末尾が html? で終わってるかどうか 正規表現で判定するとして html?$ と \.html?$ ではどちらが高速なのでしょうか? 言語は C++ なのですが…
高速どうこういう以前に html?$ と \.html?$ は意味が違うと思うんだが・・・
>>52 単純に末尾がhtmlまたはhtmで終わってるかの判断でラクをするか
拡張子ということで\.もちゃんと書くか、の違いのつもりです。
\.html?$ の方が速いと予想。 開始文字が . だから、まず文字列中から . を検索するでしょ。 . は h よりも出現個数が少ないと思われる。
>>54 なるほど…参考になりました。
テストしてみます。
56 :
デフォルトの名無しさん :2007/08/20(月) 23:11:24
>>45 難しく考えることはない。そのまま読めばいいんだよ。
regexp ・・・ レジェックスップ (Regular Expression の略です)
ちなみに、
UFO ・・・ ユーフォー (Unidentified Flying Object)
WGA ・・・ ウガ (Windows Genuine Advantage Notifications)
USA ・・・ ウサ (United States of America)
IME ・・・ イメ (Input Method Editor)
Regex/RegExpは許せるがRegexpは許せないよな?
レジイーエクスピーって読んでる。 ユーエスエーだし、アイエムイー。 こういう読み方って個人で色々あって面白いな。
「れぐえくすぷ」って読んでた。
60 :
48 :2007/08/21(火) 01:15:56
同じく「詳説正規表現」には、 "regex" の "g" は "Regina" でなく "regular" の発音で、 "FedEX" と同じようなリズムで読むとある。 カタカナ読みだと「レゲックス」か「レグエックス」あたりが近いかな? 漏れは、 "regex" は「レジェックス」って読むけど、 "regexp" は「レグエックスピー」って読んでるな。
レグェックスプ
ラジェックスp
レグイーエックスピー。 このべた過ぎる読み方が多数派だと思う
64 :
56 :2007/08/21(火) 13:33:47
バカだなおまいら。わざわざ分かりやすくボケてやったら、真に受けやがって。 あのな、regexp (あるいは regex) はな、Regular Expression の略語なんだ。 略語にさ、必ず読み方があるとは思うなよ。 UFO ・・・ ユーフォー は、たまたま語呂がいいからそう読まれているだけで、 大多数は、 WGA ・・・ ダブル・ジー・エー (アルファベットそのまんま) USA ・・・ ユー・エス・エー (同上) IME ・・・ アイ・エム・イー (同上) でいいんだよ。 よって、regexp は「レギュラエクスプレッション」でいいし、「せいきひょうげん」と読んでもいい。
誰も56を相手にしていなかった件
>>64 UFOはそもそもフライングソーサーの間違いだそうだw
それは兎も角、nativeは一文字ずつ発音しているね。
いや一文字ずつ発音する人もそうでない人も両方いるよ 最近は日本の胡散臭い番組でもユーエフオーって言うようになってる
ほぉ、Websterでは一字ずつの発音しか書いてなかった。
原則的には 3文字未満は一字ずつ、 4文字以上は単語として読めるものはその読み方、 とおじいちゃんが言ってた。
>>64 まずは、短縮形と acronym を一緒くたに語って、「よって、〜」と演繹するのをやめるところからはじめてみよう。
<abbr><acronym>論争を髣髴とさせるなw
72 :
45 :2007/08/21(火) 14:27:55
あれ、なんか話がこじれてる・・・?
>>48 >>49 ありがとうございます。そう書いたつもりだったんですが、+のつけ忘れだったのかもしれません。
読み方は
>>63 のレグイーエックスピーが良いかと
自分は心の中でレグエクスプと読んでます
私は「れぎゅえくすぷ」だなぁ。
Falseをフォルスと読むかファルスと読むかの違いみたいなもんだな。 俺はファリスのほうが好きだ
それは違うだろ
レグエキスプに一票
ヌル、ニル、ナルの違いか
>>75 それは、英語の発音を日本語でどう発音するか、という話しだと思うけど、
Regexp の場合はそもそも英語でどう発音するか決まってないのが問題と思われ。
>>78 NULL、nil、NUL
と言う冗談はさておき、falseのalはallのalと同じ発音だから「ファルス」は無理があると思う。
読み方ネタは盛り上がるねえ。 これからもネタがないときは定期的に投下することにしよう。
おう 頼んだ
>>66 フライングソーサーはUFOの一種ですよ。
それが何であるか識別できなければ鳥だってUFOです。
ユーフォーの呼び方を広めたのはピンクレディじゃなかろうかのう(じじいの繰り言)。
>>64 関係ないけどトランプの柄にUSADAMONってのがあってずっとUSAダモンかと思ってたんだよ
そしたらウサダモンだってさ。ローマ字かよってすげえ突っ込みたかったね
flying saucer=空飛ぶ受け皿 unidentified flying object=正体不明の飛行物体
>>83 確認できてしまった段階で、UFOではなくなってしまうわけでして。
HTMLタグのアトリビュートの囲い文字「"」なり「'」を 全部削除する正規表現がわかりません。 PHPのpreg_replace()で使いたいのでperl互換正規表現で 何かしらの情報をいただければ幸いです。 失礼いたします。
そういうのはHTMLパーサ使うべきじゃね
$httdat = preg_replace('/"/', "", $httdat); じゃなくって?
90 :
デフォルトの名無しさん :2007/08/23(木) 00:25:37
$html = str_replace("'", "", $html); $html = str_replace('"', '', $html); とか・・・
タグのなかの"だけ取りたいんじゃないの?
92 :
デフォルトの名無しさん :2007/08/23(木) 19:53:44
じゃ、タグだけ取り出して、 $tag = str_replace('"', '', $tag); とかで " を削除して、元の html にハメ込めばいいやん。 <body> <a href="img/unko.jpg">"うんこ"の画像</a> </body> ↓ 1.<body> を取り出す ⇒ なにもしない。 2.<a href="img/unko.jpg"> を取り出す⇒ " を削って元にハメ込む。 3.</a> を取り出す ⇒ なにもしない。 4.</body> を取り出す ⇒ なにもしない。 ↓ <body> <a href=img/unko.jpg>"うんこ"の画像</a> </body> 正規表現とか、そういう以前の、プログラミングの基礎の問題な気がする。
じゃ、タグをどうやって取り出すんだい?
→
>>88 に戻る
というより、正規表現一発ではできないというのが正解
95 :
デフォルトの名無しさん :2007/08/23(木) 22:31:37
ヒントだけじゃダメなようだね。こんなコードでどうだ? <?php $html = '<body> <a href="img/unko.jpg">"うんこ"の画像</a> </body> '; $result = ''; while (preg_match('/^(.*?)(<.+?>)(.*)$/s', $html, $s)) { $result .= $s[1]; $tag = $s[2]; $html = $s[3]; $tag = str_replace('"', '', $tag); $tag = str_replace("'", "", $tag); $result .= $tag; } echo $result; ?> ツッコミどころはあるかもしれないが、 わかりやすいコーディングを心がけたから、効率は二の次な。 あと、インデントに漢字の空白つかってるから、そのままコピペじゃ動かんよ。 どうもこの掲示板、コードを正しく貼り付けられないからプログラミングの話題には向かないなぁ。
>>95 >>88 でFAなのに、何故そんなコメントやCDATAにも対応してない穴だらけのコードを
撒き散らすのか
馬鹿はこれだから困る
ようは扱いの簡単なHTMLパーサ(リーダー)があればいいのかな。
98 :
デフォルトの名無しさん :2007/08/23(木) 23:42:21
Rubyスレでお勧めHTMLパーサ教えてって聞くとRegexpって答えが返ってきます
>>95 <img alt="hoge's image" ...でアウト
attribute の引用符を外したい、という時点で一体何を考えてるのやら、と思ってしまった俺ガイル。
101 :
デフォルトの名無しさん :2007/08/24(金) 00:33:01
ほらほら、また情報小出しが始まった。
104 :
デフォルトの名無しさん :2007/08/24(金) 21:20:49
全角のタブってどうあらわすんですか?
全角のタブって何だよ
107 :
デフォルトの名無しさん :2007/08/24(金) 22:34:33
>>99 1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
ちょっとは自分で考えろよ。応用力の無いヤツには何を教えても無駄。
もうこれが最後だからな。
<?php
$html = '<body>
<a href="img/unko.jpg" alt="kuso\'s image">"うんこ"の画像</a>
</body>
';
$result = '';
while (preg_match('/^(.*?)(<.+?>)(.*)$/s', $html, $s)) {
$result .= $s[1];
$tag = $s[2];
$html = $s[3];
$tag = preg_replace('/="(.+?)"/', '=$1', $tag);
$tag = preg_replace("/='(.+?)'/", '=$1', $tag);
$result .= $tag;
}
echo $result;
?>
109 :
99 :2007/08/25(土) 07:41:35
>>107 俺は
>>87 じゃないよ
で、<!-- <a alt="hoge's image" ...> --> でアウト
110 :
デフォルトの名無しさん :2007/08/25(土) 11:25:12
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
糞コード張って悦に浸ってる馬鹿を煽ってるだけと気づけ
112 :
デフォルトの名無しさん :2007/08/25(土) 11:57:48
>>109 せんせい、1+1って何ですか?
>>107 ここにリンゴが1個あるだろ。そこにもう1個リンゴをを置いてごらん、2個になっただろ?
これが1+1だ。答えは2になる。
>>109 じゃぁ1+2は?
>>107 同じように考えればいいさ。1個のリンゴがある。その横にあと2個リンゴを置けば・・ほら、3個になっただろ?
これが、1+2だ。答えは3になるんだよ。
>>109 わぁ、すっごいなぁ。
>>107 じゃぁ、問題出すよ。1+3は?答えられるかな???
>>109 せんせい、それはまだ習ってません。答えられませ〜ん。
ダメだこりゃw
糞コードは張ること自体が罪。いい経験になっただろ?
浅はかな回答者の糞コードへのツッコミを、どうしても理解力の足らない
質問者の質問ということにしたいらしいねぇ
>>88 より後は、全部無駄レスじゃん
>>113 自分のこと言われてると気付いてないみたいよ。
117 :
デフォルトの名無しさん :2007/08/26(日) 18:43:44
環境は秀丸です 「前の行末がピリオド&行末がピリオドでない行」 の前後に空行を入れたいのですが、どう書けばいいのか教えてください Hoge hoge. Moge moge. Title Hoge hoge. Moge moge. を下のようにしたいのです。 Hoge hoge. Moge moge. Title Hoge hoge. Moge moge. ([^\n]*)[^\.]\n ⇒ \n\n\1\n\n とか考えてみたけどダメですた
これでどう? ^(.*[^.])$
119 :
デフォルトの名無しさん :2007/08/26(日) 19:21:22
>>117 ↓スマートじゃないけど。
検索文字列:
\.\f\n.*[^.]\n\f
置換文字列:
.\n\1\n
>>120 サンクス
ばっちりでした
>>118 なんか秀丸って行頭行末をまたぐときとかって、$^とかうまく反応して
くれないんですよね
>>120 でいけました 118もありがとう
122 :
118 :2007/08/26(日) 19:51:27
自分のは完全な誤答だったよ(´・ω・`)出直してきます
> ^(.*[^.])$ 顔文字っぽく見える
124 :
デフォルトの名無しさん :2007/08/26(日) 22:09:35
基地害じゃね?
125 :
デフォルトの名無しさん :2007/08/27(月) 12:32:15
JavaScriptでの「?:」の意味を教えてください。解説サイトでも可です。 よろしくお願いします。
126 :
デフォルトの名無しさん :2007/08/27(月) 13:19:04
なんでこう、混乱する訳ばかりなんだろうな。 正規表現というのは、例えば 「円周率は3.13」 という誤りを 「円周率は3.14」 と、正しく書くこと。
正則表現とでも呼んでおけ
129 :
125 :2007/08/27(月) 16:15:47
javascriptかperlなのですが (fire|fighter|future|fusion) と (fi(re|ghter)|fu(ture|sion)) のような場合はどちらが高速でしょうか?
131 :
87 :2007/08/28(火) 18:21:10
87です。
こちらを見に来るのをすっかり忘れてしまっておりました!
大変申し訳ございませんでした。
>>88 様
HTMLパーサを使うほうが良いとのご忠言、ありがとうございます。
その方向も模索させていただきます。
>>89 ,90様
>>91 様のご指摘通り、HTMLタグのアトリビュートの"'のみを外したいと
考えておりました
>>92 ,95様
具体的なサンプルまで作成頂きまことにありがとうございます。
なるべく正規表現のみで実現できないかを模索しておりましたので、
その方法を選択肢から排除しておりました。申し訳ございません。
>>94 様
なるほど、やはり正規表現の1発処理は諦めたほうが良いのですね。
>>97 様
大賛成です。
>>100 様
良いか悪いかは別としまして、モバイルサイトで出力されるHTMLを極力
シェイプアップさせるべく、アトリビュートの囲み文字を一括ではずす
ことがしたかったのです。
>>102 様
失礼しました。確かにおっしゃる通りです。申し訳ございません。
やる気のないやつにはろくな回答が返ってこんわな
>>130 >(fire|fighter|future|fusion)
こんなことするんだったら連想配列つかえよw
質問させてください。 「X=\\\\\\\\ho\\,ge\\\\」を 「X=\\ho,ge」にするにはどうすればよいでしょうか? 具体的には「\\\\」を「\」一文字に、「\\,」の場合はカンマのみにしたいのです。 \\{2,4} なんかを思いついて弄ってみたんですが、さっぱりでして……
単に \\, を , に置換してから、 \\\\ を \ に置換すればいいんでない?
正規表現で000000〜ffffffまでかどうかチェックできる表現教えてちょ
[0-9a-fA-F]{6} でいいかな
>>137 のルールに加えて、左に0はいくらつんでもOKの書式を許す、
純粋にffffffまでの数字かどうかはこれでいけるかな?
(?<![0-9a-f])0*[0-9a-f]{6}(?![0-9a-f])
オライリーの詳説・正規表現に載っていたHTMLのパターンを 否定(訂正)していたのを別のオライリーの本で見かけたんだけど タイトルを忘れてしまいまして どなたかご存じないでしょうか?
142 :
デフォルトの名無しさん :2007/09/02(日) 01:16:22
文字列 Aと文字列 Bを両方含んでいて順序もA→Bになっている文字列にマッチする 正規表現を教えてください。 AiiiiiiiiB にはマッチして欲しい BiiiiiiiiA にはマッチして欲しくない
A.*B で何か問題が?
>>142 AiBiAiB
BiAiBiA
は、マッチするの、しないの?
145 :
デフォルトの名無しさん :2007/09/02(日) 18:40:31
Berryの設定で正規表現を使いたいのですが 「list.php?table=moe&page=1」の最後の値が1〜9999まで マッチするような正規表現を教えていただけませんか? 正規表現むずかしい><
list\.php\?table=moe&page=([1-9][0-9]{0,3})$ 適当
>>146 うわーどうもありがとう。
正規表現って便利そうだけど難しくてなかなか^^;
VBSで正規表現を使ってます。 URLの相対パスを正規表現でマッチさせようとしているのですが 「../」と「./」の区別が付きません。どのようにして区別させたらよいのでしょうか?
どっちも相対パスだと思うが
説明が悪くて申し訳ないです 例えば「../././abc.html」の様なURLがあったとして 「./」のをマッチさせるのに「\./」とすると「../」にもマッチしてしまうので 「./」だけにマッチさせるにはどうしたらいいのかな?と思いまして…
(/|^)\./
ありがとうございます。できました! 時間を取ってそのパターンの意味を調べさせてもらいます
153 :
デフォルトの名無しさん :2007/09/06(木) 17:40:38
顔文字に見えてしょうがねえ
154 :
デフォルトの名無しさん :2007/09/09(日) 00:58:20
正規表現があるという事は偽物表現もあるということに他ならないわけですが どこさありますか。
irregular expression?
文字列が全て0かどうかは ^0+* でよいでしょうか?
^0+$ じゃないのかな
{1}って入れる意味あるのか?
てか正規表現で●って使えないっぽいな… グーグルでも●の検索結果ゼロだしどうしたものやら
そんなバナナ
>>159 前方一致ならそれでもいいはずだが、完全一致なら最後にもう一組 ".*" が必要。
>>161 使えるかどうかは、ライブラリおよび環境設定による。
やっぱり●*ですら反応しないな…レスサンクス ブラウザのほうのスレで聞いて来るわ >159は撤回ってことで
166 :
デフォルトの名無しさん :2007/09/14(金) 19:25:12
.*●.*●.*●.* こうじゃねーの
167 :
デフォルトの名無しさん :2007/09/14(金) 22:07:35
(●.*){3,} とかでいいんじゃないすか(^ω^;)
(.*●.*){3,} ちょっとかわゆい
Perlで、Cのコメント除去プログラム $text = join ('',<>); $text = ~S { (".*?")|(/\*(.|\n)*?\*/)|(//[^\n]*) }{$1}gx; print $text;
phpで文字列の中のすべての4ケタの数字にマッチする 正規表現を試してます。 が、以下のスクリプトを動かしても"1234"がマッチしません。 なにかうまい方法ありませんでしょう。 //期待する結果 0000 1234 8888 9999 $str = "aaa 0000 1234 12345 1111 hoge 4545456465 9999"; $c = preg_match_all("/^[0-9]{4,}|\s[0-9]{3,4}\s|[0-9]{4,}$/",$str,$m); echo $c."個マッチ<br>\r"; foreach ($m[0] as $k => $t){ echo "<br>\$m[0][$k] => $t\r"; $i++; }
/(?<=\s)([0-9]{4})([^0-9a-z]?)/ なんとなーくという感じになってきたんですが…、もう少し何かorz
解決しました ! /\b[0-9]{4}\b/ //4ケタの数字にマッチ でいけますた、スレ汚しスマソ。
JaneViewのNGExで悩んでいるのですが A A B A B A 東京 埼玉 東京 埼玉 東京 埼玉 埼玉 千葉 埼玉 のように ((仙台|東京|名古屋).*大阪.*\2)|((仙台|東京|大阪).*名古屋.*\4)
すみません書きかけで送信してしまいました。 JaneViewのNGExで悩んでいるのですが A,B,C,D…といったリストがあったとして、 A A C D D B のように間に入らなければ検出されずに A B A B C B C A B C のようにリストの要素"AとA"や"BとB"の間に、別の要素が入っている場合を検出したいので ((A|B|C).*D.*\2)|((A|B|D).*C.*\4) といった感じでやっています。 リストの要素が少なければ | でつないでいけばいいのですが、リストが多いととんでもない状態になりますよね。 どうすればこれをもっとスマートな表記にできるでしょうか?
(A|B|C|D)\s+((?!\1).)+\s+\1 とか?俺のJaneではヒットした。・・・一体何に使うのか気になる。
ありがとうございます。 (?!\1)でできました。 アニメサロンの延長情報確定スレに貼られている表で 邪魔な表を貼り付けられるのをあぼーんしたかったんだ。
178 :
デフォルトの名無しさん :2007/09/28(金) 11:42:54
正規表現で比較関数のようなことはできますか?
もっと具体的に
180 :
デフォルトの名無しさん :2007/10/03(水) 18:17:05
具体的に書いたらオマエが答えられるのかよ
答えられるか答えられないか具体的に判断できる
182 :
デフォルトの名無しさん :2007/10/03(水) 19:52:07
メーリングリスト等にもよくあるよね 内容が分かる程度に端折って書くと 「質問の仕方をしらない」等の苦情 具体的且つ詳細に書くと答えられないくせにw
こういう珍獣ってリアルにはいないんだよなぁ。
>>178 =180=182
五日経っても回答得られなかった現実をきちんと見据えて、
いい加減諦めて「もっと具体的に」書いた方が良いのでは?
ん・・・全く意味が分からんからね。
こういう質問には「できません」と答えるのが大人のマナー。
もっと愚怠的に
189 :
デフォルトの名無しさん :2007/10/04(木) 08:37:31
hage
190 :
デフォルトの名無しさん :2007/10/05(金) 00:59:38
528 名前:名無し募集中。。。[] 投稿日:2007/10/05(金) 00:23:13.84 0 PHPの正規表現に詳しいやつがいたら教えてほしい preg_replaceで置換をしたいんだが たとえば /sample/test/14567.jpg というのを /sample/test/backup/14567.jpg というように最後の/を/backup/に置き換えるにはどうしたらいい? いろいろ試してみたが俺のレベルじゃどうにもならんかった
preg_replace('/¥/([^¥/]+)$/', "/backup/$1", "/sample/test/14567.jpg");
192 :
デフォルトの名無しさん :2007/10/05(金) 16:25:45
知ったかぶり
194 :
デフォルトの名無しさん :2007/10/06(土) 10:35:59
余計なお世話
珍獣増えすぎwwwwwwwwwテラカオスwwwwwwww
[あはばば, ばばばば], あばばばば, あば, [あばばば, ば, ばばばばはば, ばば] というような文字列があったとき、 [あはばば, ばばばば] あばばばば あば [あばばば, ば, ばばばばはば, ばば] と分割したいのですが、どのようにしたらいいでしょうか? (\\[?.*\\]?),とかやってみたのですが全然だめでした orz なかのあばば〜は変化します。
>>197 すいません、.NETのSystem.Text.RegularExpressionsのRegex.Split()で置換しています。
>>198 すいません、置換じゃなくて分割でした orz
>>196 まず、[あば,ばばば] を うんこっこー に痴漢する
(うんこっこー に痴漢した文字列は堆肥しておく)
うんこっこー, あばばばば, あば, うんこっこー
となるので、これを分割する。そのあと、
うんこっこー を堆肥しておいた文字列に戻す。
逆に、 "," をうんこっこーに置換しても良いかもね。 Perl ですまんけどこんな感じで。 $str =~ s/(\[[^]]+\]|[^,]+)(?:(,\s*)|$)/\1うんこっこー/g; $ary = split(/うんこっこー/, $str);
Perl 5.8.8を使っています。 文字列の先頭からある文字列(たとえばXYZ)の直前までを削除する、 ただしその文字列XYZがこない場合はすべてを削除する正規表現は どう記述したらよいでしょうか。 たとえば (1) abcXYdefXYZ123 なら abcXYdef のみを削除する (2) abcXYdef なら abcXYdef すべてを削除する ということです。 s/^.*(XYZ)?/$1/; とすると(1),(2)ともすべてが削除されてしまい、 s/^.*?(XYZ)?/$1/; とすると(1),(2)とも1文字も削除されません。 s/^.*?XYZ// || s/^.*//; とすれば(1),(2)ともうまくいきますが、 できれば1個の正規表現で実現させたいです。
203 :
デフォルトの名無しさん :2007/10/07(日) 13:02:54
s/^abcXYdef//;
ちゃんと動くんなら、自分の能力で到達可能な範囲のプログラムで十分だと思うよw s/^((?!XYZ).)*//
205 :
デフォルトの名無しさん :2007/10/07(日) 13:27:33
s/(^.*?XYZ|^.*)//;
206 :
デフォルトの名無しさん :2007/10/07(日) 13:30:59
s/^.*?XYZ|^.*//;
207 :
デフォルトの名無しさん :2007/10/07(日) 13:32:25
> s/^.*?XYZ// || s/^.*//; > とすれば(1),(2)ともうまくいきますが、 ウソつけ!
208 :
202 :2007/10/07(日) 15:49:43
短時間にたくさんのレスが!ありがとうございます。
>>204 (?!pattern) が使えるんじゃないかと思って
質問前にPerlのマニュアルを読んだんですがうまくいきませんでした。
なるほど、こうすればうまくいくんですね。
>>207 s/^.*?XYZ/XYZ/ || s/^.*//; の間違いでした。失礼しました。
>>205-206 ということで、元の質問が間違ってたので間違いです。
試行錯誤の末、 s/^(.*(?=XYZ)|.*)//; という別解を見つけました。
209 :
デフォルトの名無しさん :2007/10/07(日) 20:10:50
PHP5のpreg_matchで、 涼子、愛、美姫以外の文字列が来た場合を検知したいんですが。 涼子、愛、美姫のどれかを検知する場合、 pattern = '/涼子|愛|美姫/'; ですが、涼子、愛、美姫以外を検知するにはどう書いたらいいですか?
そのパターンにマッチしないことを確認すればよい。
211 :
209 :2007/10/07(日) 20:21:07
>>210 すみません。
涼子、愛、美姫以外を含む文字列です。
たとえば、涼子愛子美紀が来たばあい、
「子」が紛れ込んでることを検知したいのですが。
212 :
209 :2007/10/07(日) 20:36:57
213 :
209 :2007/10/07(日) 20:38:53
>>212 すみません。途中でした。
'/^涼子|^愛|^美姫/';
だと涼子、愛、美紀も全部ひっかかってしまいます。
それだけを含んで、それ以外の文字列を全然含まないようにしたいのですが。
214 :
デフォルトの名無しさん :2007/10/07(日) 20:55:01
同じくphp5のpreg_matchですが、 半角または全角の数字から始まるはどう書きますか?
>>213 /^(?:涼子|愛|美姫)*$/ とか?
>>214 /^(?:\d|1|2|3|4|5|6|7|8|9|0)/ とか?
217 :
デフォルトの名無しさん :2007/10/08(月) 00:15:19
$string = '涼子愛子美紀'; $result = preg_replace( '/涼子|愛|美姫/', '', $string); echo 'おまんこ';
218 :
デフォルトの名無しさん :2007/10/08(月) 13:51:27
NFAを機械的にDFAに変換する方法を教えてください。
220 :
デフォルトの名無しさん :2007/10/08(月) 20:14:07
そんなもん無い! って答えでFA?
Aho-Corasick改とかでいいと思うが。
222 :
デフォルトの名無しさん :2007/10/25(木) 17:50:49
>>222 「新しいドメイン」ってのはどんなところまでを想定してる?
簡易なのでよければ \..+ じゃなくて \.[^/.]+ にするとか
225 :
デフォルトの名無しさん :2007/10/25(木) 19:51:52
226 :
デフォルトの名無しさん :2007/10/27(土) 16:43:32
/\/\/\/\/\//\/\/\/\/\/\/\FUCKINTOSH?_*+*}+}`+`%$W`}!LT`LA<VR`AKVAREGERGA"#%IW$%U&'I<{)'(<O'T(*O> 最近、こうして何の作意もなく打ったものが正則表現に見えてどうしようもない
227 :
デフォルトの名無しさん :2007/11/08(木) 00:14:41
最初と最後は"/"であり、 その間に"/../"や"/./"が発生しない文字列を 正規表現では記述できますか? [×] /etc/../usr/./local/ /../ /./ [○] /etc/sysconfig/ /abc/.aaaa/
>>227 正規表現で一気に行うんじゃなくて、
"/" で分割して、各パーツがドットだけで構成されていたらハネる、とか
(ディレクトリトラバーサル対策ならよく調べたほうがいいかも)
ありがとうございます。 xmlのxsd:patternで書きたかったのですが、だめそうです。考え直してみます。
>>227 これでどうかな。
^/(([^/.][^/]*|\.[^/.][^/]*|\.\.[^/]+)/)*$
汚染チェックに使うなら
>>228 の言うようにした方がいいな。
231 :
デフォルトの名無しさん :2007/11/11(日) 17:33:05
webでの絵文字表示に苦戦しているのですが、 BAD+[SJISコード]を正規表現で表すにはどう書いたらいいですか?
232 :
デフォルトの名無しさん :2007/11/11(日) 17:34:32
書き忘れていました。言語はPHPで、バージョンは4.4.1です。
233 :
デフォルトの名無しさん :2007/11/11(日) 23:06:58
ぐ・ぐ・れ
うん、ググれば全て解決するからこのスレ潰すべきだね。
aho
236 :
デフォルトの名無しさん :2007/11/12(月) 00:15:22
ワロタwwwwwww
237 :
デフォルトの名無しさん :2007/11/12(月) 01:18:32
いや、ググって該当するページを見たんですけど、正規表現の構成の仕方がわからなくて、 ここに書き込みました。 調べるだけ調べたんですけど、やはりだめでしょうか
だめです
なんだこいつら 本当はできないんじゃねーの?
>>239 お、やっと気づいたようだね。それじゃあバイバーイ!
241 :
デフォルトの名無しさん :2007/11/12(月) 19:50:58
質問です。正規表現でconsumeするというのは日本語でいうとどういうことですか?
文字を消費するということ。
243 :
241 :2007/11/12(月) 21:10:47
>>242 ありがとうございます。「文字を消費する」とはどういうことでしょうか?
イメージが湧きません。
正規表現 /..c/ を "abc" にマッチさせたときを考えると、 最初の /./ は "a" にマッチして消費する。 すると、なんと言うかテキストエディタのカーソルが一つ進むのをイメージしてくれたらよいか、 二個目の /./ が "b" にマッチできるようになる。
245 :
デフォルトの名無しさん :2007/11/12(月) 22:30:07
テキストエディタの ed ってのが元になってるからね。 カーソルって例えはナイス!
246 :
241 :2007/11/12(月) 23:16:33
>>244 なるほど、よくわかりました。ありがとうございます。
247 :
デフォルトの名無しさん :2007/11/15(木) 07:57:08
おはようございます。このスレの過去ログってネットにありますか?
あります。
249 :
デフォルトの名無しさん :2007/11/15(木) 20:14:33
アキュムレータの0ビット目って左端?それとも右端?
perl互換のFlexible Renamerで置換したいのですが。 (hoge)hoge(hoge).txtを(hoge) hoge(hoge).txtとしたい場合はどう書けばいいのでしょうか。 )の直後にスペースを入れ、拡張子前の)の直後には入れたくないんです。
")" -> ") " " ." -> "."
>>253 なるほど。2回やるという手が・・・。ありがとうございました。
リネーマの仕様によるけど、Perl互換なら "^(\([^)]*\))" -> "$1 " "^(\([^)]*\))(.*)" -> "$1 $2" とか。いずれにしても調整が必要
vb.netで 「// xxxxx EXEC 〜」で始まり、 「// xxxxx EXEC 〜」で始まる1行前までを 1グループで取得したいと考えています (?ims:(^\/\/+\s+EXEC+.+)) だとまるまる取得してしまうのはわかるのですが、 これを上記の様に取得するにはどう書けばよいのでしょうか? ご教授よろしくお願いいたします。
257 :
デフォルトの名無しさん :2007/11/18(日) 20:18:03
split
>>256 なんでスラッシュをエスケープしてんだよw
.NET の正規表現なら可変長の戻り読みが使えたと思うから、
その始まりのしるしと終端のしるしを戻り読みの部分と先読みの部分に置けば?
.NETで可変長の戻り読みができなかったらすまんw
259 :
デフォルトの名無しさん :2007/11/22(木) 22:35:09
数値比較をしたいのですが、0x021a4 っていくつなのでしょうか?
2 * 16^3 + 1 * 16^2 + 10 * 16^1 + 4 * 16^0
>>259 電卓開く
↓
関数電卓モードにする
↓
16進モードにする
↓
21a4と打つ
↓
10進モードにする
正規表現の話じゃねーし
264 :
デフォルトの名無しさん :2007/11/23(金) 02:44:38
16進数知らないプログラマがいるのか・・・時代は変わったな。
プログラマじゃないから
具体的には秀丸エディタで置換を行いたいのですが、こうするには… -------------- [12:34:56] 発言者1: 文章2 文章3 [12:34:56] 発言者2: 文章4 ↓ [12:34:56] 発言者1: 文章2 文章3 [12:34:56] 発言者2: 文章4 -------------- どうしたら良いのでしょうか?(文章の中に [ ] が含まれる可能性は無いものとして単純に) \n[ と記述すると、正規表現の括弧の対応が合ってないとか怒られてしまいます。 非常に初心者な質問ですいません。
エスケープ
regexre FrameworkFrame などといったような「同じ文字列とそれに挟まれた別な文字列」を取り出したいのですが、 どういう文を書いたら実現できますか? PHPのpreg_replaceで使用します。 よろしくお願いします。
re(.*)re でいけると思うけど。 以下はJScriptだけどこれくらいなら読み取れるよね? var keyword = "re"; var pattern = keyword + "(.*)" + keyword; var objReg = new RegExp(pattern); "regexre".match(pattern); WScript.StdOut.WriteLine(RegExp.$1); "rere".match(pattern); WScript.StdOut.WriteLine(RegExp.$1); "regexregex".match(pattern); WScript.StdOut.WriteLine(RegExp.$1);
Ruby なら (.+)(.+)\1 で $2 を取ればいけるけど、 PHP でいけるかどうかは知らん
eregexreならrが取れるはずだからつかいものになるのか?
eregexre なら regexr が取れる。 最長一致だから。 これが目的の物かはともかくとして。
>>269 すみません、説明不足でした。
同じ文字列というのも未知なのです。
>>270 .
ありがとうございます。
Rubyならいける、というのは期待が持てました。
早速調べてみます。
>>272-273 ここも説明不足でした。
「同じ文字列とそれに挟まれた別な文字列」の全てを取得したいです。
つまりThisIsThePenという文字列からThisIsTh(とePe)を取得できるようにしたいのです。
sIs は要らないの?
sIs が必要ないならとりあえず Ruby ではこうなる。 PHP でいk(ry 'ThisIsThePen'.scan(/((.+).+\2)/) { puts($1) }
277 :
デフォルトの名無しさん :2007/11/23(金) 19:31:22
文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出すことができますが、 文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。
日本語でおk
279 :
デフォルトの名無しさん :2007/11/23(金) 19:46:56
\{([^\}]+)\}
280 :
デフォルトの名無しさん :2007/11/24(土) 08:40:39
ありがとう。 すごいね 正規表現分かる人尊敬するわ
別に大した事じゃない。 すげーとか思って思考停止してるから理解できないだけ。
282 :
デフォルトの名無しさん :2007/11/24(土) 09:48:41
分かりました。 私も頑張って勉強します
よし! その意気だ!
284 :
デフォルトの名無しさん :2007/11/24(土) 11:18:23
ホモビデオからお前ら。
285 :
デフォルトの名無しさん :2007/11/25(日) 17:53:21
なんでホモなの? 私は女性です
性同一性障害か
287 :
デフォルトの名無しさん :2007/11/25(日) 20:30:25
性器表現
モザイクのことか
>>285 ホモセクシュアルは同性愛って意味だよ
当然、女性同士でも使う
ここにいる奴らは全員例外なくホモ サピエンス
ホモ牛乳という名前にはかなりインパクトがあると思うんだ
「ホモゲナイズド牛乳」じゃ長すぎるべ。
ホモジニアス・マルチコアを略してホモコア呼べ
294 :
デフォルトの名無しさん :2007/11/27(火) 08:45:29
みんな頭おかしいのですね。 残念です
295 :
デフォルトの名無しさん :2007/11/27(火) 11:39:19
HTMLに含まれる CSSの class="***" や id="**" , aタグの target="***" を削除したいんですが、観よう見真似でやったのですが マッチしてくれません。どなたか.. (id|class|target|title|style|name)=[\+\$\;\?\.\W\w%,!#~*/:@&=_-]+? PC用に吐き出されたデータを、携帯用に変換したくて..
296 :
デフォルトの名無しさん :2007/11/27(火) 11:56:07
target="[^"]*"
297 :
デフォルトの名無しさん :2007/11/29(木) 17:43:52
HTMLのコメントを取得するにはどうしたら良いでしょうか? <!--[^-->]*--> で試したのですが[^-->]だと各文字を含まないとなってしまうのでだめでした。 文字列を含まないって表現方法がわかりません。 お手数ですがよろしくお願いします。
299 :
デフォルトの名無しさん :2007/11/29(木) 18:35:11
300 :
297 :2007/11/29(木) 19:51:50
>>298 ありがとうございます。
貪欲でないマッチでググッた所無事解決しました。
>>299 プログラム内で使いたかったので、
パーサを使うとhtml記述ミスなどがあった場合に面倒なので正規表現を使う事にしました。
bregexp.dllを使って <th>ほげほげ<br/>ほげほげ</th> のような<th>で囲まれた内部の<br/>だけ削除したいのですが、 <br/>の数が不定で困ってます。どう書けばよいのでしょう?
303 :
デフォルトの名無しさん :2007/12/02(日) 17:04:43
304 :
デフォルトの名無しさん :2007/12/03(月) 18:49:06
正規表現でand検索したいのですが どのようにすればいいのですか? 正規表現: Win.*Mac.*Linux.*Sun 上記のようにやると、順番が固定されてしまいます。 どのような順番でもいいので4つ入っていれば ヒットさせたいのです。
(?=.*Win)(?=.*Mac)(?=.*Linux)(?=.*Sun).*
NHKのFMの番組の曲の時間表示(全角の数字と '分'と'秒'から成る文字列で 末尾は必ず '秒' )を一気に半角数字と「分⇒m」「秒⇒s」のように一気に置換 する方法がありますか? 全角数字でも '2007年' のような文字列はそのま まにしたいのです。 【例】 '6分08秒' ⇒ 6m08s
308 :
デフォルトの名無しさん :2007/12/04(火) 00:20:03
tr/時分秒/hms/
>全角数字でも '2007年' のような文字列はそのままにしたい のなら >【例】 >'6分08秒' ⇒ 6m08s は '6分08秒' ⇒ 6m08s ならないといけないの? それとも【例】のようにして欲しいの?
正規表現処理系一般の話なら文字変換はダメだなあ
tr/時分秒[0-9]/hms[0-9]/
trはスレ違いだろ
315 :
デフォルトの名無しさん :2007/12/05(水) 19:45:45
URL が多数含まれる文章があるとき、その URL にマッチさせる正規表現を知りたいです。
マッチさせるのは “
http:// 〜/” の部分で充分でして、それだけなら
http:\/\/[^\/]+\/ でイケそうです。
ただ今回やりたいのは、特定のドメイン(というかサーバ)の URL はマッチさせない、ということです。
たとえば
http://www.google.co.jp/ にはマッチさせたくない、ということです。
これはどんな書き方になるでしょうか?
Perl な正規表現だと具合いいです。
>315 >2
フリーでとにかく早いのってどれ? 秀丸のやつ?鬼車?
秀丸は速くない。
>>317 秀丸のは確かに速い
速いけど、他で出来て秀丸で出来ない表現が多いし
それを無理やり秀丸で表現すると結局遅くなることも多い
[0-1]?[0-9] これで2桁目に0か1が付くか付かないか という表現になりますか?
日本語でおk それだと、0〜9 と 00〜19 にマッチ
すみませんここで聞いて良い事なのか解らないのですが、よければお教えください。 C/Migemo 1.2 リリース版 for Windowsに付属の辞書を読み込ませhoをmigemo_queryしてみたことろ ([ホ☆★ほ逋捕縫豊B萠萌]|ho|Ho)と、なぜかBが含まれた文字列がかえってきました。 この文字列を利用して検索をすると当たり前ながらBに反応してしまうのです。 そこで質問なのですが、どうしてBが含まれるのでしょうか? もしかして私の使い方が間違っているのでしょうか?
323 :
320 :2007/12/09(日) 00:14:35
>>321 すいません、それが言いたかった
ありがとう
>>323 「すみません」だろ
日本から出て行けよ
こらこら
>>322 完全にスレ違いな気がするが、どこが適切か知らないので一応答えておくと、
ホウ素の元素記号がBだから。他にはsaで酸素のOが引っかかったりするはず。
>>326 おおおおおおお!
なるほど…
おかげで謎が解けました
ありがとうございました。
ひゃ[あぁ゛]*うまひ[いぃ゛]*
ひゃうまひ゛
ひゃ゛゛゛゛゛うまひ゛゛゛゛゛゛゛
/image/[00-31]_[00-1f].jpg ↑00〜31↑00〜1f(16進数) 正規表現でこのように設定したいのですがうまくいきません。 /image/(00_00、01_01・・・10_0a・・・31_1f) こういったものを書きたいのですが可能でしょうか?
>>331 [] は一文字にしかマッチしないのでー。
正規表現はふつうは数値の範囲は指定できないのでー。
([0-2][0-9a-f]|30|31)_[01][0-9a-f]\.jpg
>>331 もしかして、 10進部分と 16進部分を対応させたいと思ってる?
それだと正規表現だけでは簡単に書けないと思う。
334 :
デフォルトの名無しさん :2008/01/05(土) 11:31:41
日本語の話しになってしまいますが、質問させてください。 >検索対象に正規表現が一致した場合 と >検索対象が正規表現に一致した場合 どっちが正しいのでしょう? 前者が正しいような気がするのですが、よく判らなくなってきました
一致というよりマッチといいましょう。
そういえばどっちも言うような気がする。 文脈によるというかどっちを軸に語るかによるんじゃないかな。
厳密に言うと受理だろうが、気にしすぎだとも思う
338 :
デフォルトの名無しさん :2008/01/05(土) 21:41:39
プログラムの 「前」 ってどっちですか?
つまらんコピペだな
340 :
デフォルトの名無しさん :2008/01/05(土) 21:45:36
じゃね? => ぢゃね?
341 :
デフォルトの名無しさん :2008/01/06(日) 14:50:28
だからなんだよ。
〠
344 :
334 :2008/01/06(日) 15:59:55
レス有難うございます。やっぱり気にし過ぎですかね。 気にしない事にします。
if (ch == '/') st = 1; else if (ch == '*') st = 4; // 追加 図のほうに S4->S4 [label="*"]; だね
>検索対象(の文字列)が正規表現(で表されたパターン)にマッチした場合 パターンは固定だから、俺はこっちがしっくりくる
347 :
デフォルトの名無しさん :2008/01/10(木) 03:38:22
"one two three four" "one three two four" にしたいのです。正規表現でスワップ(位置交換)したいんですが ググってもあんまりなかったです。 一応、java.util.regex.*; 使ってます。
"one two three four five" "one four three two five" 1 2 3 4 5 1 4 3 2 5 でした。
Pattern pattern = Pattern.compile("^(.*?)\\s+(.*?)\\s+(.*?)\\s+(.*?)\\s+(.*?)$"); Matcher matcher = pattern.matcher("one two three four five"); String str = matcher.replaceFirst("$1 $4 $3 $2 $5"); とりあえず
>>349 おお、ありがとうございます。
java.util.regex.Pattern; のAPI見ても \1 は載っていても、$1 は載ってなかったんですができるんですね。
ところでAPI(java, perl, ruby, js)見ても良く分かり辛いのですが、\n, $n のnはいくつまで参照できるんでしょうか。
nは10進表記みたいですけど、
\0
- 1から9までは dec
\1 ... \9
- dec
\10, \11 ... \21
- oct
\010, \011 ... \025
\0nnn とすれば自動で8進表記
\nnnn とすれば自動で10進表記
参照は \1 <=> $1
API(java)ではこういう感じみたいなんですけど実際はどうなんでしょうか。
351 :
デフォルトの名無しさん :2008/01/10(木) 21:27:54
"\1" じゃなく、"\\1" じゃないのかな。 java コンパイル ⇒ 正規表現コンパイル つまり2回コンパイルされる事に注意。 ここらへんの理屈がわかってないとツライよ。
352 :
349 :2008/01/11(金) 00:55:38
>>350 とりあえず最大数は気にしなくていい、[\$]1000とかでもいけるように見える
Petternクラスでは0始まりは8進数になるけど、Matcherクラスでは10進のまま
PetternのescapeとMatcherのappendReplacementあたりのソースを見るといい
うまくまとめられてないけど、2ch止まるらしいので今のうちに書いとく
APIソース見てるんですか! そこまで頑張らなくてもどこかにあるJavaのフォーラムで質問した方がいいんじゃないですか?
質問者よりも回答者の方が問題解決に躍起になってるスレ。
sedを使ってC言語のコメントを全て削除するにはどうやればいいんですか? コメントが1行に収まっているなら簡単なんだけど、複数行にまたがる場合にどうすればいいかわからない
>>355 パターンスペースとホールドスペースを駆使すればできなくはないが、お勧めできない。
awkかperl、或いは最近のスクリプト言語を使う方がいい。
俺には無理ぽ --------------------------------------- # decom.sed /\/\*/ { :loop /\*\// { b break } N b loop :break s/\n/ /g s/\/\*.*\*\///g } ---------------------------------------
でも>358だと文字列中の/*にも反応しちゃうんだよね。 本格的に使うのは、ちょっと無理。
プリプロセッサ指令をプリプロセスで消されないよう加工 ↓ プリプロセッサにかける ↓ 加工したプリプロセッサ指令を元に戻す
361 :
デフォルトの名無しさん :2008/01/14(月) 12:03:15
正規表現のエスケープしなくてもいい記号がわからないので、 とにかく記号という記号はエスケープしていて結構カオスになっているのですが、 エスケープしなくてもいい記号一覧とかどっかにありませんか? !"#$%&'()-=^~\|@`[{;+:*]},<.>/?_ これが \!\"\#\$\%\&\'\(\)\-\=\^\~\\\|\@\`\[\{\;\+\:\*\]\}\,\<\.\>\/\?\_ こんな感じに・・・
半角スペースって普通に半角スペースをいれるか\x20とかくかどっちがいいんですか?
普通に半角スペースを
>>363 レスありがとう。
普通に半角スペース使うことにしますね。
365 :
361 :2008/01/14(月) 15:43:29
完全かどうかはわかりませんがWikipediaにのってました。 というわけで自己解決しました。
>362 \s
>>366 つーか、それホワイトスペース一般じゃないか?
ホワイトベースに見えた
セイラさんにハァハァしすぎw
371 :
デフォルトの名無しさん :2008/01/14(月) 20:00:29
\s は改行にもマッチすることがあるから 半角スペースの代わりにはならないよ
372 :
デフォルトの名無しさん :2008/01/14(月) 22:22:22
特定の英単語が含まれているかをチェックする正規表現を教えてください。 This is a pen. に対してhisをチェックした場合に引っかからないのが正しいです。 英単語の定義は[A-Za-z]{3,}とする予定で、単語の間はカンマやハイフン、セミコロンなどもあり。 前後が[^A-Za-z]だけだと行頭行末がダメ。。。
非語境界ってやつだな。
375 :
372 :2008/01/14(月) 22:28:22
>>373 ありがとう。知らんかった。首吊ってくるわ。。。
イ`
\sはタブにもマッチするな
まあ既に
>>368 が言ってるけど
378 :
デフォルトの名無しさん :2008/01/17(木) 16:41:25
こんにちは。質問です。 @book{sagan:1954, author = {Fran\c{c}ois Sagan}, title = {Bonjour Tristesse} } こんな感じの文字列(BibTeX)を取り込んでハッシュにするためには どのような正規表現を用いればよいでしょうか。 ポイントは 1. コンマで分割する。 2. {}の中のコンマは無視する。 というあたりだと思うのですが、特に括弧の入れ子をどう処理するかで困っています。 使用言語はRubyです。よろしくお願いします。
正規表現は再帰をあつかえない。即ち括弧の対応を確かめることが出来ない。 上限をハードコードするなら可能ではあるが、普通にパーサを書いたほうがいいと思う。
新しいPerlへようこそ
>>380 新しい Perl でも、正規表現 *だけ* では無理じゃね?
ソースコードやXMLはネスト構造を持つから正規表現は向かないよな。 Javaとかもソースコードパーサー用の汎用クラスがあるけど、何故か使われなかったり。 BNF法の知識がデベロッパレベルで浸透してないから、無理も無いけど。
仕用言語はPHP5.2.4です。UTF-8での運用をしております。
テキストの中のURLをリンクしたいのですが、
$pat = "(https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep = "<a href=\"\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat, $rep ,$body);
これだと、2ちゃんねるみたく、
ttp:から始まったURLの場合リンクできません 。
無駄だと思いつつも書き方がわからないので、下記の処理を付け加えましたが、
<a href="hoge">hoge</a>
↑この部分が何故か文字化けしてしまいます。
$pat2 = "[^h](ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep2 = "<a href=\"h\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);
スマートに書く方法を教えてください。
384 :
デフォルトの名無しさん :2008/01/24(木) 10:34:25
すまない ageさして下さい
385 :
デフォルトの名無しさん :2008/01/24(木) 10:51:13
>>383 [^h] じゃなくて h? じゃない?
>>385 dです
ご指摘のように
$pat2 = "h?(ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep2 = "<a href=\"h\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);
こうすることで動きました
ありがとうございました
h?っていらなくない?
http: ってちゃんと書いたときに h が増殖しちゃわない?
389 :
388 :2008/01/24(木) 14:51:28
全体を括弧でくくってそれをテキストに指定、 内側のh?(~~をリンクに指定すればいいと思う。
391 :
デフォルトの名無しさん :2008/01/24(木) 21:49:52
$test = '<a href="
http://localhost/ ">LINK29</a>';
$test = preg_replace('{<[Aa] .+?>LINK([1-9][\\d\\-]*)</[Aa]>}' ,page_href('$1') ,$text);
上記の正規表現で得た29という数字をpage_hrefという関数に渡したいです。
29という数字は取れているみたいですが、関数内には29という数字が渡ってきておりません。
preg_replace内でどうすれば関数に数字を渡せますか?
ちなみにPHP5系です。
392 :
デフォルトの名無しさん :2008/01/24(木) 21:52:25
preg_replace内の$textは$testです すみませんでした
394 :
デフォルトの名無しさん :2008/01/24(木) 23:58:17
>>393 $pat2 = "(h?(ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+))";
$rep2 = "<a href=\"h\\2\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);
↑こういうことじゃね?
>>391 そのくらいの正規表現ならPHP使いなら大抵知ってるからPHPスレでいいと思うよ
で、関数に引数を渡すにはその引数を評価してからじゃないと渡せない
というわけでまずは preg_replace() の引数である page_href('$1') を評価する
でもこの時点で preg_replace() は評価されてないので $1 は未定義
preg_match() を使って二つに分けて書くのが普通だろうけど
どうしても preg_replace() ひとつで済ませたい場合は e 修飾子を使ってこう書く
$test = '<a href="
http://localhost/ ">LINK29</a>';
print preg_replace('{<[Aa] .+?>LINK([1-9][\\d\\-]*)</[Aa]>}e', 'page_href($1)', $test);
ただこういう謎コード書いて冷たい目で見られても知らない
396 :
デフォルトの名無しさん :2008/01/27(日) 10:16:29
BREGEXPのC言語のラッパーライブラリがあったら教えてください。 BREGEXPでなくても他に使いやすいライブラリがあれば教えてください。
C 言語なら PCRE とか鬼車で良いのではないかと。
>>396 元々Cだしなぁ。ラッパーに何を期待してる?
それはそれとして、素のBREGEXPは古いのでやめておいた方がいい。
いくつかバグも見つかっているようだし。せめてbregonigにすべきかと。
RE *re = ReCompile("/(\d+)/"); if(ReMatch(re, s)) { printf("%s", re->d1); } ReFree(re); これくらい簡単なのは確かに欲しい。
みんながCのアプリをC++でコンパイル通してくれればfreeもなしで if (/([0-9]+)/ == str) ... こうできるけどね。 クラス定義とかしなくていいからさぁ、 C++のランタイムにしてくればモジュール提供する側がラクなんだよなぁ
世の中の全てプログラム言語はC++でいいと?
C99
a b c aa bb cc aaa bbb ccc これのインデントあわせって正規表現だけでできますか?perlです。
404 :
デフォルトの名無しさん :2008/01/29(火) 14:41:11
406 :
405 :2008/01/29(火) 15:42:18
>>404 の例は「美人」だと思われるが、それでいいのか?
あとhogehogeやめれexampleにしろ
>>404 です
実はプログラミングを知らないので、実行環境はテキストです…
秀丸でできればおkです…
>>403 正規表現では無理だろう。
幅固定なら awk が楽だが、
最長のに合わせるんだったら perl で普通に
ガシガシ書いてきゃいいんじゃね?
>>410 THANKS
なんか、できそうですが、PERL事態初心者で構文自体は理解できませんorz
echoが含まれない行の検索って、java正規表現でできますか? ^.(?<!echo)*$ ではできませんでした。
>>412 すいません。できました。
下の2つともできたのですが、「.」のおく位置で何か違いはあるのでしょうか?
^(.(?!echo))*$
^((?!echo).)*$
それ上手く動かないだろ
ふつうは^(?!.*echo)
これでだめなら ^(?!.*echo).*でもいい
>>413 1つ目はダメ。たとえば次のような行:
echo
このeを.で評価したとき、継続の文字はcho。
echoという文字が続いているわけじゃないから、マッチは成功してしまう。
2つ目はうまくいくだろう。
416 :
デフォルトの名無しさん :2008/02/01(金) 00:31:08
質問です、PHPにおいてファイルパスの正規化をしています。 // テスト文字列、"/test/oame/doe/0"にしたい。 $location = "/test/./oame//doe/abc/../0/"; // 置き換え部分 $location = ereg_replace("//+","/",$location); /* "//" -> "/" */ $location = ereg_replace("/\./","/",$location); /* "/./" -> "/" */ $location = ereg_replace("/.+?/\.\./","/",$location); /* "/___/../" -> "/" */ $location = ereg_replace("/$","",$location); /* 末尾の"/"を削除 */ ereg_replace3番目の、/../の処理がうまくできていません、 $locationが空になります。これはどのように記述したらいいのでしょうか?
417 :
デフォルトの名無しさん :2008/02/01(金) 00:51:28
$location="/test/./oame//doe/abc/../0/"; $x=$location.split('/'); $location='/'+$x[1]+'/'+$x[3]+'/'+$x[5]+'/'+$x[6]+'/'+$x[8];
418 :
デフォルトの名無しさん :2008/02/01(金) 01:15:56
phpよく知らんけどこんなとか? $location = ereg_replace("/[^/]+?/\.\./","/",$location); /* "/___/../" -> "/" */
419 :
416 :2008/02/01(金) 02:04:34
どうもPHP固有の仕様に関することかもしれないので、 そっちで聞いてみたいと思います。 どうもありがとうございました。
.(?!xx)* は.*中に「xx」がない、との解釈になるのでしょうか? よって下記とは異なる、でよろしいでしょうか。 (?!xx).*
正規表現で遊べないかと考えていたんけど、みさくら語を正規表現で表すとしたらどうやる?
マッチさせた後どう処理するかの方が肝なので、正規表現だけ考えても仕方ないかと。
蒲焼《か はやき》 深川《ふか がわ》 ↑のような《》に挟まれた半角スペース、全角スペースを指定する正規表現はどう書けばいいか教えて下さい。よろしくお願いします。
********aaa aa * ****age p * kk ** *aaaa のようなものの*を行頭から連続している部分だけ-に換えたいんですが --------aaa aa * ----age p * kk ** -aaaa こういうような二重絞り込みみたいなものってperlのワンライナーでやる方法が知りたいです perl -pe '/^[\*]*/ & tr/*/-/' みたいな感じで条件を合成できそうな気がするんですが
perl -pe 's/^\**/q{-} x length($&)/e'
どうもありがとうございました 正規表現だけじゃできないんですね perlも勉強することにします
429 :
424 :2008/02/08(金) 19:34:16
ソフトは秀丸使ってます。実装言語とかよくわかりません。
テンプレのサイトで少しは勉強してきなよ
やってみって《》とその中までは指定できたけどその先がよくわからんのです。
[《 》] ↑だと《》も一緒に指定してしまうし、だめだ。
あきらめてこれで検索したら? \f《[^《]*\f \f[^》]*》\f 置換するなら"\1置換後文字\3"とかで指定すればいいんだし。
phpなんですが、たとえば $a = "aiueo"; $b = "aiu"; と、あるときに 変数$bの中身(aiu)が$aに含まれるかを調べたいんですがどうしたらいいでしょうか。
strstr
436 :
434 :2008/02/12(火) 11:16:40
わかりました!ちょっと難しく考えすぎていたようです。 正規表現使う必要ないんですね。 ありがとうございます。
437 :
デフォルトの名無しさん :2008/02/13(水) 00:28:11
・・・これだ
phpです。 htmlファイル中の <p> test あああ いいい ううう </p> を preg_match('/<p>((.|\n)+)<\/p>/', $source, $test); でマッチさせると $test[0]には全体、[1]には一致した部分が入っていて正しいのですが [2]に空白も入ってしまっているようです。 Array ( [0] => <p> test あああ いいい ううう </p> [1] => test あああ いいい ううう [2] => ) このようになります。 上手く間にある文字列だけをマッチさせる方法はないでしょうか。
>>438 二個目のカッコ (.|\n) にマッチした箇所がキャプチャされてるね。
後方参照されないように (?:.|\n) とか。 ?: の意味は自分で調べて。
素早いレスありがとうございます。調べてみます。
441 :
デフォルトの名無しさん :2008/02/15(金) 18:54:31
Perl5.6でIPアドレスの範囲と場所をマッチングさせたいと思っています。 192.168.1.* を東京 172.16.0.* 〜 172.16.3.* を大阪 という場合はどのように判定させればいいのでしょうか。 Perl歴3日目なもんで・・・どなたかお力を。
とりあえず、正規表現でやろうとするのは間違ってますよ。 split /\./ してからごにょごにょするか、 CPANのNetAddr::IPのようなモジュールが使えないか検討してください。
443 :
デフォルトの名無しさん :2008/02/15(金) 19:04:12
なるほど。分けてから比較するんですね。 方向性が分かっただけでも助かりました。 ありがとうございました。
そういう場合はサブネットマスク使ったほうが綺麗にかけるぞ
255.255.252.0とかで切っててもいけるもんなんですか?
bitでかんがえてみろ
447 :
デフォルトの名無しさん :2008/02/19(火) 10:54:06
テキストエディタで検索・置換をするのに 特定のワードで始まる行末7文字の指定はどう書けばいいでしょうか? それとDOSのワイルドカードだと AA○○.txt AA××.txt とあったときren AA*.txt BB*.txtとすれば BB○○.txt BB××.txt となったと思うのですが、正規表現でも同様な事ができますか? こちらもテキストエディタでの検索・置換です
>特定のワードで始まる行末7文字の指定 これの意味がわからない、例を出せ例を
テキストエディタっつってもできることできないこといろいろあるので 具体的なソフト名を出した方が回答が得られやすいと思われ。
451 :
デフォルトの名無しさん :2008/02/19(火) 17:48:38
コミュニケーション能力が不足しているな。 エディタの使い方とか正規表現とか覚える前に 人間として最低限必要な事を先に覚えたほうがいいんじゃない?
452 :
447 :2008/02/19(火) 17:55:55
答えられないカスどもは黙っててください わかる人だけが、質問に答えてくれればいいです では引き続きよろしくお願いします
晩飯なににすっかなー
454 :
デフォルトの名無しさん :2008/02/19(火) 18:37:56
サンマの缶詰が安かったから、これで炊き込みごはん。 米1合を洗ってダイソーで買った105円の土鍋に入れる。 そのままサンマの缶詰1缶まるごとブチ込む。 水加減は、缶詰の水分と合わせて200mlくらいになるように調節。 30分くらい浸して火にかける。 最初は中火より強め。5分くらいで吹いてくるから弱火にして、さらに5分。 (赤子泣いてもフタ取るんじゃないぞ) 炊き上がったら5分むらす。 缶詰はサンマでなくても、鯖とかイカとか赤貝とか、好みのでOK。 味が濃い目の缶詰がいいな。味が薄いときは醤油や砂糖やみりんを加えてから 炊くといいよ。
455 :
447 :2008/02/19(火) 18:40:47
エディタはJedit X1.11です 例) あああ〜〜〜1234567 いいい〜〜〜1234567 ……… ……… 〜〜〜は文字数などもバラバラな任意な文字列(全角含む) 行頭『あああ』で始まる行の、行末『1234567』を 別の文字列『abcd』等に置換したいのです
あああ腹へったなー
(?<=あああ).*(?=.{7}) -> abcd
458 :
447 :2008/02/19(火) 21:51:39
>>452 おいおい気がついたらとんでもない事勝手に書いてるな〜(苦笑
>>457 ありがとうございます
戻り読みと先読みですか、なるほど!
ですが、これだと『〜〜〜』の部分になってしまいますよね……
1合炊きの土鍋なんてあるのか 今度ダイソーに行ったら見てみよう
>>459 中国製の土鍋なんてどんな毒が混ざってるか分からんぞ。
ニ○リの土鍋以外にでたっけ
>>452 こういうことすぐ言う人って、昔いじめられてた人なんでしょ?可哀想にね
めんどくさがりなので俺なら↓でやってしまうな /^(あああ.*?)(.{7})$/\1abcd/
464 :
447 :2008/02/21(木) 18:24:17
>>463 ありがとうございます
いろいろ調べながらやってますがダメなようです
もうちょっとがんばってみます
465 :
デフォルトの名無しさん :2008/02/21(木) 18:30:35
せっかくヒントもらえたんだし、頑張ってもらわんとな
466 :
デフォルトの名無しさん :2008/02/22(金) 00:06:24
>>396 いまラッパーつくってるよ
ちょっとまてて
2008-03 発売(予定) 「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳) ISBN 978-4-87311-359-3 定価 5,040円
おや、和訳出るのね。今回は田和さんじゃないんだ もったいない気もするがロングテールの人なら鉄板か
469 :
466 :2008/02/22(金) 21:49:08
>>468 原書では追加はPHP関連とかがあったけど、以前のものからの改訂部分って
ほとんどなかったんだよね。
訳しなおしてるのかなあ?
471 :
デフォルトの名無しさん :2008/02/23(土) 20:12:38
php4なのですが、 <img src="new.gif" alt="New" width="10"> を正規表現で置換してaltの値だけを表示にすることは出来ませんでしょうか よろしくお願いします
472 :
デフォルトの名無しさん :2008/02/23(土) 20:21:04
<img src=\".*?\" alt=\"(.*?)\".*?> \1 でできたよ
秀丸で検索するときに文字列Aを含んで且つ文字列Bを含まない行全体を指定したいのですが、 (含む行) ^.*文字列A.*\n (含まれない行) ^((?!文字列B).)*\n で個別にはわかるんですがこの2つを合わせてて検索したいのですがどう書けばいいのでしょうか?
(^.*文字列A.*\n|^((?!文字列B).)*\n)
あ、間違えたわ
476 :
デフォルトの名無しさん :2008/03/06(木) 01:07:25
dll | ^ dll
微妙にイケメソがいるな
☞
(6 ’) (6
480 :
デフォルトの名無しさん :2008/03/07(金) 17:01:30
質問です。 小数点以下の右端の0を全部取り除きたいです。 小数点以下が0しかない場合は、小数点も含めて取り除きたいです。 3.00 → 3 3.02000 → 0.02 どう書けばよいでしょうか? sprintf("%g", num) とすればいけるかと思いましたが、numが19120730.0000の場合に 1.91207e+07となり、使えませんでした。 perl5.8です。宜しくお願いします。
481 :
デフォルトの名無しさん :2008/03/07(金) 17:04:54
____ // ̄ ̄`| /|断 だ | / |る が | /イ \___| / |// /| | /_\ /_/_レ| ∧o>/ イ≡三\| /ミ// r-<彡/| / /彡 ヾ\_O> | /iハ-イ)  ̄ヽ彡| `/ i∧二 // | / (`ーv\ // /| `<j`ーヾ_ゝ // (r| `< ノ /リ| `< //7| `</ / | `<|
正規表現関係ないな。脳みそつかえ
約2万件のデータがあるのですが 使用する文字が半角全角交じりで途中に記号やスペースもあるかもなのです 文字数もわかりません 2つのキーワードで全部取れますか? キーワード@東京都 キーワードA3-5-7 何区何町だったか思い出せません>< 何故か357って数字だけ覚えてました^^
東-京/都 とかなってたら終わりだな
東京都 市ってなかったっけ?w
東京都.*?[33三].+?[55五].+?[99九] で抽出してあとは手動かなぁ、俺がやるなら 漢数字が入る地名とかいちいちはじいてられないし
<object> ←これ検索したいんですお願いします
/<object>/
490 :
デフォルトの名無しさん :2008/03/09(日) 01:17:00
>>1 みたいにアンカー機能を付けたいのですがどのように書けば良いのでしょうか?
492 :
デフォルトの名無しさん :2008/03/10(月) 21:13:30
<hoge aaa="aa\"bb<cc>dd" zzz="ee\"ff<gg>hh">value</hoge> ↓ value と置換する正規表現を教えて下さい 言語は JavaScript で、戻り読みは使えません
正規表現よく分かりません>< <[^/]+>([^<]+)</.+>
入門 正規表現 サンプルがJavaで吹いた
>492 ブラウザのJavaScriptならXPathのほうが速くて正確
>>495 ブラウザじゃないです
取得したページからタグを削除することを目的としています
秀丸ではスペースは直打ちがデフォですか? 何か気持ち悪い。
499 :
デフォルトの名無しさん :2008/03/12(水) 01:26:27
Perlの正規表現で[^\.-z]っていうのがあったんですけどこれってどういう文字が当てはまるんですか?
>>499 ASCIIのコード表でも見てみればいいんじゃないかな
501 :
デフォルトの名無しさん :2008/03/12(水) 06:02:36
>>500 見てみたけどピリオドのほうがzより後に来てるのでこれおかしいんじゃないのと思って質問したのですが・・・
どこの表にそんなでたらめが書いてあるんだよ
503 :
499 :2008/03/12(水) 06:07:45
あ、あれ・・・ もう一回調べてみたらピリオドのほうが先に来てる・・・
>>503 あー、すまん、書き間違えてたので修正しといた。
ってのは冗談として、 そういう ASCII コード表の順に大きく依存するような範囲指定を書くのは良くないと思う。 バグってハマったときに ASCII コードを凝視しないと解決いけなくなるし、移植性も低くなる。 アルファベットと記号は分けて書くようにするとか、文字クラスなどを利用した方が良い。
>>505 言うことは非常によくわかる。
文字クラスを使うべきっていうのには完全に同意。
でもASCIIコード順は移植性十分にある気がする。
とりあえず俺はASCIIコードで範囲指定するのは問題ないと思う。
個人的には OSの事情とかLOCALEまわりのランタイムの完成度とか POSIX文字クラスは警戒心をくすぐるものだw
こんばんは! はじめましてよろしくです^^ キーワード@とキーワードAを同時にグレッペ出来る機能のあるツールはありますか 1000ファイル単位で処理したいんですが 1ファイルに@AA(Aは同じものが連続である) これを行ごとgrepしたいんです Aについては1つ削除がいいです よろしくお願い致します キーワード@東京都 キーワードA性別A(性別マーク)
日本語でおk
510 :
デフォルトの名無しさん :2008/03/13(木) 03:23:27
3回読んだが意味わからん
なんとなくわかった気がしたけど最後の1行でぶちこわされた
512 :
デフォルトの名無しさん :2008/03/13(木) 07:22:30
グレッペ
こんばんは迄呼んだ。
グレッペのあたりで断念した
デフォルトのまで読んだ
1ファイルに3つのキーワードが先頭から 都道府県名 性別 性別を表す何らかのマーク の順番で並んでいて、 2つめと3つめは同じ性別を意味する別表現である。 例えば2つめが「男」だったら、3つめは「♂」となる。 これをgrepしたいが、性別については一つ消したい。 こんな感じか? grepだけじゃ無理だからsedかawk使え、でおk?
わろた
縦読みだろJK こはキ11こAよキ ここで、前半部分の"こはキ11こ"というのは、 個数は11個じゃないよ、というのを表している。 個は、!=11個、というわけだな。 後半部分の"Aよキ"というのは、 2個でもねーよ、というのを表している。 (2個 !=)という逆ポーランド記法を使っているようだ。 つまり、個数は11個でも2個でもないということだったんだよ!!! Ω ΩΩ<な、なんだってー!!!
519 :
デフォルトの名無しさん :2008/03/13(木) 16:15:05
Perlで
>>1 のようにアンカー機能をつけるためには正規表現を学べばいいと聞きました
if ($FORM{'text'} =~/>>$d/)
こんな感じでアンカーを抜き出すのは合ってるのでしょうか?
そのあと$DATA[$d]てきなのを取り出すにはどうしたらいいのでしょうか?
>>519 ハェ?誰に聞いたんだ?言った奴に質問してこい
$FORM{'text'} =~ s/>>(\d{1,4})/<a href='#$1'>>>$1<\/a>/ixms 思いついたやつを貼ってみる こんなんだっけ?perlうろ覚えだわ
522 :
デフォルトの名無しさん :2008/03/13(木) 21:25:39
>>521 うまくリンクされません。。
$FORM{'text'} =~ s/>>(\d{1,4})/<a href='#$1'>>>$1<\/a>/ixms
↑これは桁数が1〜4ならマッチということですよね
リンクされないのはなぜでしょうか?
523 :
デフォルトの名無しさん :2008/03/13(木) 21:30:52
すいません
自己解決しました
$val =~ s/</</g;
$val =~ s/>/>/g;
これでタグを無効にしていました
それで
>>521 さんの通りにやるとアンカー自体はマッチします
この後それを取り出すのはどのようにすればいいのでしょうか?
ログからデータを取得するのはわかりますが、実際にその取り出された部分だけを抽出して表示するやり方がいまいちわかりません
webprog池
なんだい今更になって 本人乙とでも言ってほしいのか?
527 :
デフォルトの名無しさん :2008/03/14(金) 18:46:06
「楽しいかもね、そうかもね」っていう文字列で 「楽.*ね」ってやると、.*は可能な限りマッチするから 「楽しいかもね、そうかもね」まで拾っちゃうでしょ? それを「楽しいかもね」でマッチさせたい場合どうすればいいですか?
529 :
デフォルトの名無しさん :2008/03/14(金) 21:08:42
*?って?をつければ非欲張り型(なるべく短くマッチ)になるかも知れない
楽.*?ね
.*? でした。
60文字程のURLなんだけど 真ん中あたりの15文字くらいがわかんなくなりました 正規表現でなんとかなりませんか?
その15文字の前か後ろの長いほうで検索すればいいだろ…
>>535 それが許されるなら
楽しいね
だって許されるはずだ
楽しい、ね
楽しいかもね楽かもね
>>535 だったら
楽[^ね]*ね
でもいい様な。
ワード協会とか除外すればいいのどは
541 :
デフォルトの名無しさん :2008/03/15(土) 22:03:46
安楽死ね
「楽しいかもね、そうかもねABC」っていう文字列で 「ね.*$」ってやると 「ね、そうかもねABC」まで拾っちゃうでしょ? それを最後の「ねABC」でマッチさせたい場合どうすればいいですか?
ね.*?$ だと何度言えば
[^ね]を使うとか、いろいろやりようはある
>>544 最短一致に対応してないタイプの正規表現なのかな。
>>543 ,546
その目的には、最短一致は使えないから。
照合開始位置を後ろにずらしてまで最短を見つけるわけではない。
ああ、そうなんだ。
さあ、この問題を解決できる神はいるのだろうかっ!!(ただ答えが欲しいだけ)
ね[^ね]*$ じゃないのか?
それもう545で提案されてんじゃん。
>>550 THX!ひとまずそれで省いた後
ね$をマッチさせることにするよ
553 :
492 :2008/03/16(日) 03:14:37
やはり戻り読みが使えないと難しいですか?
戻り読みはいらんだろ
Vimで 2008年3月16日 06:09:42 ↓ 2008-03-16 06:09:42 のように年月を-で、日を削除するように置換するにはどうしたらいですかね?
:%s/年/-/ :%s/月/-/ :%s/日// じゃあかんのんか? というか、3 を 03 に変える所までやりたいの?
>>556 説明不足ですみません、対象のテキストには日付以外にもいろいろ書かれていて、
年や月などの単語はそのままに日付部分だけ置換したいのです。
日付の正規表現が理解できていないので、こちらでお尋ねした次第です。
>というか、3 を 03 に変える所までやりたいの?
可能ならしたいです。
とりあえずこれでいけた。 :.s/\([0-9]\{1,4}\)年\([0-9]\{1,2}\)月\([0-9]\{1,2}\)日/\=system("printf '%04d-%02d-%02d' " . submatch(1) . " " . submatch(2) . " " . submatch(3))/
しまった。 テスト用に1行のみの置換にしてた。 :.s は :%s に変えてね。 まあ分かると思うけど。
>>558 さん、ありがとうございます。
やってみたのですが、うまくいかず、日付の部分が丸ごと消えてしまうようです。
'printf' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出ました。こちらのVimの設定が悪いのでしょうか?もう少し試してまたレス返しにきます。
何度か試したのですが、同じ結果です。 一応こちらの手順ですが、スレに貼って頂いたものをクリップボードに入れてから、 :<C-R>* で貼り付けして、先頭を :%s/ に変えてテキスト全体に適用してから、実行しました。ほぼコピペなので打ち間違いはないと思うのですが。 Vim7 を Windows 2000 sp4 で使ってます。 printf などもわからないため、もう少し調べてみます。
>>555 ViVi でだけど以下でいけた
:s/(\d{4})年(\d{1,2})月(\d{1,2})日 (\d{2}):(\d{2}):(\d{2})/\1-\2-\3 \4:\5:\6
Vim でも同じように出来るんじゃないか?
>>562 さん、やってみましたが無理でした。
マッチはうまくいってるみたいですが、置換の仕方がVimとだいぶ違うようです。
ViViはいじったことないので、少し調べてみます、スペース入れる辺りがよくわかりませんので。
わざわざありがとうございました。皆さん、お手数おかけしております。
お二人のご教示をヒントにいろいろいじっていたら、以下で、 %s/\([0-9]\{1,4}\)年\([0-9]\{1,2}\)月\([0-9]\{1,2}\)日/\1-\2-\3/g 2008年3月16日 06:09:42 ↓ 2008-3-16 06:09:42 のように、桁数が1桁のままですが、それ以外は置換できました。もう少し試行錯誤してみます。
月などを2桁にしたいのなら、ViViだと以下のようにすればいい :s/(\d{1,4})年(\d{1,2})月(\d{1,2})日 (\d{1,2}):(\d{1,2}):(\d{1,2})/format("%04d-%02d-%02d %02d:%02d:%02d", $1,$2,$3,$4,$5,$6)/e
>>560 >>558 は printf コマンドがあることを前提にしてるから
Windows のコマンドプロンプトだと無理なんだろう。
Cygwin でやればいけるはず。
>>565 さん、ViViを使って、教えていただいた正規表現でできました。
いろいろVimで粘ったのですが自分のスキルでは無理だったので。
ありがとうございました。
>>566 さん、ご教示ありがとうございます。
Cygwinはよくわからないのと、
>>565 さんの方法で出来たので printfコマンドはあきらめました。
>>555 の質問の件は
>>565 さんので解決することができました。
皆さん、いろいろ教えていただきありがとうございました。お世話になりました。
568 :
デフォルトの名無しさん :2008/03/16(日) 19:50:39
あまりの丁寧なレスに 全米が泣いた
初心者です、それなりに調べたんですが・・ あああああああ aaaaaaaaa ?????????? 乙乙乙乙乙乙乙乙乙乙乙乙 こういうある文字の繰り返しを、一つの表現でマッチできますか?たとえば10文字以上 専ブラで弾きたいんですが、数字はのぞけると嬉しいです
[^\d]{10,}
"正規表現 後方参照"でググれ
任意の一文字って . ドットのことでおききしたいんですけど 探したい文字の前につけるんですよね? < を探すのに .< として検索したら結果は >< として検索されます 検索結果に > を含めない方法教えて下さい
>探したい文字の前につけるんですよね? 新しい解釈だな
久しぶりに理解不能なの読んだな 「>」でない任意の1文字 + 「<」 と一致させたいってことなら [^>]< 検索結果から>だけ取り出したいってなら.(>) 後者に何の意味があるのかは知らないけど ただ少なくとも正規表現について基礎から勉強しなおしたほうがよさそうだな
むしろ日本語について基礎から勉強しなおしたほうがよさそうだな
最近も508が理解不能だったぞ
>>577 あれからダブルグレッペというマクロをつかわせていたらきましたよw
一応テストしてから本格的に使わせていただこうと
HDDの奥深くにテスト用のテキスト置いて、 grep開始!
ほへ?
グアッガッガーッ!!うわぁぁああああ!!!
この音は何??
なんだろか!?
ハードディスクが唸りまくってるタラリーン
よくわからないけどドライブごとgrepしてくれたよ
1ファイルで5000行〜1万行が40万ファイルあるのに・・・(ポカーン
コントロール+オルト+デリートでストップかけたら
エディター画面の後ろ側にエラー画面がいくつもでてたww
今時ブラクラ??
驚いたというかワラタwww
>>580 正規表現スレだからこんな書き方をするとスレ違いかも知れないけど、
$NEST(<table,[^>]++class=$AV(tbl)[^>]+>*,</table>)
「*」の所を、「*消したい文字を入れる*」とか、すればいいんじゃないかな。
拡張子のないファイルに.txt付けたいです aa1234ファイル [0-9] $[\.(txt)] だめですか?
+ が使えるなら s/^\([^.]+\)$/\1.txt/ + が使えないなら s/^\([^.][^.]*\)$/\1.txt/
(Perl5互換)のツールで半角括弧を削除したいんですよろしくお願いします
元の文字列
(10123)test.txt
希望する変換後の文字列
10123test.txt
使ってみたいツールはこれです
ベクター Flexible Renamer
ttp://hp.vector.co.jp/authors/VA014830/FlexRena/ このスレの
>>1 関連サイトを廻ってみたけどよくわかりませんでした
ツールの作者HPもいって見ましたがQ&Aとか掲示板はなかったです
どなたか括弧の取り除き方教えて下さいお願いします
( 削除 ) 削除
正規表現教えて下さい <h2>タイトル</2> 「<」から「>」までお願いします(「タイトル」の文字列含む) どなたかよろしくお願いします
>>588 です
書き込んでから
>>1 読みました
今のところ使うソフトは秀丸エディターを試用しようしてみよう思いますが
ツールは何も揃えていない状態なので解答者サンのお勧めのソフトで始めてみます
正規表現でテキストの加工をしたいです
初心者でも挫折しないで継続して使っていけるソフトも一緒に探してます
金額にもよりますがフリー有料問いません
使うソフトはまだ明確には決めていませんので取り合えずシェアーウェアーで試してから
本格的にやってみようと思います
<h2>タイトル</h2>
よろしくお願いします
<h2>///ここは<strong>見出し</strong>です///</h2> こんなのは想定しなくていいのか。
>>591 サン
即レスありがとうございます
そういうのもあるかもしれないです
文字列の中に <strong>見出し</strong> が入っていれば検索文字列も変わりますよねorz
<h2>からエンドを</h2>にする方法教えて下さい
お願いします
途中に改行は?
>>593 サン
588です
途中に改行は想定していなかったです
あるかもわからないと今気づきました
お手数お掛けして恐縮ですが何卒よろしくお願い致します
おまいら、よく
>>588 の文章で、その意図が判ったな。
<h2>///ここは<h2><strong>見出し</strong></h2>です///</h2> こんなのは想定しなくていいのか。
597 :
デフォルトの名無しさん :2008/03/24(月) 23:43:26
結局、正規表現は入れ子は処理できないのでは
598 :
デフォルトの名無しさん :2008/03/24(月) 23:46:46
<h2> (.*) </2> \1 <h2> ([.\n]*) </2> \1 とかでいいのでは?
なるほどね
過去スレ読めばよかったorz
>>33 まで読んだ
>>595 がここに張り付いてるようじゃ
このスレで勉強させてもらおうって人も尻込みするね
>>595 の意図はそれなんだろうけど・・・
ライオンはなんとかって話なわけで 潰しにかかれるうちに潰しちゃう やな奴だ氏ねばいいよ 9図
- - - こ こ へ 何 か 聞 き に 来 た 人 へ - - - ま ず 過 去 ス レ 読 ん だ ほ う が い い 変 な 潰 し 屋 が い て る よ う な の で ご 注 意 下 さ い
603 :
デフォルトの名無しさん :2008/03/25(火) 00:18:28
質問です。 正規表現だと、〜〜を含む行を探すってのは簡単にできるんだけど 〜〜を含まない行を探すのはどうするのが一般的なのでしょうか? エディタならば、「abcde」を含む行を ^((.*)abcde(.*))\r\n で探して、削除することで処理できるのですが、 これはあくまで含む行を探してるのであって、 含まない行を探すというのとは違うような気がして釈然としません。 別に今困ってるわけじゃなくて、知っておきたいだけなのですけど・・・。 よろしくお願いします。
604 :
デフォルトの名無しさん :2008/03/25(火) 00:24:37
>>603 言語理論での定義では、正規表現は「ある文字列を含まない文字列」はあらわせない。
しかしそれでは不便なので、パターンマッチ用に拡張された言語では否定を表現する方法を持っている場合はある。
sage を含まない文字列 ^(?!sage)(.(?!sage))*$
>>603 ^([^a]|a([^b]|b([^c]|c([^d]|d([^e]|$)|$)|$)|$)|$)*
>>603 vi, vim, ViVi なら
:v/regexp/d
で正規表現に一致しない行を削除できる
<h2 title="></h2>">みだし</h2> こんな記述も可能ではある。 結論: HTMLのパースに正規表現は向かない
java1.4ですが、 1234567890 を 1234______ にリプレイスしたいのですが、 どうすればできるでしょうか?
"1234567890".replaceAll("[567890]", "_")
"1234567890".replaceAll("[5-90]", "_")
「違うんです。 987654 なら 9876__ 314159265358979 なら 3141____________ にしたいんです」 かな。
>>610 自己レスですが、いろんなサイトを見よう見まねで + 気合で何とかできました。
"1234567890".replaceAll( "(^....|).+?(?=.+|$)" , "$1_")
「任意の一文字」の.や「前にある文字の1回以上」の+は、bashだとそれぞれ?と*ですが、 正規表現は規格で決まってるものではないんでしょうか? 言語ごとに違いってあるんでしょうか?(bashは言語じゃないってのもありますが・・・)
616 :
615 :2008/03/25(火) 20:27:21
「前にある文字の1回以上」の+ ↑は違いましたね・・・失礼しました。
>bashだとそれぞれ?と* それ性器表現じゃないし
618 :
615 :2008/03/25(火) 20:49:04
>>617 bashのは正規表現とは言わないんですか、失礼しました。そう呼んでるサイトも見かけますが・・・
bashの*に対応するのは.*ですね。
bashスクリプトとperlスクリプトが混ざってると、ちょっと紛らわしいですね
bash のは言うならワイルドカードだな。
grepとglobの違い。
えっ?どう違うの?
622 :
デフォルトの名無しさん :2008/03/27(木) 13:47:15
えっと・・・ VBS (WSH Windows Scripting Host) のRegExp では マルチラインの指定はできんですか? ググって必死こいて探してるけど見つけられないんで。
かなり前のバージョンでサポートされた Set ObjRegExp = New RegExp ObjRegExp.Multiline = True
624 :
デフォルトの名無しさん :2008/03/27(木) 22:10:38
625 :
デフォルトの名無しさん :2008/03/29(土) 17:03:54
「ます」「ただいま」 という二つの単語がある場合で 上記2つにはマッチするが たとえば「まる」という言葉にはマッチしないようにする 正規表現ってどうやればいいですか? 今は「ます」と「ただいま」の2語をマッチするようにしているのですが、 やり方が悪いのか「まる」という言葉でもマッチしてしまいます。
>今は「ます」と「ただいま」の2語をマッチするようにしている 具体的にはどうしているの?
(ます)|(ただいま) どう間違えると「まる」にマッチするのか知りたい。
628 :
625 :2008/03/29(土) 18:03:22
()なんてあったのか! 解決しました!ありがとうございます。
どうやっていて (ます|ただいま) にマッチさせたいのに まる に マッチしてたのかという謎を解決して欲しいです。
>>627 そんな書き方があるとは知らなかった
どの正規表現実装か教えてくれ
/[^%A-Za-z0-9]
一番外側の開始文字〜終了文字までを マッチさせるようなのは正規表現でいけません? 開始終了を括弧としたら "(((1 + 2) * 3) - 4) / 5" の時 "(((1 + 2) * 3) - 4)" ここまで取れない? 括弧見づらいからブレイスにするけど /{([^{}]*|{[^{}]*})*}/ だと2段までしかとれないのは何故?
/{([^{}]*|{([^{}]*|{[^{}]*})})*}/ こうすれば3段までマッチさせられるよ。
普通に最長一致させてやりゃいいんでないの? (1+2)*3)-4 みたいな構文が来たら困るけど
質問ですperl5.8です <aaa bbb ccc> ddddddddddddd<aaa> 検索:<aaa.*?>(.+?)<aaa> で検索したけどマッチしません。どなたかよろしくお願いします
>>636 .*? の部分かな。
<aaa[^>]*> でどうだろう。
>>636 対象が複数行なんだよね?
$str = "<aaa bbb ccc>\nddddddddddddd<aaa>";
$str =~ s/<aaa.*?>(.+?)<aaa>/$1/s; # 後ろに s つける
print $str;
改行のせいだろJK (?s-:<aaa.*?>(.+?)<aaa>)
うわぁ、更新してなかったorz
みなさんレスありがとう
>>636 です
上手くいかないです^^;
もうちょっとガムバッテみます
複数行になると難しいですね
続いた行はできそうな気がするんだけどできないorz
while (<FH>) { /pattern/s; # 先生、何もマッチしません } if (@lines =~ /pattern/s) { # 先生、ここ通りません } どっちか知らないけど。
643 :
デフォルトの名無しさん :2008/04/04(金) 20:06:53
" 11 11 " これにマッチあせて"11 11"を取得することはできますか? 「 *([^ ]*[.]*[^ ]*) *」 でやってみたのですがうまく取得できなくて・・・ スペースは全て全角です お願いします
>>643 途中の[.]*でぶっ飛んでる。つーか、. に [ ] つける意味がないよね。
>>644 じゃあ教えてあげればいいのに文句書くだけなら解答者じゃない荒らしだ
どっか池
こんな感じか違うかw
".1+.*?"
スペースが全角って、もとの文字列がってこと? あと 11 と 11 は同じ文字? それなら +(([^ ]*) +\1) + かな。全角を認識させたいなら・・・環境によるなぁ。
perl5.8です 文字列を3行続けて取得したいのですが教えて下さい 【郵便】100-0001 【住所】東京都○○区○○町1-2-3 もしくは 神奈川県○○市○○町1-2-3○○○○○○○○マンション3階303号室 【電話】03-3000-XXXX 1行目、3行目は行頭にそれぞれ【郵便】【電話】がありますが 2行目の住所部分はマンション名が長かったりすると【住所】はなくて行頭が東京都や神奈川県から始まる行もあります 3行連続で取得する方法教えて下さい
【郵便】[.\n]*?【電話】.*
650 :
デフォルトの名無しさん :2008/04/05(土) 00:02:46
>>646 「○11○5656○」
○は全角スペースです
全角スペースに囲まれた文字列を取得したくて・・・
11とか5656は任意の文字で
間に全角スペースが入っているかもしれないんです
上の文字列だったら「11○5656」
って感じで
わかり難い書き方して申し訳ないです
○(.*)○ これで抽出できないかな?正規表現始めたばっかでよくわからないけど
○*(.*)○* こうか、すまん
基本的に正規表現は最長一致するから
>>652 で問題ないんじゃない?
655 :
デフォルトの名無しさん :2008/04/05(土) 00:27:45
test
>>650 言語と文字コードがないとあきまへんが、なんとかせーっちゅーなら、
(\xe3\x80\x80|\xa1\xa1|\x81@)(.*)(\xe3\x80\x80|\xa1\xa1|\x81@)
これでいけますわ。utf-8,shift_jis,euc-jpなんでもこいのすぐれものや。
どうして正規表現はいつもいつも顔文字に見えてしまうんですか?
>>650 「○11○5656○」
これの1個目3個目の空白はマッチさせないんだよね
2個目の空白は実際にはあるかないかわからない
両隣は任意の文字
ん〜これピッタシあわせるのは今の情報だけでは難しいというより不可能じゃないでしょうか
任意の文字が半角だけの構成なら[0-9][a-z]簡単なんだけどなー
何か他にkeyに出来そうなのないですか?
それとここで解答者が自分の環境でよい結果が出てもあなたの環境ではマッチしないかもしれない
環境に合った正規表現の使い方をしないとマッチさせれない場合がありますよ
質問者も解答者も徒労に終わるので
あなたが正規表現をどのように使うのか記載したほうがいいよ
正規表現を扱おうとする言語もしくは正規表現を扱えるエディターで検索しようとしているのか
あなたを攻めてるわけではないので誤解しないようにね
661 :
650 :2008/04/05(土) 12:28:26
すみません戻りました 皆様レスありがとうございます 「○11○5656○」 ○は全角スペース、何個あるかわからないし、ないかもしれません 「一三○四○○○」だったら「一三○四」 「○○○○八九4○○た」だったら「八九4○○た」 こんな感じで取得したいです 他の文字は任意です。全角の場合が多いですが 言語はJava、コードはUnicodeかな? 簡単に言うと両端の全角スペースをトリムしたいだけなのですが・・・ わかり難い表現ですみません
先頭の全角スペースを除去、末尾の全角スペースを除去 という処理にしたほうが簡単だよ 非欲張りなのが使えればこうかな / *(.*?) *$/
/^□*([^□]+(□+[^□]+)*)□*$/
gawk3.16です 2行に渡る文字列を検索でマッチさせたいです <title(.+?)\n.*title> 秀丸(正規表現ON)ではマッチしていたのですがgawkではマッチしません アドバイス頂けましたら幸いです どうぞよろしくお願い致します
mオプション可能な処理系を使うか、事前に加工しとくか。
>>665 さん
mオプション
マルチラインですね
実はgawkのスクリピトを教えていただいたのです
とても気に入り今後末永く使わせていただこうと思うのですが
複数行の検索が秀丸と違うようなので戸惑っています
他にgawkのアドバイスありましたらよろしくお願いします
>666 相変わらず具体的じゃないのね。 665をやったがこういう風にうまくいかなかったとか こうしたけどダメだったとかあれば、アドバイスのしようもありますが、 他にアドバイスと言われてもなかなか。
>>666 ない物は仕方ない。
mオプションの正規表現を組み込んだawkを自前で作る?
perlとか、正規表現が拡張されてる処理系に移った方が、後々幸せ。
gawk3.16で複数行にまたがる文字列をマッチさせたいです
エイチティティピー://www.kt.rim.or.jp/~kbk/gawk/gawk_5.html#SEC28
上記アドレスのページに「複数行レコード」と記述がありました
>変数FS に "\n"という文字列をセットすれば良い。
> (これは、改行にマッチする単純な正規表現である)
わかる方おられましたら教えて下さい
やってみたこと
gawk.exe "FS = \n 検索文字列 プリントアウト"入力ファイル>出力ファイル
エラー:^バックスラッシュが行最後の文字になっていません
gawk.exe "FS = \n 検索プリントアウト"入力ファイル>出力ファイル^
エラー:More?
gawk.exe "FS = \n 検索プリントアウト"入力ファイル>出力ファイル/
ファイル名、ディレクトリ名 またはボリュームラベルの構文が間違っています
PS:
666です
>>667 さん
>>668 さん
レスありがとうです
>>669 気付け。gawkじゃ無理。
FSはフィールドセパレータ。用途が全然違う。
そういうのはどうしてもawkでやりたければtrで改行文字を置換してからawkで処理して戻すとかやるからなぁ。 awkだけじゃなくて、基本的な知識が足りなすぎるよ。
>>669 です
>>670 さん
>>671 さん
gawkは諦めた方がよいかもしれないですね
私じゃ無理だということはわかりました
アドバイスありがとうございました^^;
<element attribute>マルチラインを キャプチャしたいんです</element> このお題はまだ続くのかな。 > perl5.8です > gawk3.16です 次は何だろ。
>>673 残念でした
秀丸
perl
gawk
ですよw
秀丸でもう少しのところまでいけたんだけど
データが長すぎて最後のソートが出来なかったんだ
それでエクセルとかでやろうとしたんだけど
文字化けで遠回りした
正規表現扱えないんだってわかるのに1週間かかったw
んで改めてやってるんよ
データ形式をちょっと変えて保存するだけなんだけど
こんなに難しいとは思わなかった
秀丸スレの人たちとUWSCスレの人たちのお陰で
ここまでなんとか前進できた
いつも「もう少しだっ」って思っていたところへたどり着くまでに
思いもよらぬ壁が現れるんだ
この正規表現もそうだね
私は正規表現って生まれて始めて知ったんだ
またお願いしますね
オヤシミ^^
>>674 Excelでも正規表現使えるよ。
CreateObject で正規表現オブジェクトを使えるようにすればね。
つか、Perlでできなかったてーのはなんでだ?
>>675 perlで出来そうなんだけど私が作れないだけ^^;
オヤシミノシ
>>676 正規表現使うならperlじゃなくてもいいが何かプログラミング言語もやっといたほうが自由度はあがると思うけどな。
perlは何するにしても過去の遺産のおかげで楽ができるから趣味でやる分にはお勧め。
>>678 紙コピ持ってるよ
最初はスゲーとか思ってシェア払って正規ユーザーなったけど
加工で正規表現検索できないので役に立たない
ビジネスバージョンも抽選で当たったけど
もう使ってないよ
やりたいことは何十回も書いてるよ
ここで書くのもなんなんだけど
既存のファイルからタイトルとデータ1箇所を抽出して一覧表作りたいだけ
<ol>
<li><a href="ファイル名">タイトル</a></li>
<li>データ</li>
</li>予備項目(空欄)</li>
</ol>
この前ファイル名とタイトルの部分を作ってくれた方が居たんだけど
その下にデータ項目と予備項目を作らなければいけないことがわかって
もっかい頼んだら後でコロコロ変わるってことで断られた
それで自分でやってるわけ^^;
素朴な疑問だが、「シェア払って」ってなに?
「シェア払って」ですか 「お金払って」ですね
シェアウェアにシェアフィーをシェア、って早口言葉みたいだ。
Wiki(pedia)って感じだな。
詳説 正規表現 第3版の訳本がやっと出るっぽいな 原書あるから要らんけど…
Perl5.8.2です。 「あかスまのた゚」「゙ナをフaき」のように、 規則性のない全角かな・カナ、半角かな・カナ(濁点半濁点含む)をマッチさせたいのですが 例えば上の例ですとどのようなパターンで記述すればいいでしょうか? 文字コードは何でも構いませんが、可能ならeuc-jpが良いです。 よろしくお願いします。
半角英字が混じってるように見えるが、 それは排除しなくていいのか? Ruby なら EUC にして 0x00 〜 0x7F を排除すればいいだけだと思うが、 規則性の有無のチェックが必要とかなると正規表現では難しいかと。
あ、全角英字や漢字も除くというか、 本当に仮名のみにするのか。 仮名の範囲の端同士で [ヲ-゚ぁ-んァ-ミム-ヶ] みたいにすればいいと思うよ。 Ruby なら文字コード指定できるから、EUC でそうやればいい。
どうだい本当にそういうことか?
文字化けしてる領域をまるっと抽出したいってことだと思うんだが
もしそうなら
>>306 みたいに先読み使えばどうにかなると思う
690 :
デフォルトの名無しさん :2008/04/12(土) 01:42:47
性器にperlを埋め込みたいんですが、腕のいいクリニックをご存知ありませんか?
埋め込むなら、perlではなくpearlをどうぞ。
さすがにRuby埋め込んでくれるところはないんでしょうか?
ないね Pythonなら最初から生えてるのにね
朝になるとEiffelです。
35の春。はじめての C 。
696 :
デフォルトの名無しさん :2008/04/12(土) 22:01:15
haskell! haskell!
697 :
デフォルトの名無しさん :2008/04/13(日) 14:15:30
正規表現でパスワードのような文字列にマッチさせることは可能でしょうか? 条件 ・英字(大文字か小文字)と数字を必ず含む ・英字のみはマッチしない ・数字のみもマッチしない ^\w+$ はもちろん駄目で ^[a-zA-Z\d]+$ ももちろん駄目でした・・・
698 :
デフォルトの名無しさん :2008/04/13(日) 15:36:33
これでどうですか? (\w+(\d*\w*)*|\d+(\w*\d*)*) _と-の扱いは?
699 :
デフォルトの名無しさん :2008/04/13(日) 17:01:14
> _と-の扱いは? ああ、それもいるのか・・
先読み使える言語なら、それで一発では?
701 :
デフォルトの名無しさん :2008/04/13(日) 17:26:35
\d+(\d|\w|[-_])*\w+(\d|\w|[-_])*|\w+(\w|\d|[-_])*\d+(\d|\w|[-_])*|[-_](\d|\w|[-_])*\w+(\d|\w|[-_])*
702 :
デフォルトの名無しさん :2008/04/13(日) 21:26:46
教えて欲しいのですが、この /(?<=\{\s*)/ が perl に怒られるのはなぜでしょうか * をはずすと特に問題は無いのですが
>>702 エラーメッセージでてるだろ。
そこに理由が書いてあるから読めよ。
別々にマッチした方が良くね?
706 :
デフォルトの名無しさん :2008/04/14(月) 22:46:37
だな。おれもそうする。 どんなプログミング言語で書いてるのかわからんけど if ($password =~ m/^[A-Za-z0-9_\-]+$/ && $password =~ m/[0-9]/ && $password =~ m/[A-Za-z]/) { ほげほげ・・・ } みたい書いたほうが、どんな言語にも応用がきくし あとのメンテナンスも楽だしな。 どうしても無理やり1つにまとめなきゃいかん事情があるんなら別だが。
VC++ 2005、WinXPで開発をしています。 正規表現を扱えるライブラリを探しています。 出来れば、charとwchar_tの両方に対応しているものが欲しいと思っています。 片方なら、boostでいいと思うのですが…… どなたか、ご存知の方教えてください。
"abc__def__ghi__jkm"という文字列があるとして、 この文字列中の「__」を任意の数だけ半角スペースに置換するという場合 (1が指定されたなら1つ、2が指定されたなら2つというように)、どのような記述になるのでしょうか。 使用言語はPerlです。 oオプションを指定して評価を1度だけにし、ループで回す、という方法は考えたのですが、 可能なら正規表現のみで完結させたいです。 どなたかご存知でしたら教えていただけないでしょうか。 よろしくお願いします。
perlなら_でsplitしてjoinしたほうが速いような。
正規表現でバッチ処理的な事したとき最速なのってやっぱperlか?
711 :
デフォルトの名無しさん :2008/04/16(水) 13:58:17
ruby
まじか。ruby早いのか
perlの方が糞速いよ
714 :
デフォルトの名無しさん :2008/04/17(木) 04:26:31
2ちゃんではurlを書き込むと自動的にリンクが貼られますが、
2ちゃん外のurlだと
http://が http://ime.nu/に置換されます urlが2ちゃん内か外かを判断するにはどうやっているのでしょうか。
urlかどうかを判断し、リンクを貼るところまではネットで調べて↓のようにできたのですが、続きがわかりません。
ereg_replace("(http)(://[[:alnum:]\S\$\+\?\.-=_%,:@!#~*/&]+)","<a href=\"\\1\\2\">\\1\\2</a>",$str);
どうかよろしくお願いします。
言語はPHPです。
2chの中だったら 2ch.netというURLが必ず入るわけだから、 それが含まれている文字列にマッチするかしないかを確認すればいだけじゃないの
じゃぁ //[^/].*2ch.net/
itemが必ず入ってい<mark>〜</mark>を検索する方法はありましか? その場合itemがない<mark>〜</mark>があり、これはヒットさせたくありません。 javaです。 正規表現は:<mark>.*?</mark>(?<!item.*?) <mark> item </mark> → うまくいく <mark> item </mark> <mark> </mark> <mark> item </mark> → うまくいかない ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑_↑↑↑↑↑↑↑↑↑ 1個目のヒット_____________2個目のヒット
それがXMLデータなら明らかにミスアプローチだと思う。
>>718 そこに書かれている条件だけなら、
<mark>[^<]*item[^<]*</mark>
で上手くいくかもしれない。
<marK>とかのタグが入れ子するかもー、ということなら正規表現じゃムリ。
正規表現でファイルに文字が存在するかチェックしています。 存在していたら中の文字を返す仕様です。 /(<grep\s*([^\s]+)\s*-\s*([^\s]+)\s*>.+<\/grep>/ <grep foo-../hoge/google.txt>マッチします。</grep> この場合、../hoge/google.txt内fooという文字があったらに「マッチします。」を返します。 この応用で質問なのですが、 <grep foo-../hoge/>aaa<grep foo-./foo/>aaaaa</grep>aa</grep> という文のように入れ子の場合、 <grep foo-../hoge/>〜</grep>と <grep foo-./foo/>〜</grep>で 2回チェックしたいのです。 この場合、最長マッチでできるのですが以下のような場合も考えられるのでどうすればいいか困っております。 <grep foo-../hoge/>aaaaa</grep> <grep foo-./foo/>aaaaa</grep> どんな書き方がいいでしょうか? ご鞭撻のほどよろしくお願いします。
</grep>がどっちの</grep>を指してるのかわかりづらい あとそういう入れ子構造は正規表現の苦手な分野だから、ほかの手が使えるならそっちのがいい
教えてください。 正規表現じゃないアスタリスクってなんていうんですか? たとえばsyslog.logから始まるファイルを表示するとき $ ls syslog.log* こんな感じで見てるんだけど、このときの*はメタキャラクタ? また、こういうときに正規表現を使ってみたい場合はどうすればいいですか?
わいるどかーど
ls | grep 正規表現
ありがとうございます。 なるほど、確かにシェルのワイルドカードですね。 納得しました。
727 :
721 :2008/04/17(木) 22:14:46
>>722 ありがとうございます。
C言語やJAVAなんかの入れ子のifのような感じといえばわかりやすいかもしれません。
こういう処理はどうやればいいのでしょうか?
正規表現とは関係ないですがよろしくお願いします。
>>727 パーズして構文木を作って、構文木に対していろいろ処理をするのがふ
つう。
楽をしたいなら、その変な文法をやめてXMLにしてしまえ。DOMにしてか
らイロイロすればいい。
>>728 ありがとうございます。
正規表現でやりたいです。
テーブルタグの入れ子処理みたいなものは正規表現では難しいのですね。。。
<table>
<tr>
<td>
<table>
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
普通の正規表現では不特定回数の入れ子を扱えません。
正規表現を基礎から学習したいのですが、チュートリアル・サイドで 人妻がどうのとか、女子高生がどうしたとかが概説に載っていて嫌な気分になりました。 そこできちんとした書籍を購入しようと思いますがオススメはありますでしょうか? ポケット・リファレンスあたりかな?
正規表現って学習するようなものか? たしかに、正規表現を何か難しいもののように扱って、 「正規表現が分かる!」とか謳ってる本は巷に溢れてるけど、 役に立つと思ったのは一冊もないね。 処理系のリファレンスでも読んで試行錯誤するのが一番いいと思う。
さっそくご回答いただきありがとうございます。 なるほど、モヤモヤがすっきりしました。 とりあえずエディタのヘルプで生きていきます。
詳説正規表現第2版の何が不満なのか
もうすぐ3版が出るところだろ
今週
公式で買ったらもう届いたw
2版だってまだ読み終わってないよorz
742 :
デフォルトの名無しさん :2008/04/24(木) 22:03:25
URIはパーサ使えばいいやん
>>742 '&'(と'?')でsplit()してからの方が楽だったりするかな。
745 :
デフォルトの名無しさん :2008/04/26(土) 04:02:00
perl なら s!abc\.com/map\.php!def.com/map.html! s!=1!=19! かな。簡単なんだけどな。 ruby氏ね
ええ!! rubyのどこが嫌い?
盲目的な信者のみが嫌い。
↑こいつ頭おかしいからw
perlの方がガチ
750 :
デフォルトの名無しさん :2008/04/26(土) 15:15:37
だからぁ、perl なら
>>745 に示したとおり、実に簡単に解決できるだろ?
せめて s!z=1!z=19! か s!=1$!=19! にしないと。
752 :
デフォルトの名無しさん :2008/04/27(日) 09:13:42
2 重引用符に囲まれた文字列".*?"を取り出すにはどうしたらいいか分かります? 例 "2ch" 2ch
>>1 > 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
()で括れば済む話じゃね
755 :
デフォルトの名無しさん :2008/04/27(日) 09:41:57
これは失礼しました Speeeeedで2 重引用符に囲まれた文字列を取り出したいです
756 :
デフォルトの名無しさん :2008/04/27(日) 10:09:30
解決しました!
s="1234567890" s="abcdefghijk" これを 123 456 789 0 ab cd ef gh ij k のように取り出すことはで来ますか? 任意の文字を個数で指定して取り出すことです。難しすぎて分かりません。 java, javascriptです。
/.{3}/ /.{2}/
Javaなら private static String substr(String str, int start, int end) { return str.substring(start, end > str.length() ? str.length() : end); } public static String[] split(String str, int len) { int allLen = str.length(); String[] strs = new String[allLen % len == 0 ? allLen / len : allLen / len + 1]; for (int i = 0; i < strs.length; i++) { strs[i] = substr(str, i * len, i * len + len); } return strs; } javascriptは知らんけど、同じようにできるはず。 あと、758のじゃ中途半端なものが取り出せない。
/.{1,3}/みたいにすればいいじゃん
最大一致だからそれでいいか
762 :
デフォルトの名無しさん :2008/04/28(月) 15:33:01
s="abcdefghijk" reg=/.{1,3}/; arr=reg.exec(s); arr=s.match(reg); #=> abc だけなんで一列目だけしか取り出せなくてだめです。 当然ですけどforとかつえばいいのは分かってます。 javaの方は、 s0="abcdefghijk"; args=s0.split(".{1,3}"); #=> 空文字 で無理です。 正規表現じゃprintfみたいな整形は無理なんでしょうか。
取り出すって配列として取り出すんじゃなくて、 ああいう形の文字列として取り出すってことかよ それは正規表現の仕事じゃない
s="abcdefghijk" reg=/(...)(...)(...)/; arr=reg.exec(s); arr=s.match(reg); 一応不完全ですが、固定ならこういう感じなんですけど、可変長で出来ないのでしょうか。
.* ドットが任意の改行以外ですが、改行にマッチさせたいときどのパターンになるんでしょうか。 func() { a b } を func(){return c} としたいときに改行マッチが必要になります。 k2editorです。 K2Editorの検索は、正規表現を使うものに関してはK2Regexp.dllによって行われています。 K2Regexp.dllは、Baba氏のBREGEXP.DLLに独自の拡張を施したライブラリで、 perl5互換の正規表現が使用できます。
\n
"abcdefghijk".match(/.{1,3}/g);
javaの方も出来たけど、javaのregexは難しいな。Mathcerの操作が少し変てこ。
Matcher
>>765 ,770
K2Regexp.dll自体は、Perlなどと同じように (?s) を使えば . が改行にもマッチするようになる。
しかし、通常K2Editorは1行分のデータしかK2Regexpには渡さないので、そのままでは
複数行の検索はできない。検索文字列に \n や \s が含まれていた場合は、その数を数えて、
その分のデータをK2Regexpに渡すようになっているので、その場合は複数行の検索が可能。
結局、K2Editorで、改行を含む任意の1文字にマッチするパターンは、
[\s\S] あるいは (.|\n) のいずれかが適当と思われる。
なお、K2Regexp.dllは、bregonig.dllに同梱のものに差し替えて使うのがお薦め。
(.|\n) は気づいたんですけど、[\s\S] は築きませんでした。 知らなかったんですけど . ドットは文字じゃないんですか。 [ . \n]ではヒットしないんで。 秀丸は少し独特だけど、K2は改行もヒットするしK2の方を使います。
[ ] の中の . は . そのものとして扱われる。
func1(){ a b } func2(){ a b } \{(\n|.)*?\} {c} func1(){c} func2(){c} ま、こんなとこですかw 便利便利w >[ ] の中の . は . そのものとして扱われる。 . は文字クラスじゃないんですか。 改行\n \r マッチが目的なら、[^\0]とかじゃダメですか?
> . は文字クラスじゃないんですか。 何を言いたいのかよく分からない。 . はメタ文字であるが、文字クラスの中(すなわち [ ] の中)では メタ文字ではなくリテラルとして扱われる。
第3版で気に入らないのは、太字が明朝体なところだけ 2版ではゴシックだったのに、この部分は改悪といってもいいんじゃなかろうか それ以外は結構満足だけど、オビの、「新訳でさらに読みやすくなりました。」 ってのはちょっと言い過ぎかも Javaについて結構な修正が入ってるっぽいけど、 まだそこまでいってねー
>>777 [[.cc.]]*cに関して何か言及してる?
合成文字関連でその辺の話題が気になる。
779 :
デフォルトの名無しさん :2008/05/04(日) 16:55:09
Speeeeedで行末に.があったら削除する正規表現を教えてください
$ 行末 (例)。$ 行末の区点(。)にのみマッチし、それ以外の「。」にはマッチしない ちなみに「.」はエスケープする必要があります
781 :
デフォルトの名無しさん :2008/05/04(日) 17:07:38
>>780 即レスありがとうございます
検索文字列\.$としてみましたが上手くいきません・・・
>>781 そのソフト使ったことないからよく分からないけど
正規表現使うにはBREGEXP.DLLが必要みたいだけど入ってる?
正規表現検索にチェックついてる?
置換文字列は空白になってる?
783 :
デフォルトの名無しさん :2008/05/04(日) 17:15:46
>>783 いまためしたみた
↓でうまくいった、ごめんな
[\.$]
785 :
デフォルトの名無しさん :2008/05/04(日) 17:31:07
786 :
デフォルトの名無しさん :2008/05/04(日) 17:35:18
>>784 すみません
[\.$]だとすべての.を削除しませんか?
>>786 なっちゃうね、悪気はなかったんだけどごめん
他の回答者さんを待ってくださいorz
スマートじゃないけどこうかな 検索文字列 \.$\r\n 置換文字列 \r\n
789 :
デフォルトの名無しさん :2008/05/04(日) 17:45:06
sed -e 's/\.$//g'' 2ch.txt > hiroyuki.txt とりあえずはsedで出来るようになりました。 でも他の方の回答も待ってます!
790 :
デフォルトの名無しさん :2008/05/05(月) 04:03:51
---- 名前: 佐藤よしお ---- 趣味: 野球☆ あやとり☆ ---- 好きな食べ物: しょうゆ☆ みそ☆ なっとう☆ ---- 名前: 加藤たけし (以下、同じように膨大な人数分続くものとする) 他スレから誘導されてきました このようなテキストファイルがあって 「好きな食べ物」の項目の行末の「☆」だけまとめて消したい、 言い換えれば「好きな食べ物:」から最初の「----」までの間の「☆」だけを まとめて空白に置換したい場合 どのように指定してやればいいのでしょうか? 趣味、好きな食べ物とも人により個数はまちまちで、一行にひとつ表示、 行末にすべて「☆」がついてます どうかよろしくお願いします
なにで処理する予定?
793 :
791 :2008/05/05(月) 16:54:05
テキストエディタのEmEditor Freeを使っているのですが WinXP対応のフリーで使えるソフトであれば何でもかまいませんm(_)m
"☆"を""に置換するだけ。
違うだろ
「好きな食べ物:」から最初の「----」までを選択状態にして
>>794
あほばっかり
なんかゴミが一人いるようだけど
>>796 でまったく問題ない。
799 :
791 :2008/05/05(月) 20:04:54
数が膨大で、いちいち選択するのがたいへんなので 一括でできたらいいんですが・・・ そういうツールはないのでしょうか
アホ。ここもすれ違いだな。
>>799 無能な人間ばっかりですいません。
他をあたってください。
>>791 秀丸エディター → 検索 → grepして置換
HMJRE.DLL V1.85
正規表現ON
検索:好きな食べ物:\n(.+?)☆\n(.+)☆\n(.+?)☆
置換:好きな食べ物:\n\1\n\2\n\3\
これでどうでしょうか
>>802 好きな食べ物の数は固定じゃないんじゃないか?
>>791 sed でこんなのとか。
sed -e "/好きな食べ物/,/----/s/☆ *$//"
マルチバイト文字食える sed くらい転がってるだろ。
805 :
791 :2008/05/06(火) 08:46:23
>>803 >>802 すごい、5万行オーバーのが一瞬で出来ちゃいました\(^o^)/
sed、自分でもいろいろ勉強してみようと思います。
まことにありがとうございました。
ローマ字としてちゃんと読める10文字のアルファベットはどう表現すればいいですか [KSTNHMYRWGZDBP][AIUEO] の5連続でも満たすけど、Nやア行が入らない ヘボン式表記は無視でいいです 処理系はtripper+です
トリッパーだけでは無理っぽい トリッパーで ^([KSTNHMYRWGZDBP][AIUEO]|[AIUEON]) の5連続を検索して テキストエディタで [^0-9a-zCFJLQVX./]{9,} を検索すればいいんじゃないかな
なるほど 広くひっかけて後で絞った方が楽だし速そう じゃあもう、[ABDEGHIKMNOPRSTUWYZ]の10連続の結果に対して、 拗音や促音も含めて読めるパターンはどう書けばいいでしょう
^(([KSTNHMYRWGZDBP])\2?Y?[AIUEO]|[AIUEON])*$ ↑のパターンを使えばトリッパーだけで検索可能だった 大文字・小文字の区別無しならHitしまくり
おお
>>806 の方法でやってるよりも明らかに速いペースで見つかる
促音だけ目をつぶって、これで必要十分だと思います
ありがとうございました
ああ、違う 促音にも対応してあるのか 全然ヒットしないだけで
PHPの正規表現について質問なのですが、 「任意の文字列の中にABCという文字列が含まれていたら」というルールを記述する時には どのようにかけばよいのでしょうか?
文字列中にある[]で括られた文字列を抽出するには どのように書けばいいのでしょうか? 例えば AAAA[1234]BBBB から [1234] だけを抽出したいです。 よろしくお願いします。
(\[[^\]]*\])
最短一致が使えるなら (\[.*?\])
つか、こういう文字列の最短抽出にしか正規表現使ってない気がする
817 :
デフォルトの名無しさん :2008/05/16(金) 01:50:31
そう言えば・・・ずっと前から思ってた。 最長一致って使いづらいよね。 たぶん使いたい人がいるから、そういう仕様なんだろうけど オレは不便で不便で仕方ないと思う。 まんどくせぇ〜〜〜〜
使いたい人がいるからとかそういう話じゃなくてツール・言語の歴史に関連することで・・・ もともとsedやawkしかなかった時代には最長一致しかなかったんだぜ。 でも正規表現の書き方によって最短一致に対応することが可能だからそれでいいじゃんと 考えられてたのだろうと思う。 (逆に最短一致しかなければ最長一致に対応することはできないしね) perlあたりからやっぱ最短一致の表現もあったほうが便利じゃねって感じで導入されたんだろ
正規表現は何かと記号が多くてエスケープしまくりになる。 perlあたりが幅を利かせて、perl互換になるように右へならえしてるけど、 javaとかmsとかibmあたりがデファクトの記法を作ってくんないかな。 regexpを実装する方もperl記法に合わせると仕様がでかすぎで大変だろに。
Unicode前提にして、豊富な記号文字を駆使しても面白いかも。 現状だと、同じ記号が文脈によって違う意味になったり、 言語に組み込まれると、その言語の記号とも混同しそうだし。
今、perl とかけ離れたセイキヒョウゲンの仕様を作って、 それがデファクトになる可能性がどんだけあるんだ? Sun や IBM や MS なんか、日本じゃお上様も同然だけど、普通の営利企業なんだぜ?
このスレだとPerlも生き生きしてるんだ!
>>817 意味がわからない。最長一致がないと。
例えばAで始まる単語(A\w*)と言った簡単な表現すらできない。
普通は最短一致の使用頻度はかなり少ないと思うけど。
同じ内容なら最長一致のより遅くなるってのもある。
いっそ[a-zA-Z0-9_]以外は全てエスケープが必要って仕様にしてくれw その方が逆に分かりやすいw javascriptはエスケープ廃止になるんじゃなかったか
2chスレのURL抽出用に書いた正規表現 h?t?tp://\w+?\.2ch\.net/\S+?/[0-9]{1,10}+/? いい感じに動くけどもうちょっとシンプルにできんかな? 使用ツールはsakuraエディタのgrep検索
826 :
デフォルトの名無しさん :2008/05/16(金) 21:07:27
>>823 >意味がわからない。最長一致がないと。
>普通は最短一致の使用頻度はかなり少ないと思うけど。
「使用頻度はかなり少ない」とわかってて「意味が分からない」って、どゆこと?
827 :
デフォルトの名無しさん :2008/05/16(金) 21:22:46
オレが若い頃、テキストエディタといえば ed しか無く、イヤでも正規表現を使わざるを得なかったんだよ。 いいか、カーソルキー(←→↑↓)キーを押してもカーソルは移動しない。 BS キーを押してもカーソルは左に移動しない。文字も消えない。 1行入力の途中で間違いに気づいたら @ を押してキャンセル。最初っから入れなおし。 そんな時代に、やれ search "ナントカカントカ" だの pattern="ウンコチンコマンコ" replace "ボボメンチョ" だの そんな長ったらしいコマンドがタイプできると思う? 50歳過ぎたパートのおばちゃんに ed のコマンドを教えるオレの身になってみろよ? 検索/置換コマンドは短ければ短い方が作業効率がいい。 正規表現も短ければ短いほうが作業効率がいい。 毎日使うもんだからスグに馴れる。さすがに50過ぎたパートのおばちゃんは3週間くらいかかったけどな。 とにかく、1文字でも省略したい。1文字でも短くしたい。記号だらけ?結構毛だらけぬこ鍋だらけ! java?MS?IBM?そんなもんに正規表現を汚されたくは無いね。こちとら年季が入ってるんだ。 正規表現の自由を侵害するな!市ねうんこヤロー!ドタマカチ割るぞ!さっさと家帰ってクソして寝ろ!!!!
828 :
デフォルトの名無しさん :2008/05/16(金) 21:25:48
テメーら、正規を舐めんじゃねぇぞ!
ちょっとわかりにくかったね。突っ込んでるのは >たぶん使いたい人がいるから、そういう仕様なんだろうけど >オレは不便で不便で仕方ないと思う。 のところで『使用頻度の少ない機能』が『デフォルト』で あったほうが良いような発言をしてるから、なんのこっちゃってこと 最長一致がないと困るケースなんぞいくらでもあるのに 『たぶん』とかさ、ほんとにこの人正規表現わかってるんだろうか
>>825 h?t?tp://[^./]+\.2ch\.net/\S+?/\d+/?
831 :
825 :2008/05/16(金) 22:09:52
832 :
デフォルトの名無しさん :2008/05/16(金) 22:18:14
>>827 今でもこういう化石がいるのかw
コボルと一緒に絶滅したのかと思ってたw
ed, sedはカーソル移動をregexpでやるんですか。知らんかった。 viスクリーンエディタ様様やな
コボラーの俺が通りますよっと
そのまま通り過ぎろ
grepの由来はg/RE/p
837 :
825 :2008/05/16(金) 23:58:39
>>830 のやつで実験して日本語文字(なぜかあった、アクセスはもちろん出来ない)も引っかかったんで
自分なりにまた改造してみたんで一応張っときますね
h?t?tp://[-a-zA-Z0-9]+\.2ch\.net/[-./a-zA-Z0-9]*?/\d+/?
素人丸出しですまんけど、正規表現ライブラリとやらを作ってる人が独自の仕様を作ることはできないの? そりゃデファクトスタンダード勝ち得てるらしい位だから、Perlの正規表現仕様はそれなりに有用なんだろうけど。 Perlの仕様がアレなんで自分の使いやすいように作ってみましたー、なんて言う人が集まってみたら個別のニーズに合った使い方ができるんじゃ・・・?
ソフトごとに違うしおおむね独自
>>838 アプリ独自といっても細かいところだけじゃないのか。
秀丸の\fは少しビビッたが。だからいきなり記法をかえるのは無理だろ。
正規表現自体が記号を多用していて独特だからな。
上にもあったが、全ての記号はエスケープするか、
記号も文字として扱いたい場合は括弧とかでくくるのどちらかしかないな。
\[abc\]\<def\>
と冗長にするか、
\QUOTE[abc]<def>\QEND
みたいなの。
似たような仕様はJavaにもあったが、これはもう仕様を策定してデファクトになるしかない。
viで空行/#から始まる行をまとめて削除しようとしています。 以下2つは個別に動作するのですが g/^$/d g/^#/d これらをまとめようとすると動作しません g/^#|^$/d g/(^#|^$)/d g/^(#|$)/d 書き方が間違っているんでしょうか・・
\( \) \| じゃないかね
おお、動きました。ありがつ!
そもそもperlの正規表現でなんか変なところってあったか?
845 :
デフォルトの名無しさん :2008/05/18(日) 03:17:09
変って言うよりも、短すぎて検索しずらいって事じゃないかな。 たとえば、java だと System.out.println() って何だ?って思ったら google [ System.out.println() ][検索] で解説ページがたくさんひっかかる。 ところが、正規表現で /\d+/ の \d って何だ?って思って google [ \d ][検索] とかやっても関係なさそうなのしかひかからない。 何の知識も無いヤツがパッと見て意味を調べようにも調べにくい。 ・・・単に馴れの問題だけどね。毎日使ってればすぐに覚えられるのにね。 せっかくエディタに正規表現検索機能があっても使わない人はたくさんいる。
そういう問題じゃないだろ。といっても、おまえの意見は2CHクオリチーだけどな
「そもそも」は
>>819 で、PCRE だと実装が大変だろうからもっとお手軽なデファクト作れよとか
そんな話じゃないの?POSIX だと軽装すぎなのかな。
いや、あれだろ。[]()つかったり<>使わなかったりで 正規表現は記号に頼りすぎでカオスになってる 別に手に馴染んでるから困らないけど、たまに使わなくなるといちいちマニュアル見る事になるしめんどうじゃん 結局細かい機能は使わないし忘れる
pearlなんてしょせんはテキスト処理awkとかの延長だろ。 今じゃ言語とかいって肥大化してるけど、設計がプログラム言語じゃなくて、テキスト処理用途だったからカオスになってる。 バッチとかのテキスト処理というよりも、プログラムやりたいならrubyでいいよ。
なんとかは思いつきでものを言うってやつですね、わかります
的外れな事は言ってないと思うけど
>正規表現は記号に頼りすぎでカオスになってる 気持ちはわからないでもないけど、 そもそも正規表現って数学が基になってるからしょうがない。 数式が (1 + a * (3.4 / 5.6 ** b) - c + Σf(n) みたいになるのと同じだね。 記号で抽象化されてるからこその数式みたいな強力な表現力だし。
なんだここ? 自己破産者のスレか?
>>853 説明するときは記号で抽象化してもいいけど、
設計するときはその記号とやらに頼る必要もなく、使いやすいように実装してほしい。
例えば今の設計だと、その数式の各各を正規表現で取り出すとしたら、正規表現のソースが汚くなるんじゃないのか?
読み返したとき何なってるのかさっぱり分からなくなる。まあ、所詮はハック専用だけど。
記号だらけっつーとAPLが最強^H凶だな。 慣れちゃえば簡潔でイイ。 POSIXの[:alpha:]とかってのは冗長でイヤなんだけど、 こっちの方が可読性は多少は上? 忘れても、又はよく使わない表現でも、一応は読めるのが利点か。
857 :
デフォルトの名無しさん :2008/05/18(日) 12:09:26
POSIXやISOあたりになると、少なくとも業界最強の人たちが設計してるからなんか意味あるんだろう。 何十年も前なのに、腐ってないだろ?確かに冗長ではあるけど、あんまり使わないし、それは実装依存じゃないのか? 実装依存なことは正規表現と全く関係ない。 低学歴が設計してもカオスなだけになるしwwwMSのC$みたいなのとか最強に笑えるww
ていうか正規表現って別の字面の奴ってないの? 細かい方言はいっぱいあるけど 全く別物って見たことないな。
個人的な意見で申し訳ないけど、D, C#, perlはカオスでそのうちゴミになる。 C++はカオスというよりも、誰もが既にゴミ言語と認めるだろう。 たぶんC++を極めたとしても、いざ何か作ろうとしても何も作れないんだろうけど。 言語とか設計というのは、あくまでソフト側の問題であるし、 冗長とか関係なくて意味不明・複雑すぎたらカオスだし、そういうもんじゃないのか?
正規表現組み込みのPerlならともかく C++/C#/Dを持ってくる意味がわからん
たぶんスレ違いだろ 前後のレスと話が繋がってねーもの
やっぱ歴史のあるCOBOLだね! コボラーの俺バンザイ(泣
コボルは予約語を小文字で書くとエラーになるんだろうか?
頭おかしくなっちゃうとこうなるんだよね〜 頭んなかは記号だらけでしょw
>>858 違う実装も可能なんだろうけど、
イライザ効果(人工知能じゃない方)があるから、
より多くの人が直観で機能を把握できる方が有利。
その割にはUNIX界隈って無駄としか思えない車輪の再開発で溢れかえってるよな
イライザ効果と再実装は直交するでしょ。
可読性云々言う人は、boostのxpressiveで パターンを変数に突っ込んで使ったら?
regexpが言語組み込みかライブラリなのかはあまり関係ないと思うけど、どうなの?
>>869 sedやperlで済ませるような仕事を
わざわざC++とboostで書くのかよw
演算子の形式とか比較の機能追加とかそんなんばかりじゃなくて 検索の中断がやりやすくなるようにリカーシブコールを排除するとか 合成文字関係の対処とか、ハードウェアアクセラレーションを考えるとか 社会保険庁じゃないけど大量のデータの突合に正規表現を使うと 空間・計算のコストが洒落にならないからVMの構造の再考とか
873 :
デフォルトの名無しさん :2008/05/20(火) 01:16:19
今pythonのお勉強中なんだが、pythonの正規表現って使いづれー 使い勝手最悪だわもーなんじゃこれ〜 正規表現が組み込み演算子じゃないのはいいとして、 正規表現クラスのメソッドmatchが文字列の"先頭"と一致するかどうかって調べてどうすんだよこれ 文字列中のどっかでマッチさせようと思ってメソッドsearch使ったらmatchオブジェクト返してこねーし なんか俺の中で全然直感的じゃないわpython 正規表現の扱いは組み込みのperlか、直感的に馴染むrubyがいいわ
いやいや、MatchObject返してるだろ
よく考えると、正規表現をアレコレ使い勝手でデコレートしていくと、組み込みのパールの様になるんだと思った。 つまりpearl自体は実は言語とかじゃなくて、正規表現の現在の進化なんだとw
モジュールで定義してある関数を使えばsearchは期待どおりの動作するけど 普通は正規表現クラスのインスタンスメソッドでsearchってやったらmatchオブジェクト返してくるだろ常識的に考えて pythonの正規表現クラスのsearchメソッドがstringクラスで定義してあればまだ話はわかる とりあえずモジュール定義関数とメソッドの定義をどういう基準で分けてるのか全然わからんから使いづらい
ん?ん? >>> import re >>> type(re.search(r'fo*', 'foobar')) <type '_sre.SRE_Match'> >>> type(re.compile(r'fo*').search('foobar')) <type '_sre.SRE_Match'>
878 :
デフォルトの名無しさん :2008/05/20(火) 01:44:20
>>870 java の正規表現つかったことあるか?
たとえば Windows のパスの \ を / に置換したいとする。
perl だと patg =~ s!\\!/!g
java だと path = path.replaceAll("\\\\", "/")
perl では、\ は エスケープしなきゃならないから \\ と書く必要がある。
java だと \\ をエスケープしなきゃならないから \\\\ と書かなきゃならん。
\ 一文字を検索するのに \\\\ と書くって事だ。
これが言語組み込みと、ライブラリの違いね。
ちなみに VisualBasic は \ をエスケープしなくていいから perl と同じく \\ でOK。
javaにはWYSIWYG文字列リテラルないの?
>>878 それは組み込みかどうかとは関係ないんじゃないか?
Pythonはライブラリで正規表現を実現しているけど、r'' と '' という二つの形式の文字列がある。
r''のほうを使えば'\'が二倍になるのは避けられるよ。
>>873 書籍版『Pythonチュートリアル』巻末の付録オススメ
Perl/Rubyから入ってきた人が正規表現でイラつくところをケアしてくれてる
882 :
869 :2008/05/20(火) 07:48:56
>871 だねw あとはxオプションつけて 字下げとコメントつけるくらいかなぁ 戻り読みが入った長いパターンだと それもつらいけど。
884 :
デフォルトの名無しさん :2008/05/20(火) 13:06:11
それなら、\\\と3連続なら、\\\\\\\\\\\\ になるのか!!
なんでそんなに増えるw \\\をjavaの文字列リテラルで表すなら"\\\\\\"で済む あくまで文字列リテラルの表記法がそうなっているだけで javaの正規表現APIに渡される文字列は\を渡すべきところは\でなければならない たとえばストリームから正規表現を文字列として読み込むときとかは\を\\にすると違うものになる
すまん勘違い "\\\\\\\\\\\\"で正しい
この拝金主義者が
バックスラッシュを斜線と申すか
拝金主義者w
パチンコ・ゴールド・ラッシュ!!
>>875 真珠はpearlで合ってるけど、言語はperl、aがない。
895 :
デフォルトの名無しさん :2008/05/20(火) 22:57:06
\\\\\\\\\\\\ 円地獄! まるで武●士みたいなヤツだな
ちょっとかっこいいな>武●士
897 :
デフォルトの名無しさん :2008/05/20(火) 23:22:10
>>878 のつづき
で、正規表現パターンをテキストファイルから
・・・たとえば MyApplication.properties というテキストファイルから読み込むとする。
何も考えないヴァカなjavaプログラマは、テキストファイルにこう書くんだな。
検索文字列=\\\\
置換文字列=/
これで \ を / に置換できると思ってる。が、当然うまくいかない。
\\\\ と書くのは、あくまでもjavaソースコードの中だけで、外部のリソースから入力するときは
普通に \\ でいいんだよ。
この違い。なぜそうなるのか。
コレが理解できないヤツが結構多い。しかも結構ベテランのjavaエンジニアにもいるんだな。
今時のクールな若いハッカーはjavaみたいなダサい言語は使わないから
若くてクールな人は言語なんていじらずに女の子をいじります
誰がうまいことry
901 :
デフォルトの名無しさん :2008/05/21(水) 07:56:16
\\\\\ \\\\\\\\\\武士\\\\\\\\\\\\\\\\\ \\\\\ \\\\\\\\\\\\\\\レイク\\\\\\\\\\\ \\\\\
JAVA って正規表現リテラル使えないの?
正規表現使ったアプリってテストデータはどうやって作るのですか?
自分で作れば?
テストデータは自分で作るもんだろ…
行頭から連続したスペースを全角空白に置き換える正規表現ってどうかけばよいんでしょうか 2chにコード貼り付けるのに、インデントして見やすくしたいなと思ったんですが 意外と難しい・・
何が難しいのか理解するのが難しい・・・
>>907 どうせなら全角空白じゃなくて とかに置換汁
あ、それでも表示いけるんでしたっけ ちょっとテストさせてください  ←&nbspです
やっぱり、2つ&nbsp書いても空白一つにしかならないですね &nbsp→空白の置換は簡単なので、 見栄えが重要な時は全角のほうがよいと思います
あ、セミコロン付け忘れてたのでもっかい。 1個 2個
スレ汚しすません・・  への置換を目指します
行頭にこだわる必要ないなorz・・s/ / /g
ここは実験場じゃない。
917 :
デフォルトの名無しさん :2008/05/21(水) 21:29:43
↑ 全角を半角に置換するスキルも無いの?
\ ∩─ー、 \/ ● 、_ `ヽ / \( ● ● |つ | X_入__ノ ミ 俺は釣られないクマ ・・・ 、 (_/ ノ \___ノ゙
perlをshift-jisで書いてうまく動作させるのに苦労してた時に、 ネットで拾ってきたソースを組み込んだら謎のエラーが増えて、 さんざん困った挙句全角スペースが原因だったことがある
全角スペースと行末の空白は可視化しておくとよろしおま。
行末の空白が見えるのもあるんだ
半角スペースを表示するエディタは一般的でしょ。
保存時に行末の空白を除去するオプションがあるエディタもある。
コンパイラがUnicode的な定義で空白文字を認識してくれればいいのに。
Unicode的てよく分からないだけど、なに的なの?
ん? ユニコードの空白文字はユニコードの空白文字じゃね? ZsカテゴリとかZlカテゴリとかZpカテゴリとか。
MSのC#コンパイラはIDEOGRAPHIC SPACEも空白文字として扱ってくれるよね。
専ブラJaneのスレ内ハッシュ抽出に使いたいのですが、 \b[0-9a-f]{32}\b \b[0-9a-f]{40}\b \b[0-9a-f]{64}\b を一行にまとめてくだしあ。 てけとーに \b[0-9a-f]{32,40,64}\b とかやってみたけど案の定駄目ですたwおながいします
\b[0-9a-f](?:32|40|64)\b こうですか?わかりません><
>>929 どもっす!
ハッシュ3種の抽出はそれぞれおkでしたけども、
ファイル容量の3桁の数字に誤爆してるようだすw
53,864,862
~~~
とか378,231,040
~~~
とからへん…
Cの変数宣言にマッチする正規表現を試行中だが int a; int *b; int c = 0; static int d; volatile int e; int f,volatile g; unsigned h; signed int i,j; int const* k; int * const l = 0,m,*n; 全部マッチしなければダメなんだぜ。 Cは邪悪過ぎる…orz
Janeの検索なんかバグあるからなあ
>>932 まじっすかw
ならしゃーないんで諦めて個別に抽出する事にするです。
dでした!
>>928 \b[0-9a-f]{32}([0-9a-f]{8}([0-9a-f]{24})?)?\b
とか?
>>929 は全然違う希ガス。
>>931 正規表現「だけ」で構文解析は不可能でしょ?
struct S { int x, y; struct S *next; } a, b, c, d, *e;
とかこんなんも declaration ですよ
936 :
928 :2008/05/23(金) 21:50:53
>>934 すげーバッチリっす!キタコレ
どーもですdd!
blog URLがザクザク出てきまする
変数名だけ拾えばいいならできそうかな ;か,の前にあって空白か*の後ろにある文字列が変数名ってことで あと関数ポインタはあきらめる
>>938 それ幾らなんでもは単純すぎでしょう。宣言には初期化子がついてることもある。
int a[] = { 1, 2, 3 };
のようにね。
;か,の前にあって空白か*の後ろにある文字列 なら、普通にポインタのデリファレンスとか引っかかるだろ
それなら = と [ の直前に文字列がある場合も含めればいいじゃない
typedef int a, *b; int c, *d;
コンパイル可能なCのソースにのみマッチする正規表現を記述したが それを記すにはスレの残りが少なすぎる
ネタをネタと(ry とでも書いておけばいいのかな
「EXEファイルを見るだけで私ならすべて読めると思うのですが」 に通ずるものがあるな
Q. XXXを証明せよ A. 自明である
朝から笑っちまったじゃねーかw
949 :
デフォルトの名無しさん :2008/05/26(月) 22:42:20
"1234abcd5678"のような文字列で、英字の部分だけ9にしたい。 "123499995678" 英字は何文字あるかはわからないが、その文字数分だけ9に置き換えたいのですか 正規表現で可能でしょうか?
>>949 検索文字列 : [a-z]
置換後 : 9
大文字小文字区別するときは、わかるよな?
[a-zA-Z]
952 :
デフォルトの名無しさん :2008/05/27(火) 23:06:36
sedで、 hoge=1234ab のhoge=の後の部分を hoge=XXXXXX のように、Xに置き換えるにはどうすればいいでしょうか?
953 :
デフォルトの名無しさん :2008/05/27(火) 23:11:25
s/1234ab/XXXXXX/
s/hoge=1234ab/hoge=XXXXXX/
>>953 は条件を満たしてないな
955 :
>>952 :2008/05/28(水) 07:08:08
>>954 すいません、1234abの部分は不定となっており、123456となったり、12abとなったりします。
でも、Xにする文字数は同じにしたいのですが、正規表現で可能でしょうか?
>>955 可能というか基本すぎ。それくらいググれ。
ググるのもいいけど自分で考えてみることも大事だよ
知識が無いのに、いくら考えても無駄だろ。gdgd言ってないでさっさとググれ。
959 :
デフォルトの名無しさん :2008/05/28(水) 13:06:00
s/hoge=(1234ab|123456|12ab)/hoge=XXXXXX/
s/hoge=.*/hoge=XXXXXX/
>>952 sedだけでやるのは厳しい気がするからRubyで書くと
k, v = "key1=value1".split("=")
"#{k}=#{'X' * v.length}" #=> "key1=XXXXXX"
正規表現使ってないしsedじゃなきゃ駄目とかいうならスルーしてね
echo hoge=1234 | sed -e ':a;s/\(hoge=X*\)\([^X]\)/\1X/;ta'
陰険なレスが多いな。ちょっとワロタw
964 :
961 :2008/05/28(水) 15:15:45
hoge=1234ab
hoge=X234ab
...
hoge=XXXXX
すげー! sedじゃ厳しいかもとか言ってすみませんでした
>>962
以下のデータで xxxhogexxx xxx\hogexxx hogeにはマッチしないけど\hogeにはマッチするという書き方をしたいのですがどうすればいいでしょうか? また、hogeと同様にhuga,fooもあわせてチェックするにはどうしたらいいでしょうか? xxx\fugax\hogexxx = マッチする xxx\fugax\hogex\foox = マッチする xxxfugax\hogexxx = マッチしない xx\xfoo\hogexxx = マッチしない
966 :
デフォルトの名無しさん :2008/05/28(水) 18:54:10
^x+(\\hoge|\\fuga|\\foo)x
なんつうかもう正規表現とかのレベルの話じゃないな
968 :
965 :2008/05/29(木) 12:01:51
>>966 ありがとうございます。
最初に
\hoge,\foo,\fugaとかが来る可能性もあります。
またx以外の文字(2バイト文字も)も入っています。
後からで申し訳ありません。
969 :
デフォルトの名無しさん :2008/05/30(金) 13:21:37
以下のような文字列からリンクの部分を抽出したいと思っています。 aaa<A href="aaa.html" target="_blank">リンク<BR>1つ目</A>bbbbb 結果として、<A href="aaa.html" target="_blank">リンク<BR>1つ目</A> が戻ってきてほしいのですが、思うように動きません。 コードは以下のように書いています。 var testReg = new RegExp("(<a[^>]+>)([^(</a>)|(<a)]*)(</a>)"); var ret = Str.match(testReg, "i"); 疑問なのは、<BR>をなくすと正常に抽出ができる点です。 正規表現として悪い部分をご教授願います。
[^(</a>)|(<a)] [^...] は文字の否定で文字列の否定ではないよ。
971 :
969 :2008/05/30(金) 14:01:56
>>970 ありがとうございます。
意味がわかりました。
ところで、文字列の否定は不可能でしょうか?
972 :
デフォルトの名無しさん :2008/05/30(金) 14:37:28
Str = 'aaa<A href="aaa.html" target="_blank">リンク<BR>1つ目</A>bbbbb' + 'bbb<A href="bbb.html" target="_blank">リンク<BR>2つ目</A>ccccc'; var testReg = new RegExp("<a.*?>.*?</a>", "i"); var ret1 = testReg.exec(Str); WScript.Echo(ret1); var ret2 = Str.match(/<a.*?>.*?<\/a>/i); WScript.Echo(ret2);
973 :
デフォルトの名無しさん :2008/05/30(金) 15:43:12
でも途中に改行 \n が入るとダメだな。2つ目が出てくる。 Str = 'aaa<A href="aaa.html" target="_blank">リンク<BR>\n1つ目</A>bbbbb' + 'bbb<A href="bbb.html" target="_blank">リンク<BR>2つ目</A>ccccc'; var testReg = new RegExp("<a.*?>.*?</a>", "i"); var ret1 = testReg.exec(Str); WScript.Echo(ret1); perl なら s つければうまくいくんだが $str = qq!aaa<A href="aaa.html" target="_blank">リンク<BR>\n1つ目</A>bbbbb! . qq!bbb<A href="bbb.html" target="_blank">リンク<BR>2つ目</A>ccccc!; $str =~ m!<a.*?>.*?</a>!is; print $&;
文字列の否定?不可能です。
文字列の否定は、(?!文字列) をサポートしてれば、可能っちゃ可能。
ふつーにHTMLパーザを使ったほうがイロイロ楽だと思うんだがねえ。
977 :
969 :2008/05/30(金) 18:15:56
>>972 ,973
リンクの入れ子とかになっている場合に都合が悪かったので、
この方法はできませんでした。
>>974 ,975
なかなか厳しそうって事ですよね?
とりあえず、とりあえず正規表現1発で
処理するのは諦めました。
>>976 createRange()にて選択している部分のみを対象としているので、
パースでできなかったのですorz
結局、<aタグの開始と終了を別々に検索して、
切り出すことにしました。
皆様ありがとうございました。
順序関係なく1回ずつ現れる正規表現ってどう書けばよいのでしょうか 例えばA B Cの組み合わせで以下のパターンのみにマッチするような正規表現です A B C A C B B A C B C A C A B C B A
追記ですが、(A B C)|(A C B) | ... | (C B A)これよりもスマートなやり方はありますか
(A (B C|C B))|(B (C A|A C)|(C (A B|B A)))
こういうやり方もあるんですね、勉強になりました、ありがとう。
982 :
デフォルトの名無しさん :2008/06/01(日) 23:52:02
!!!!━(゚∀゚)━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━(゚∀゚)━!!!!
組み合わせが増えるととんでもない長さになるんだよな、これ……
なんでもかんでも正規表現でやるなってことだよ
985 :
デフォルトの名無しさん :
2008/06/02(月) 01:57:17 どうせ学校の宿題だろ。