正規表現 part4

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
2デフォルトの名無しさん:2007/08/02(木) 13:53:48
3デフォルトの名無しさん:2007/08/04(土) 07:00:21
なんか過疎ってるな。>>1 乙。
4デフォルトの名無しさん:2007/08/06(月) 12:01:26
保守
5デフォルトの名無しさん:2007/08/06(月) 18:53:14
今デジカメのデータをリネームソフト(Flexible Renamer)で編集しています。
正規表現で()の中の文字列と()を消したいのですが
全く知識がないので分かりません。
プリセットの(.*)\(\d+\)(.*)で数字は消せるようなのですが、、、
場違いなレベルなのは重々承知しておりますが
できればどなたかご教授よろしくお願いいたします。
6デフォルトの名無しさん:2007/08/06(月) 19:00:00
よくわからんが、その正規表現と似たもので括弧の中に数字以外も含めるってことなら

(.*)\([^)]+\)(.*)

でどうだろう。
7デフォルトの名無しさん:2007/08/06(月) 19:52:32
>>6
ありがとうございます!できました。
凄く便利なものなんですね。
これを機会に勉強してみようかな。
8デフォルトの名無しさん:2007/08/06(月) 20:38:01
しかし作ってるときは便利だけど、あとから見ると自分でも何やってんのかわかんないことあるよねw
9デフォルトの名無しさん:2007/08/10(金) 02:20:23
http://A\.jp/(*)\1/(*)\2 →http://A\.jp/image/\1/\2

http://A.jp/123/456http://A.jp/test/123/456
と変換可能ですか?
オミトロンを使用して変換させてるのですが、特定のHPで変換後
http://A.jp/test/test/test/・・・・・と永遠にループするような障害にあっています
正規表現は上の表現で合っていますか?
10デフォルトの名無しさん:2007/08/10(金) 02:21:53
11デフォルトの名無しさん:2007/08/10(金) 11:32:21
言語は何なの?
Perlだったら、s///gのオプションのgを指定しなければ繰り返さない。
PHPなら_Allが付いてる関数を使わない。
12デフォルトの名無しさん:2007/08/10(金) 12:30:41
オミトロンwikiによると正規表現(PerlやJavascriptなどで見られる物とは大分違う)と書いてありました
ちょっとそれ以外に自分では探せませんでした
オミトロンの方のスレで質問することだったのかもしれません
1312:2007/08/11(土) 01:38:05
正規表現を覚えたばかりの初心者なのでお許し下さい
@http://A\.jp/(*)\1/(*)\2 →Ahttp://A\.jp/test/\1/\2と変換したいのです
@に検索される文字列をAに変換するというのを目的にしています
Aがまた検索されるので/test/test・・・とループするのだと思います
1度だけしか検索に引っかからないような表現は無いでしょうか?

http://www.yahoo.co.jp/123/456 → http://www.yahoo.co.jp/test/123/456
14デフォルトの名無しさん:2007/08/11(土) 02:09:23
それは正規表現の問題じゃない
ループして適用されるのはオミトロンの事情では
ここで訊いても無駄
1512: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
あげます
18デフォルトの名無しさん:2007/08/14(火) 00:02:35
よくわからんけど、途中ドット入ってるじゃん。
エスケープしてみな
1916:2007/08/14(火) 00:15:17
>>18
thx
$pat のことですよね?エスケープって\マークを前に付ければいいですよね?
ドットにやってみたけど駄目でした。$と/にもやってみたけど駄目でした。
20デフォルトの名無しさん:2007/08/14(火) 00:23:36
じゃあ駄目だな
21デフォルトの名無しさん:2007/08/14(火) 01:09:29
うまく動いてるような。
やりたいこととがよくわからん。
22デフォルトの名無しさん:2007/08/14(火) 01:12:36
PHP知らんけど、文字列のエスケープと正規表現のエスケープをごっちゃにするなよ
2316: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 すみません・・
24デフォルトの名無しさん:2007/08/14(火) 01:34:18
何がしたいの
希望する結果を提示しなさいよ
25デフォルトの名無しさん:2007/08/14(火) 01:40:03
まさか…
http://yahoo.co.jp/">hello</a>
の、">hello</a>の部分のこと言ってる?
2616:2007/08/14(火) 01:44:58
>>24
文章にURLが含まれる場合、自動的にリンクにしたいのです。

>>25
そのまさかです
27デフォルトの名無しさん:2007/08/14(火) 01:50:28
htmlspecialcharsした後の文字列がどうなっているのか考えたほうがいい
2816:2007/08/14(火) 01:56:09
>>27
なるほど、ありがとうございました
29デフォルトの名無しさん:2007/08/14(火) 07:45:48
 全角文字に囲まれた半角空白を削除するにはどうしたらいいのでしょ」?
30デフォルトの名無しさん:2007/08/14(火) 11:12:40
s/\(全角文字\)(半角空白)+\(全角文字\)/\1\2/g
31デフォルトの名無しさん:2007/08/14(火) 12:40:33
こういう寒いレスする奴ってどこの土舐めながら生きてるんだろうね
32デフォルトの名無しさん:2007/08/14(火) 12:42:04
君が寒い
33デフォルトの名無しさん:2007/08/14(火) 12:47:08
何と言う即レス。地面ばかりでなくスレにまで張り付いてるとは。
34デフォルトの名無しさん:2007/08/14(火) 12:48:47
寒い寒い
35デフォルトの名無しさん:2007/08/14(火) 12:52:26
質問がなってないからじゃん? >>1 読んだ?
36デフォルトの名無しさん:2007/08/14(火) 12:53:47
あと文字コードもな。
37デフォルトの名無しさん:2007/08/14(火) 14:54:33
日本語が扱えない言語には、
日本語が理解できない人間が集まる。


このスレの事ですよ〜〜〜〜w
38デフォルトの名無しさん:2007/08/14(火) 15:23:35
痛いやつだな、万年夏休みなんだろうか
39デフォルトの名無しさん:2007/08/14(火) 15:31:05
     ∩___∩
  。  |   ノ    ヽ
  \<^i、 ●  ● |    もしもし、警察?
    |ヽ(⌒)、( _●_)  ミ    知的障害者がいるクマー
   彡/  ト、_>|∪|  、`\
   /ノ  /   ヽノ /´>  )
  (_/      / (_/
   |       /
40デフォルトの名無しさん:2007/08/15(水) 20:18:34
それだけでは警察は動かんよ
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じゃなくてもいいんですけど
4241:2007/08/16(木) 00:20:45
しまった、目的が書いてなかった。

「120〜129の行だけ抜き出す」です
43デフォルトの名無しさん:2007/08/16(木) 00:50:19
protocolsの書式おかしくない?
120〜129の行を抜き出すなら
grep "\b12[0-9]\b" /etc/protocols
でいいかと
44デフォルトの名無しさん:2007/08/16(木) 22:10:40
>>41
grep2回かけるに1票。
cat ほげ | grep "^12" |grep -v "^12 "
45デフォルトの名無しさん:2007/08/20(月) 18:49:44
perl5.8.6です。
複数の空白を1つのアンダーバーに置換したいのですが、どうすればよいでしょうか。
空白分のアンダーバーが表示されてしまいます。

あと、Regexp-Commonなるモジュールを今日知って驚いたのですが
ほかに便利だったモジュールがあったら教えてください。

あ・・・・それとRegexpってなんて発音するんでしょうか?excite辞書にはなかったです
46デフォルトの名無しさん:2007/08/20(月) 18:56:46
レゲーXP
47デフォルトの名無しさん:2007/08/20(月) 19:01:08
>>46
元がRegular Expressionなのにか?w
48デフォルトの名無しさん:2007/08/20(月) 19:03:13
>>45
s/\s+/_/g とか。

オライリーの「詳説正規表現 第2版」の p25 の脚注には、

> "regexp" というどう見ても不格好な略称も思いつくだろう。
> 筆者はこれをどう発音するのかわからないが、
> 舌足らずの話し方をする人なら抵抗なく発音できるのかもしれない。

とあり、その筋のひとでも読み方がわかんないと言っているくらいだから、
好きなように読めば良いんじゃないかな。
49デフォルトの名無しさん:2007/08/20(月) 19:13:58
>>45
perlは知らんが、s/ +/_/g かs/ */_/g 同様のことをすればいいだけだろ。
初歩中の初歩だ。
それから、日本語読みは「れぎゅらーえくすぷれっしょん」だな。
50デフォルトの名無しさん:2007/08/20(月) 19:14:52
たとえばURLの末尾が html? で終わってるかどうか
正規表現で判定するとして
 html?$ と
 \.html?$
ではどちらが高速なのでしょうか?
言語は C++ なのですが…
51デフォルトの名無しさん:2007/08/20(月) 19:21:00
>>50
速度の問題は、実測ありき。
52デフォルトの名無しさん:2007/08/20(月) 21:38:24
高速どうこういう以前に html?$ と \.html?$ は意味が違うと思うんだが・・・
53デフォルトの名無しさん:2007/08/20(月) 22:12:50
>>52
単純に末尾がhtmlまたはhtmで終わってるかの判断でラクをするか
拡張子ということで\.もちゃんと書くか、の違いのつもりです。
54デフォルトの名無しさん:2007/08/20(月) 22:17:50
\.html?$ の方が速いと予想。
開始文字が . だから、まず文字列中から . を検索するでしょ。
. は h よりも出現個数が少ないと思われる。
55デフォルトの名無しさん:2007/08/20(月) 22:29:41
>>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)
57デフォルトの名無しさん:2007/08/20(月) 23:30:31
Regex/RegExpは許せるがRegexpは許せないよな?
58デフォルトの名無しさん:2007/08/21(火) 00:11:46
レジイーエクスピーって読んでる。
ユーエスエーだし、アイエムイー。

こういう読み方って個人で色々あって面白いな。
59デフォルトの名無しさん:2007/08/21(火) 00:15:35
「れぐえくすぷ」って読んでた。
6048:2007/08/21(火) 01:15:56
同じく「詳説正規表現」には、
"regex" の "g" は "Regina" でなく "regular" の発音で、
"FedEX" と同じようなリズムで読むとある。
カタカナ読みだと「レゲックス」か「レグエックス」あたりが近いかな?

漏れは、 "regex" は「レジェックス」って読むけど、
"regexp" は「レグエックスピー」って読んでるな。
61デフォルトの名無しさん:2007/08/21(火) 02:16:25
レグェックスプ
62・∀・)っ-○◎●:2007/08/21(火) 04:32:36
ラジェックスp
63デフォルトの名無しさん:2007/08/21(火) 10:15:53
レグイーエックスピー。
このべた過ぎる読み方が多数派だと思う
6456:2007/08/21(火) 13:33:47
バカだなおまいら。わざわざ分かりやすくボケてやったら、真に受けやがって。

あのな、regexp (あるいは regex) はな、Regular Expression の略語なんだ。
略語にさ、必ず読み方があるとは思うなよ。

UFO ・・・ ユーフォー は、たまたま語呂がいいからそう読まれているだけで、
大多数は、
WGA ・・・ ダブル・ジー・エー (アルファベットそのまんま)
USA ・・・ ユー・エス・エー (同上)
IME ・・・ アイ・エム・イー (同上)
でいいんだよ。

よって、regexp は「レギュラエクスプレッション」でいいし、「せいきひょうげん」と読んでもいい。
65デフォルトの名無しさん:2007/08/21(火) 13:36:56
誰も56を相手にしていなかった件
66デフォルトの名無しさん:2007/08/21(火) 13:43:00
>>64
UFOはそもそもフライングソーサーの間違いだそうだw
それは兎も角、nativeは一文字ずつ発音しているね。
67デフォルトの名無しさん:2007/08/21(火) 13:50:19
いや一文字ずつ発音する人もそうでない人も両方いるよ
最近は日本の胡散臭い番組でもユーエフオーって言うようになってる
68デフォルトの名無しさん:2007/08/21(火) 14:05:58
ほぉ、Websterでは一字ずつの発音しか書いてなかった。
69デフォルトの名無しさん:2007/08/21(火) 14:11:30
原則的には 3文字未満は一字ずつ、 4文字以上は単語として読めるものはその読み方、
とおじいちゃんが言ってた。
70デフォルトの名無しさん:2007/08/21(火) 14:15:10
>>64
まずは、短縮形と acronym を一緒くたに語って、「よって、〜」と演繹するのをやめるところからはじめてみよう。
71デフォルトの名無しさん:2007/08/21(火) 14:23:04
<abbr><acronym>論争を髣髴とさせるなw
7245:2007/08/21(火) 14:27:55
あれ、なんか話がこじれてる・・・?

>>48
>>49
ありがとうございます。そう書いたつもりだったんですが、+のつけ忘れだったのかもしれません。


読み方は
>>63
のレグイーエックスピーが良いかと
73デフォルトの名無しさん:2007/08/21(火) 14:53:49
自分は心の中でレグエクスプと読んでます
74デフォルトの名無しさん:2007/08/21(火) 15:13:27
私は「れぎゅえくすぷ」だなぁ。
75デフォルトの名無しさん:2007/08/21(火) 16:09:08
Falseをフォルスと読むかファルスと読むかの違いみたいなもんだな。

俺はファリスのほうが好きだ
76デフォルトの名無しさん:2007/08/21(火) 16:09:47
それは違うだろ
77デフォルトの名無しさん:2007/08/21(火) 16:13:52
レグエキスプに一票
78デフォルトの名無しさん:2007/08/21(火) 16:14:09
ヌル、ニル、ナルの違いか
79デフォルトの名無しさん:2007/08/21(火) 16:24:57
>>75
それは、英語の発音を日本語でどう発音するか、という話しだと思うけど、
Regexp の場合はそもそも英語でどう発音するか決まってないのが問題と思われ。
80デフォルトの名無しさん:2007/08/21(火) 16:30:56
>>78
NULL、nil、NUL

と言う冗談はさておき、falseのalはallのalと同じ発音だから「ファルス」は無理があると思う。
81デフォルトの名無しさん:2007/08/21(火) 16:39:33
読み方ネタは盛り上がるねえ。
これからもネタがないときは定期的に投下することにしよう。
82デフォルトの名無しさん:2007/08/21(火) 16:41:55
おう 頼んだ
83デフォルトの名無しさん:2007/08/21(火) 18:46:52
>>66
フライングソーサーはUFOの一種ですよ。
それが何であるか識別できなければ鳥だってUFOです。

ユーフォーの呼び方を広めたのはピンクレディじゃなかろうかのう(じじいの繰り言)。
84デフォルトの名無しさん:2007/08/21(火) 18:54:43
>>64
関係ないけどトランプの柄にUSADAMONってのがあってずっとUSAダモンかと思ってたんだよ
そしたらウサダモンだってさ。ローマ字かよってすげえ突っ込みたかったね
85デフォルトの名無しさん:2007/08/21(火) 19:00:41
flying saucer=空飛ぶ受け皿
unidentified flying object=正体不明の飛行物体
86私ゃアシモフのシンパだで:2007/08/21(火) 21:55:40
>>83
確認できてしまった段階で、UFOではなくなってしまうわけでして。
87デフォルトの名無しさん:2007/08/22(水) 17:36:21
HTMLタグのアトリビュートの囲い文字「"」なり「'」を
全部削除する正規表現がわかりません。

PHPのpreg_replace()で使いたいのでperl互換正規表現で
何かしらの情報をいただければ幸いです。

失礼いたします。
88デフォルトの名無しさん:2007/08/22(水) 18:05:45
そういうのはHTMLパーサ使うべきじゃね
89デフォルトの名無しさん:2007/08/22(水) 20:40:13
$httdat = preg_replace('/"/', "", $httdat);
じゃなくって?
90デフォルトの名無しさん:2007/08/23(木) 00:25:37
$html = str_replace("'", "", $html);
$html = str_replace('"', '', $html);
とか・・・
91デフォルトの名無しさん:2007/08/23(木) 11:28:01
タグのなかの"だけ取りたいんじゃないの?
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>

正規表現とか、そういう以前の、プログラミングの基礎の問題な気がする。
93デフォルトの名無しさん:2007/08/23(木) 19:58:38
じゃ、タグをどうやって取り出すんだい?
>>88に戻る
94デフォルトの名無しさん:2007/08/23(木) 20:00:32
というより、正規表現一発ではできないというのが正解
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;
?>

ツッコミどころはあるかもしれないが、
わかりやすいコーディングを心がけたから、効率は二の次な。
あと、インデントに漢字の空白つかってるから、そのままコピペじゃ動かんよ。
どうもこの掲示板、コードを正しく貼り付けられないからプログラミングの話題には向かないなぁ。
96デフォルトの名無しさん:2007/08/23(木) 23:08:09
>>95
>>88でFAなのに、何故そんなコメントやCDATAにも対応してない穴だらけのコードを
撒き散らすのか
馬鹿はこれだから困る
97デフォルトの名無しさん:2007/08/23(木) 23:31:43
ようは扱いの簡単なHTMLパーサ(リーダー)があればいいのかな。
98デフォルトの名無しさん:2007/08/23(木) 23:42:21
>>88 それのどこが正規表現w
99デフォルトの名無しさん:2007/08/23(木) 23:44:28
Rubyスレでお勧めHTMLパーサ教えてって聞くとRegexpって答えが返ってきます

>>95
<img alt="hoge's image" ...でアウト
100デフォルトの名無しさん:2007/08/23(木) 23:46:01
attribute の引用符を外したい、という時点で一体何を考えてるのやら、と思ってしまった俺ガイル。
101デフォルトの名無しさん:2007/08/24(金) 00:33:01
ほらほら、また情報小出しが始まった。
102デフォルトの名無しさん:2007/08/24(金) 00:52:01
>>87はもういないだろ
103デフォルトの名無しさん:2007/08/24(金) 02:33:08
>>101 には何が見えているのだろうか?
104デフォルトの名無しさん:2007/08/24(金) 21:20:49
全角のタブってどうあらわすんですか?
105デフォルトの名無しさん:2007/08/24(金) 21:49:33
全角のタブって何だよ
106デフォルトの名無しさん:2007/08/24(金) 22:14:31
>>105
全角のタブはx-jisで定義されてる
http://pc8.2ch.net/test/read.cgi/hack/1141227510/
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;
?>
108デフォルトの名無しさん:2007/08/25(土) 00:31:43
>>106
初めて知った・・・
10999: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. 人を利用することしか頭にない
111デフォルトの名無しさん:2007/08/25(土) 11:29:59
糞コード張って悦に浸ってる馬鹿を煽ってるだけと気づけ
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
113デフォルトの名無しさん:2007/08/25(土) 12:00:04
糞コードは張ること自体が罪。いい経験になっただろ?
114デフォルトの名無しさん:2007/08/25(土) 12:23:19
浅はかな回答者の糞コードへのツッコミを、どうしても理解力の足らない
質問者の質問ということにしたいらしいねぇ
>>88より後は、全部無駄レスじゃん
115デフォルトの名無しさん:2007/08/25(土) 13:20:24
stickam.jp むてきんぐ
http://www.stickam.jp/profile/muteking
stickam.jp KGKGKG
http://www.stickam.jp/profile/kgkgkg
116デフォルトの名無しさん:2007/08/25(土) 14:07:57
>>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 とか考えてみたけどダメですた
118デフォルトの名無しさん:2007/08/26(日) 19:19:40
これでどう?
^(.*[^.])$
119デフォルトの名無しさん:2007/08/26(日) 19:21:22
>>117
やる気あるのか?
バカは諦めなさい。
120デフォルトの名無しさん:2007/08/26(日) 19:34:09
>>117
↓スマートじゃないけど。

検索文字列:
\.\f\n.*[^.]\n\f
置換文字列:
.\n\1\n
121デフォルトの名無しさん:2007/08/26(日) 19:43:28
>>120
サンクス
ばっちりでした

>>118
なんか秀丸って行頭行末をまたぐときとかって、$^とかうまく反応して
くれないんですよね >>120でいけました 118もありがとう

122118:2007/08/26(日) 19:51:27
自分のは完全な誤答だったよ(´・ω・`)出直してきます
123デフォルトの名無しさん:2007/08/26(日) 20:00:21
> ^(.*[^.])$
顔文字っぽく見える
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」
と、正しく書くこと。




127デフォルトの名無しさん:2007/08/27(月) 13:30:30
正則表現とでも呼んでおけ
128デフォルトの名無しさん:2007/08/27(月) 15:40:01
129125:2007/08/27(月) 16:15:47
>>128
ありがとうございました。
130デフォルトの名無しさん:2007/08/28(火) 17:24:44
javascriptかperlなのですが
(fire|fighter|future|fusion) と (fi(re|ghter)|fu(ture|sion))
のような場合はどちらが高速でしょうか?
13187:2007/08/28(火) 18:21:10
87です。
こちらを見に来るのをすっかり忘れてしまっておりました!
大変申し訳ございませんでした。

>>88
HTMLパーサを使うほうが良いとのご忠言、ありがとうございます。
その方向も模索させていただきます。

>>89,90様
>>91様のご指摘通り、HTMLタグのアトリビュートの"'のみを外したいと
考えておりました

>>92,95様
具体的なサンプルまで作成頂きまことにありがとうございます。
なるべく正規表現のみで実現できないかを模索しておりましたので、
その方法を選択肢から排除しておりました。申し訳ございません。

>>94
なるほど、やはり正規表現の1発処理は諦めたほうが良いのですね。

>>97
大賛成です。

>>100
良いか悪いかは別としまして、モバイルサイトで出力されるHTMLを極力
シェイプアップさせるべく、アトリビュートの囲み文字を一括ではずす
ことがしたかったのです。

>>102
失礼しました。確かにおっしゃる通りです。申し訳ございません。

132デフォルトの名無しさん:2007/08/28(火) 18:26:41
やる気のないやつにはろくな回答が返ってこんわな
133デフォルトの名無しさん:2007/08/29(水) 13:44:15
>>130
>(fire|fighter|future|fusion)
こんなことするんだったら連想配列つかえよw
134デフォルトの名無しさん:2007/08/29(水) 21:49:22
>>130
っ Benchmark
135デフォルトの名無しさん:2007/08/30(木) 01:14:58
質問させてください。
「X=\\\\\\\\ho\\,ge\\\\」を
「X=\\ho,ge」にするにはどうすればよいでしょうか?
具体的には「\\\\」を「\」一文字に、「\\,」の場合はカンマのみにしたいのです。
\\{2,4} なんかを思いついて弄ってみたんですが、さっぱりでして……
136デフォルトの名無しさん:2007/08/30(木) 01:19:53
単に \\, を , に置換してから、
\\\\ を \ に置換すればいいんでない?
137デフォルトの名無しさん:2007/08/30(木) 22:17:04
正規表現で000000〜ffffffまでかどうかチェックできる表現教えてちょ
138デフォルトの名無しさん:2007/08/30(木) 22:19:52
[0-9a-fA-F]{6}
でいいかな
139デフォルトの名無しさん:2007/08/30(木) 23:44:00
>>137のルールに加えて、左に0はいくらつんでもOKの書式を許す、
純粋にffffffまでの数字かどうかはこれでいけるかな?

(?<![0-9a-f])0*[0-9a-f]{6}(?![0-9a-f])
140デフォルトの名無しさん:2007/08/31(金) 07:18:58
>>139
6桁というのはチェックしたいです。
141デフォルトの名無しさん:2007/08/31(金) 11:13:52
オライリーの詳説・正規表現に載っていたHTMLのパターンを
否定(訂正)していたのを別のオライリーの本で見かけたんだけど
タイトルを忘れてしまいまして
どなたかご存じないでしょうか?
142デフォルトの名無しさん:2007/09/02(日) 01:16:22
文字列 Aと文字列 Bを両方含んでいて順序もA→Bになっている文字列にマッチする
正規表現を教えてください。

AiiiiiiiiB にはマッチして欲しい
BiiiiiiiiA にはマッチして欲しくない
143デフォルトの名無しさん:2007/09/02(日) 02:06:35
A.*B で何か問題が?
144デフォルトの名無しさん:2007/09/02(日) 08:37:32
>>142
AiBiAiB
BiAiBiA
は、マッチするの、しないの?
145デフォルトの名無しさん:2007/09/02(日) 18:40:31
Berryの設定で正規表現を使いたいのですが
「list.php?table=moe&page=1」の最後の値が1〜9999まで
マッチするような正規表現を教えていただけませんか?

正規表現むずかしい><
146デフォルトの名無しさん:2007/09/02(日) 19:03:51
list\.php\?table=moe&page=([1-9][0-9]{0,3})$
適当
147デフォルトの名無しさん:2007/09/02(日) 19:12:57
>>146
うわーどうもありがとう。
正規表現って便利そうだけど難しくてなかなか^^;
148デフォルトの名無しさん:2007/09/05(水) 18:31:09
VBSで正規表現を使ってます。
URLの相対パスを正規表現でマッチさせようとしているのですが
「../」と「./」の区別が付きません。どのようにして区別させたらよいのでしょうか?
149デフォルトの名無しさん:2007/09/05(水) 18:54:01
どっちも相対パスだと思うが
150デフォルトの名無しさん:2007/09/05(水) 18:58:25
説明が悪くて申し訳ないです

例えば「../././abc.html」の様なURLがあったとして
「./」のをマッチさせるのに「\./」とすると「../」にもマッチしてしまうので
「./」だけにマッチさせるにはどうしたらいいのかな?と思いまして…
151デフォルトの名無しさん:2007/09/05(水) 19:16:23
(/|^)\./
152デフォルトの名無しさん:2007/09/05(水) 19:22:56
ありがとうございます。できました!
時間を取ってそのパターンの意味を調べさせてもらいます
153デフォルトの名無しさん:2007/09/06(木) 17:40:38
顔文字に見えてしょうがねえ
154デフォルトの名無しさん:2007/09/09(日) 00:58:20
正規表現があるという事は偽物表現もあるということに他ならないわけですが
どこさありますか。
155デフォルトの名無しさん:2007/09/09(日) 01:03:36
irregular expression?
156デフォルトの名無しさん:2007/09/13(木) 10:45:48
文字列が全て0かどうかは
^0+*
でよいでしょうか?
157デフォルトの名無しさん:2007/09/13(木) 11:45:24
^0+$ じゃないのかな
158デフォルトの名無しさん:2007/09/13(木) 11:59:33
>>157
ありがとうございます!
159デフォルトの名無しさん:2007/09/14(金) 11:40:36
スレタイに●が三つ以上入ってるスレを消したいたいんだが
全然消えない…この式じゃ間違ってる?

●{1}.*●{1}.*●{1}

ちなみに消したいのはこのスレ
ttp://pc11.2ch.net/test/read.cgi/jisaku/1189612206/
160デフォルトの名無しさん:2007/09/14(金) 11:44:31
{1}って入れる意味あるのか?
161デフォルトの名無しさん:2007/09/14(金) 12:05:29
てか正規表現で●って使えないっぽいな…
グーグルでも●の検索結果ゼロだしどうしたものやら
162デフォルトの名無しさん:2007/09/14(金) 12:25:52
そんなバナナ
163デフォルトの名無しさん:2007/09/14(金) 13:34:57
>>159
前方一致ならそれでもいいはずだが、完全一致なら最後にもう一組 ".*" が必要。
164デフォルトの名無しさん:2007/09/14(金) 14:21:58
>>161
使えるかどうかは、ライブラリおよび環境設定による。
165デフォルトの名無しさん:2007/09/14(金) 18:54:07
やっぱり●*ですら反応しないな…レスサンクス
ブラウザのほうのスレで聞いて来るわ
>159は撤回ってことで
166デフォルトの名無しさん:2007/09/14(金) 19:25:12
.*●.*●.*●.*
こうじゃねーの
167デフォルトの名無しさん:2007/09/14(金) 22:07:35
>>6
格好悪い顔文字作るなハゲ
168デフォルトの名無しさん:2007/09/15(土) 08:05:30
(●.*){3,}
とかでいいんじゃないすか(^ω^;)
169デフォルトの名無しさん:2007/09/16(日) 00:30:09
(.*●.*){3,}

ちょっとかわゆい
170デフォルトの名無しさん:2007/09/17(月) 08:47:49
Perlで、Cのコメント除去プログラム
$text = join ('',<>);
$text = ~S
{
(".*?")|(/\*(.|\n)*?\*/)|(//[^\n]*)
}{$1}gx;
print $text;
171デフォルトの名無しさん:2007/09/17(月) 13:04:12
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++;
}
172デフォルトの名無しさん:2007/09/17(月) 17:53:23
/(?<=\s)([0-9]{4})([^0-9a-z]?)/
なんとなーくという感じになってきたんですが…、もう少し何かorz
173デフォルトの名無しさん:2007/09/17(月) 22:49:11
解決しました !
/\b[0-9]{4}\b/ //4ケタの数字にマッチ
でいけますた、スレ汚しスマソ。
174デフォルトの名無しさん:2007/09/23(日) 23:22:56
JaneViewのNGExで悩んでいるのですが
 A A B
 A B A


 東京 埼玉 東京
 埼玉 東京 埼玉
 埼玉 千葉 埼玉
のように


((仙台|東京|名古屋).*大阪.*\2)|((仙台|東京|大阪).*名古屋.*\4)

175デフォルトの名無しさん:2007/09/23(日) 23:37:37
すみません書きかけで送信してしまいました。

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)
といった感じでやっています。
リストの要素が少なければ | でつないでいけばいいのですが、リストが多いととんでもない状態になりますよね。
どうすればこれをもっとスマートな表記にできるでしょうか?
176デフォルトの名無しさん:2007/09/27(木) 21:16:09
(A|B|C|D)\s+((?!\1).)+\s+\1

とか?俺のJaneではヒットした。・・・一体何に使うのか気になる。
177デフォルトの名無しさん:2007/09/27(木) 23:38:11
ありがとうございます。
(?!\1)でできました。

アニメサロンの延長情報確定スレに貼られている表で
邪魔な表を貼り付けられるのをあぼーんしたかったんだ。
178デフォルトの名無しさん:2007/09/28(金) 11:42:54
正規表現で比較関数のようなことはできますか?
179デフォルトの名無しさん:2007/09/28(金) 11:45:35
もっと具体的に
180デフォルトの名無しさん:2007/10/03(水) 18:17:05
具体的に書いたらオマエが答えられるのかよ
181デフォルトの名無しさん:2007/10/03(水) 18:39:11
答えられるか答えられないか具体的に判断できる
182デフォルトの名無しさん:2007/10/03(水) 19:52:07
メーリングリスト等にもよくあるよね
内容が分かる程度に端折って書くと
「質問の仕方をしらない」等の苦情

具体的且つ詳細に書くと答えられないくせにw
183デフォルトの名無しさん:2007/10/03(水) 22:13:05
こういう珍獣ってリアルにはいないんだよなぁ。
184デフォルトの名無しさん:2007/10/03(水) 22:21:48
>>178=180=182
五日経っても回答得られなかった現実をきちんと見据えて、
いい加減諦めて「もっと具体的に」書いた方が良いのでは?
185デフォルトの名無しさん:2007/10/03(水) 22:57:50
ん・・・全く意味が分からんからね。
186デフォルトの名無しさん:2007/10/03(水) 23:54:49
こういう質問には「できません」と答えるのが大人のマナー。
187デフォルトの名無しさん:2007/10/04(木) 00:25:03
>>184
もっと具体的に
188デフォルトの名無しさん:2007/10/04(木) 02:24:11
もっと愚怠的に
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/に置き換えるにはどうしたらいい?
いろいろ試してみたが俺のレベルじゃどうにもならんかった
191デフォルトの名無しさん:2007/10/05(金) 01:29:35
preg_replace('/¥/([^¥/]+)$/', "/backup/$1", "/sample/test/14567.jpg");
192デフォルトの名無しさん:2007/10/05(金) 16:25:45
知ったかぶり
193デフォルトの名無しさん:2007/10/05(金) 22:30:53
>>190
pathinfo使えば?
194デフォルトの名無しさん:2007/10/06(土) 10:35:59
余計なお世話
195デフォルトの名無しさん:2007/10/06(土) 22:47:06
珍獣増えすぎwwwwwwwwwテラカオスwwwwwwww
196デフォルトの名無しさん:2007/10/06(土) 23:56:30
[あはばば, ばばばば], あばばばば, あば, [あばばば, ば, ばばばばはば, ばば]

というような文字列があったとき、

[あはばば, ばばばば]
あばばばば
あば
[あばばば, ば, ばばばばはば, ばば]

と分割したいのですが、どのようにしたらいいでしょうか?
(\\[?.*\\]?),とかやってみたのですが全然だめでした orz
なかのあばば〜は変化します。
197デフォルトの名無しさん:2007/10/06(土) 23:57:28
>>196
まずは >>1 を見てみて。
198デフォルトの名無しさん:2007/10/07(日) 00:00:39
>>197
すいません、.NETのSystem.Text.RegularExpressionsのRegex.Split()で置換しています。
199デフォルトの名無しさん:2007/10/07(日) 00:10:25
>>198
すいません、置換じゃなくて分割でした orz
200デフォルトの名無しさん:2007/10/07(日) 01:56:00
>>196
まず、[あば,ばばば] を うんこっこー に痴漢する
(うんこっこー に痴漢した文字列は堆肥しておく)

うんこっこー, あばばばば, あば, うんこっこー
となるので、これを分割する。そのあと、
うんこっこー を堆肥しておいた文字列に戻す。
201デフォルトの名無しさん:2007/10/07(日) 04:37:56
逆に、 "," をうんこっこーに置換しても良いかもね。
Perl ですまんけどこんな感じで。

$str =~ s/(\[[^]]+\]|[^,]+)(?:(,\s*)|$)/\1うんこっこー/g;
$ary = split(/うんこっこー/, $str);
202デフォルトの名無しさん:2007/10/07(日) 12:19:13
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//;
204デフォルトの名無しさん:2007/10/07(日) 13:19:38
ちゃんと動くんなら、自分の能力で到達可能な範囲のプログラムで十分だと思うよ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)ともうまくいきますが、

ウソつけ!
208202: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 = '/涼子|愛|美姫/';
ですが、涼子、愛、美姫以外を検知するにはどう書いたらいいですか?
210デフォルトの名無しさん:2007/10/07(日) 20:13:06
そのパターンにマッチしないことを確認すればよい。
211209:2007/10/07(日) 20:21:07
>>210
すみません。
涼子、愛、美姫以外を含む文字列です。

たとえば、涼子愛子美紀が来たばあい、
「子」が紛れ込んでることを検知したいのですが。
212209:2007/10/07(日) 20:36:57
>>211
'/^涼子|^愛|^美姫/';
213209:2007/10/07(日) 20:38:53
>>212
すみません。途中でした。
'/^涼子|^愛|^美姫/';
だと涼子、愛、美紀も全部ひっかかってしまいます。
それだけを含んで、それ以外の文字列を全然含まないようにしたいのですが。
214デフォルトの名無しさん:2007/10/07(日) 20:55:01
同じくphp5のpreg_matchですが、
半角または全角の数字から始まるはどう書きますか?
215デフォルトの名無しさん:2007/10/07(日) 21:39:55
>>213
/^(?:涼子|愛|美姫)*$/ とか?
216デフォルトの名無しさん:2007/10/07(日) 21:40:46
>>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
>>215-216
ありがとうございました。

>>217
氏ね!
219デフォルトの名無しさん:2007/10/08(月) 17:38:51
NFAを機械的にDFAに変換する方法を教えてください。
220デフォルトの名無しさん:2007/10/08(月) 20:14:07
そんなもん無い!


って答えでFA?
Aho-Corasick改とかでいいと思うが。
222デフォルトの名無しさん:2007/10/25(木) 17:50:49
phpなんですが、http://*.example.*/にマッチさせたいと思ってます
2つめの*の部分で、comやjp等にマッチさせたいのですが、
http:\/\/(.+\.)?example\..+/では、
http://www.example.hoge.com/なんかもマッチしてしまいます
http:\/\/(+\.)?example\.(com|jp)/とかにすると、
新しいドメインがでてきたときに対応できません。
何かよい方法ありませんでしょうか?
223デフォルトの名無しさん:2007/10/25(木) 18:33:14
>>222
「新しいドメイン」ってのはどんなところまでを想定してる?
224デフォルトの名無しさん:2007/10/25(木) 18:49:54
簡易なのでよければ \..+ じゃなくて \.[^/.]+ にするとか
225デフォルトの名無しさん:2007/10/25(木) 19:51:52
http:\/\/(+\.)?example\.[^.]+\/
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/
228デフォルトの名無しさん:2007/11/08(木) 05:41:48
>>227
正規表現で一気に行うんじゃなくて、
"/" で分割して、各パーツがドットだけで構成されていたらハネる、とか
(ディレクトリトラバーサル対策ならよく調べたほうがいいかも)
229デフォルトの名無しさん:2007/11/08(木) 08:45:57
ありがとうございます。
xmlのxsd:patternで書きたかったのですが、だめそうです。考え直してみます。
230デフォルトの名無しさん:2007/11/08(木) 13:40:57
>>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
ぐ・ぐ・れ
234デフォルトの名無しさん:2007/11/11(日) 23:47:19
うん、ググれば全て解決するからこのスレ潰すべきだね。
235デフォルトの名無しさん:2007/11/11(日) 23:52:31
aho
236デフォルトの名無しさん:2007/11/12(月) 00:15:22
ワロタwwwwwww
237デフォルトの名無しさん:2007/11/12(月) 01:18:32
いや、ググって該当するページを見たんですけど、正規表現の構成の仕方がわからなくて、
ここに書き込みました。
調べるだけ調べたんですけど、やはりだめでしょうか
238デフォルトの名無しさん:2007/11/12(月) 01:42:05
だめです
239デフォルトの名無しさん:2007/11/12(月) 04:32:21
なんだこいつら 本当はできないんじゃねーの?
240デフォルトの名無しさん:2007/11/12(月) 09:32:04
>>239
お、やっと気づいたようだね。それじゃあバイバーイ!
241デフォルトの名無しさん:2007/11/12(月) 19:50:58
質問です。正規表現でconsumeするというのは日本語でいうとどういうことですか?
242デフォルトの名無しさん:2007/11/12(月) 19:59:53
文字を消費するということ。
243241:2007/11/12(月) 21:10:47
>>242
ありがとうございます。「文字を消費する」とはどういうことでしょうか?
イメージが湧きません。
244デフォルトの名無しさん:2007/11/12(月) 22:24:56
正規表現 /..c/ を "abc" にマッチさせたときを考えると、
最初の /./ は "a" にマッチして消費する。
すると、なんと言うかテキストエディタのカーソルが一つ進むのをイメージしてくれたらよいか、
二個目の /./ が "b" にマッチできるようになる。
245デフォルトの名無しさん:2007/11/12(月) 22:30:07
テキストエディタの ed ってのが元になってるからね。
カーソルって例えはナイス!
246241:2007/11/12(月) 23:16:33
>>244
なるほど、よくわかりました。ありがとうございます。
247デフォルトの名無しさん:2007/11/15(木) 07:57:08
おはようございます。このスレの過去ログってネットにありますか?
248デフォルトの名無しさん:2007/11/15(木) 16:55:18
あります。
249デフォルトの名無しさん:2007/11/15(木) 20:14:33
アキュムレータの0ビット目って左端?それとも右端?
250デフォルトの名無しさん:2007/11/16(金) 00:58:31
>>249
スレ違い。
251デフォルトの名無しさん:2007/11/16(金) 23:29:30
>>249
252デフォルトの名無しさん:2007/11/17(土) 01:06:19
perl互換のFlexible Renamerで置換したいのですが。
(hoge)hoge(hoge).txtを(hoge) hoge(hoge).txtとしたい場合はどう書けばいいのでしょうか。
)の直後にスペースを入れ、拡張子前の)の直後には入れたくないんです。
253デフォルトの名無しさん:2007/11/17(土) 01:30:29
")" -> ") "
" ." -> "."
254デフォルトの名無しさん:2007/11/17(土) 01:34:08
>>253
なるほど。2回やるという手が・・・。ありがとうございました。
255デフォルトの名無しさん:2007/11/17(土) 09:27:48
リネーマの仕様によるけど、Perl互換なら
"^(\([^)]*\))" -> "$1 "
"^(\([^)]*\))(.*)" -> "$1 $2"
とか。いずれにしても調整が必要
256デフォルトの名無しさん:2007/11/18(日) 19:15:56
vb.netで
「// xxxxx EXEC 〜」で始まり、
「// xxxxx EXEC 〜」で始まる1行前までを
1グループで取得したいと考えています

(?ims:(^\/\/+\s+EXEC+.+))
だとまるまる取得してしまうのはわかるのですが、
これを上記の様に取得するにはどう書けばよいのでしょうか?

ご教授よろしくお願いいたします。
257デフォルトの名無しさん:2007/11/18(日) 20:18:03
split
258デフォルトの名無しさん:2007/11/19(月) 02:39:09
>>256
なんでスラッシュをエスケープしてんだよw

.NET の正規表現なら可変長の戻り読みが使えたと思うから、
その始まりのしるしと終端のしるしを戻り読みの部分と先読みの部分に置けば?

.NETで可変長の戻り読みができなかったらすまんw
259デフォルトの名無しさん:2007/11/22(木) 22:35:09
数値比較をしたいのですが、0x021a4 っていくつなのでしょうか?
260デフォルトの名無しさん:2007/11/22(木) 23:13:20
2 * 16^3 + 1 * 16^2 + 10 * 16^1 + 4 * 16^0
261デフォルトの名無しさん:2007/11/22(木) 23:17:32
>>259
電卓開く

関数電卓モードにする

16進モードにする

21a4と打つ

10進モードにする

正規表現の話じゃねーし
262デフォルトの名無しさん:2007/11/23(金) 01:54:14
263デフォルトの名無しさん:2007/11/23(金) 01:58:02
264デフォルトの名無しさん:2007/11/23(金) 02:44:38
16進数知らないプログラマがいるのか・・・時代は変わったな。
265デフォルトの名無しさん:2007/11/23(金) 02:46:28
プログラマじゃないから
266デフォルトの名無しさん:2007/11/23(金) 08:04:03
具体的には秀丸エディタで置換を行いたいのですが、こうするには…
--------------
[12:34:56] 発言者1:
文章2
文章3
[12:34:56] 発言者2:
文章4



[12:34:56] 発言者1:
文章2
文章3

[12:34:56] 発言者2:
文章4

--------------
どうしたら良いのでしょうか?(文章の中に [ ] が含まれる可能性は無いものとして単純に)
\n[ と記述すると、正規表現の括弧の対応が合ってないとか怒られてしまいます。

非常に初心者な質問ですいません。
267デフォルトの名無しさん:2007/11/23(金) 09:26:00
エスケープ
268デフォルトの名無しさん:2007/11/23(金) 11:43:08
regexre
FrameworkFrame

などといったような「同じ文字列とそれに挟まれた別な文字列」を取り出したいのですが、
どういう文を書いたら実現できますか?
PHPのpreg_replaceで使用します。
よろしくお願いします。
269デフォルトの名無しさん:2007/11/23(金) 12:00:17
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);
270デフォルトの名無しさん:2007/11/23(金) 12:50:33
Ruby なら (.+)(.+)\1 で $2 を取ればいけるけど、
PHP でいけるかどうかは知らん
271デフォルトの名無しさん:2007/11/23(金) 12:53:54
>>269
日本語読解力に大きく欠けますな
272デフォルトの名無しさん:2007/11/23(金) 13:00:21
eregexreならrが取れるはずだからつかいものになるのか?
273デフォルトの名無しさん:2007/11/23(金) 13:05:34
eregexre なら regexr が取れる。
最長一致だから。
これが目的の物かはともかくとして。
274デフォルトの名無しさん:2007/11/23(金) 13:51:50
>>269
すみません、説明不足でした。
同じ文字列というのも未知なのです。

>>270.
ありがとうございます。
Rubyならいける、というのは期待が持てました。
早速調べてみます。

>>272-273
ここも説明不足でした。
「同じ文字列とそれに挟まれた別な文字列」の全てを取得したいです。
つまりThisIsThePenという文字列からThisIsTh(とePe)を取得できるようにしたいのです。
275デフォルトの名無しさん:2007/11/23(金) 13:56:24
sIs は要らないの?
276デフォルトの名無しさん:2007/11/23(金) 14:00:51
sIs が必要ないならとりあえず Ruby ではこうなる。
PHP でいk(ry

'ThisIsThePen'.scan(/((.+).+\2)/) { puts($1) }
277デフォルトの名無しさん:2007/11/23(金) 19:31:22
文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出すことができますが、 文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。
278デフォルトの名無しさん:2007/11/23(金) 19:42:51
日本語でおk
279デフォルトの名無しさん:2007/11/23(金) 19:46:56
\{([^\}]+)\}
280デフォルトの名無しさん:2007/11/24(土) 08:40:39
ありがとう。
すごいね
正規表現分かる人尊敬するわ
281デフォルトの名無しさん:2007/11/24(土) 09:46:49
別に大した事じゃない。
すげーとか思って思考停止してるから理解できないだけ。
282デフォルトの名無しさん:2007/11/24(土) 09:48:41
分かりました。
私も頑張って勉強します
283デフォルトの名無しさん:2007/11/24(土) 10:09:17
よし! その意気だ!
284デフォルトの名無しさん:2007/11/24(土) 11:18:23
ホモビデオからお前ら。
285デフォルトの名無しさん:2007/11/25(日) 17:53:21
なんでホモなの?
私は女性です
286デフォルトの名無しさん:2007/11/25(日) 19:20:34
性同一性障害か
287デフォルトの名無しさん:2007/11/25(日) 20:30:25
性器表現
288デフォルトの名無しさん:2007/11/25(日) 20:32:19
モザイクのことか
289デフォルトの名無しさん:2007/11/26(月) 00:01:46
>>285
ホモセクシュアルは同性愛って意味だよ
当然、女性同士でも使う
290デフォルトの名無しさん:2007/11/26(月) 12:46:15
ここにいる奴らは全員例外なくホモ



















サピエンス
291デフォルトの名無しさん:2007/11/26(月) 15:19:45
ホモ牛乳という名前にはかなりインパクトがあると思うんだ
292デフォルトの名無しさん:2007/11/26(月) 15:26:00
「ホモゲナイズド牛乳」じゃ長すぎるべ。
293デフォルトの名無しさん:2007/11/26(月) 18:38:03
ホモジニアス・マルチコアを略してホモコア呼べ
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のコメントを取得するにはどうしたら良いでしょうか?
<!--[^-->]*-->
で試したのですが[^-->]だと各文字を含まないとなってしまうのでだめでした。
文字列を含まないって表現方法がわかりません。
お手数ですがよろしくお願いします。
298デフォルトの名無しさん:2007/11/29(木) 18:01:50
>>297
貪欲でないマッチ
299デフォルトの名無しさん:2007/11/29(木) 18:35:11
>>297
html パーサ使え
300297:2007/11/29(木) 19:51:50
>>298
ありがとうございます。
貪欲でないマッチでググッた所無事解決しました。

>>299
プログラム内で使いたかったので、
パーサを使うとhtml記述ミスなどがあった場合に面倒なので正規表現を使う事にしました。
301デフォルトの名無しさん:2007/11/29(木) 23:53:17
>>299
アホ
302デフォルトの名無しさん:2007/12/02(日) 03:37:22
bregexp.dllを使って
<th>ほげほげ<br/>ほげほげ</th>
のような<th>で囲まれた内部の<br/>だけ削除したいのですが、
<br/>の数が不定で困ってます。どう書けばよいのでしょう?
303デフォルトの名無しさん:2007/12/02(日) 17:04:43
>>302
html パーサ使え
304デフォルトの名無しさん:2007/12/03(月) 18:49:06
正規表現でand検索したいのですが
どのようにすればいいのですか?
正規表現: Win.*Mac.*Linux.*Sun
上記のようにやると、順番が固定されてしまいます。
どのような順番でもいいので4つ入っていれば
ヒットさせたいのです。
305デフォルトの名無しさん:2007/12/03(月) 19:19:07
>>304
肯定戻り読み
306デフォルトの名無しさん:2007/12/03(月) 21:22:52
(?=.*Win)(?=.*Mac)(?=.*Linux)(?=.*Sun).*
307デフォルトの名無しさん:2007/12/03(月) 23:37:29
NHKのFMの番組の曲の時間表示(全角の数字と '分'と'秒'から成る文字列で
末尾は必ず '秒' )を一気に半角数字と「分⇒m」「秒⇒s」のように一気に置換
する方法がありますか? 全角数字でも '2007年' のような文字列はそのま
まにしたいのです。
【例】
'6分08秒' ⇒ 6m08s
308デフォルトの名無しさん:2007/12/04(火) 00:20:03
tr/時分秒/hms/
309デフォルトの名無しさん:2007/12/04(火) 09:06:00
>全角数字でも '2007年' のような文字列はそのままにしたい

のなら

>【例】
>'6分08秒' ⇒ 6m08s



'6分08秒' ⇒ 6m08s

ならないといけないの?

それとも【例】のようにして欲しいの?
310デフォルトの名無しさん:2007/12/04(火) 21:11:44
正規表現処理系一般の話なら文字変換はダメだなあ
311デフォルトの名無しさん:2007/12/04(火) 21:38:52
tr/時分秒[0-9]/hms[0-9]/
312デフォルトの名無しさん:2007/12/04(火) 21:39:27
trはスレ違いだろ
313デフォルトの名無しさん:2007/12/05(水) 00:33:46
>>309は日本語が読めないのだろうか?
314デフォルトの名無しさん:2007/12/05(水) 18:08:23
>>305-306 できました。ありがとうございます。
315デフォルトの名無しさん:2007/12/05(水) 19:45:45
URL が多数含まれる文章があるとき、その URL にマッチさせる正規表現を知りたいです。
マッチさせるのは “http://〜/” の部分で充分でして、それだけなら http:\/\/[^\/]+\/ でイケそうです。
ただ今回やりたいのは、特定のドメイン(というかサーバ)の URL はマッチさせない、ということです。
たとえば http://www.google.co.jp/ にはマッチさせたくない、ということです。
これはどんな書き方になるでしょうか?
Perl な正規表現だと具合いいです。
316デフォルトの名無しさん:2007/12/06(木) 06:31:42
>315

>2
317デフォルトの名無しさん:2007/12/07(金) 07:08:24
フリーでとにかく早いのってどれ?
秀丸のやつ?鬼車?
318デフォルトの名無しさん:2007/12/07(金) 23:18:36
秀丸は速くない。
319デフォルトの名無しさん:2007/12/08(土) 14:11:45
>>317
秀丸のは確かに速い

速いけど、他で出来て秀丸で出来ない表現が多いし
それを無理やり秀丸で表現すると結局遅くなることも多い
320デフォルトの名無しさん:2007/12/08(土) 23:27:27
[0-1]?[0-9]
これで2桁目に0か1が付くか付かないか
という表現になりますか?
321デフォルトの名無しさん:2007/12/08(土) 23:32:07
日本語でおk
それだと、0〜9 と 00〜19 にマッチ
322デフォルトの名無しさん:2007/12/08(土) 23:38:08
すみませんここで聞いて良い事なのか解らないのですが、よければお教えください。
C/Migemo 1.2 リリース版 for Windowsに付属の辞書を読み込ませhoをmigemo_queryしてみたことろ
([ホ☆★ほ逋捕縫豊B萠萌]|ho|Ho)と、なぜかBが含まれた文字列がかえってきました。
この文字列を利用して検索をすると当たり前ながらBに反応してしまうのです。
そこで質問なのですが、どうしてBが含まれるのでしょうか?
もしかして私の使い方が間違っているのでしょうか?
323320:2007/12/09(日) 00:14:35
>>321
すいません、それが言いたかった
ありがとう
324デフォルトの名無しさん:2007/12/09(日) 00:33:23
>>323
「すみません」だろ
日本から出て行けよ
325デフォルトの名無しさん:2007/12/09(日) 00:50:18
こらこら
326デフォルトの名無しさん:2007/12/09(日) 01:08:50
>>322
完全にスレ違いな気がするが、どこが適切か知らないので一応答えておくと、
ホウ素の元素記号がBだから。他にはsaで酸素のOが引っかかったりするはず。
327デフォルトの名無しさん:2007/12/09(日) 01:41:55
>>326
おおおおおおお!
なるほど…
おかげで謎が解けました
ありがとうございました。
328デフォルトの名無しさん:2007/12/18(火) 00:38:45
ひゃ[あぁ゛]*うまひ[いぃ゛]*
329デフォルトの名無しさん:2007/12/18(火) 01:09:55
ひゃうまひ゛
330デフォルトの名無しさん:2007/12/18(火) 04:59:57
ひゃ゛゛゛゛゛うまひ゛゛゛゛゛゛゛
331デフォルトの名無しさん:2007/12/18(火) 12:24:04
/image/[00-31]_[00-1f].jpg
     ↑00〜31↑00〜1f(16進数)
正規表現でこのように設定したいのですがうまくいきません。

/image/(00_00、01_01・・・10_0a・・・31_1f)
こういったものを書きたいのですが可能でしょうか?
332デフォルトの名無しさん:2007/12/18(火) 12:29:21
>>331
[] は一文字にしかマッチしないのでー。
正規表現はふつうは数値の範囲は指定できないのでー。

([0-2][0-9a-f]|30|31)_[01][0-9a-f]\.jpg
333デフォルトの名無しさん:2007/12/18(火) 13:19:37
>>331
もしかして、 10進部分と 16進部分を対応させたいと思ってる?
それだと正規表現だけでは簡単に書けないと思う。
334デフォルトの名無しさん:2008/01/05(土) 11:31:41
日本語の話しになってしまいますが、質問させてください。

>検索対象に正規表現が一致した場合

>検索対象が正規表現に一致した場合
どっちが正しいのでしょう?

前者が正しいような気がするのですが、よく判らなくなってきました
335デフォルトの名無しさん:2008/01/05(土) 12:04:31
一致というよりマッチといいましょう。
336デフォルトの名無しさん:2008/01/05(土) 17:24:34
そういえばどっちも言うような気がする。
文脈によるというかどっちを軸に語るかによるんじゃないかな。
337デフォルトの名無しさん:2008/01/05(土) 17:36:47
厳密に言うと受理だろうが、気にしすぎだとも思う
338デフォルトの名無しさん:2008/01/05(土) 21:41:39
プログラムの 「前」 ってどっちですか?
339デフォルトの名無しさん:2008/01/05(土) 21:42:19
つまらんコピペだな
340デフォルトの名無しさん:2008/01/05(土) 21:45:36
じゃね? => ぢゃね?
341デフォルトの名無しさん:2008/01/06(日) 14:50:28
ここのFAQの中の手作業でNFAを作成ってページなんだけど
http://capslockabcjp.kitunebi.com/handmade.html
/***/にマッチしないきがするけど。
342デフォルトの名無しさん:2008/01/06(日) 15:05:50
だからなんだよ。
343デフォルトの名無しさん:2008/01/06(日) 15:29:12

344334:2008/01/06(日) 15:59:55
レス有難うございます。やっぱり気にし過ぎですかね。
気にしない事にします。
345デフォルトの名無しさん:2008/01/06(日) 23:17:00
if (ch == '/') st = 1;
else if (ch == '*') st = 4; // 追加
図のほうに
S4->S4 [label="*"];
だね
346デフォルトの名無しさん:2008/01/07(月) 00:05:54
>検索対象(の文字列)が正規表現(で表されたパターン)にマッチした場合
パターンは固定だから、俺はこっちがしっくりくる
347デフォルトの名無しさん:2008/01/10(木) 03:38:22
"one two three four"
"one three two four"
にしたいのです。正規表現でスワップ(位置交換)したいんですが
ググってもあんまりなかったです。

一応、java.util.regex.*; 使ってます。
348デフォルトの名無しさん:2008/01/10(木) 03:41:41
"one two three four five" 
"one four three two five" 
1 2 3 4 5
1 4 3 2 5
でした。
349デフォルトの名無しさん:2008/01/10(木) 16:36:35
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");

とりあえず
350デフォルトの名無しさん:2008/01/10(木) 17:42:18
>>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回コンパイルされる事に注意。
ここらへんの理屈がわかってないとツライよ。
352349:2008/01/11(金) 00:55:38
>>350
とりあえず最大数は気にしなくていい、[\$]1000とかでもいけるように見える
Petternクラスでは0始まりは8進数になるけど、Matcherクラスでは10進のまま
PetternのescapeとMatcherのappendReplacementあたりのソースを見るといい
うまくまとめられてないけど、2ch止まるらしいので今のうちに書いとく
353デフォルトの名無しさん:2008/01/11(金) 17:24:33
APIソース見てるんですか!
そこまで頑張らなくてもどこかにあるJavaのフォーラムで質問した方がいいんじゃないですか?
354デフォルトの名無しさん:2008/01/11(金) 17:39:56
質問者よりも回答者の方が問題解決に躍起になってるスレ。
355デフォルトの名無しさん:2008/01/11(金) 20:10:07
sedを使ってC言語のコメントを全て削除するにはどうやればいいんですか?
コメントが1行に収まっているなら簡単なんだけど、複数行にまたがる場合にどうすればいいかわからない
356デフォルトの名無しさん:2008/01/11(金) 20:22:05
>>355
パターンスペースとホールドスペースを駆使すればできなくはないが、お勧めできない。
awkかperl、或いは最近のスクリプト言語を使う方がいい。
357デフォルトの名無しさん:2008/01/12(土) 08:24:05
俺には無理ぽ
---------------------------------------
# decom.sed
/\/\*/ {
:loop
/\*\// { b break }
N
b loop
:break
s/\n/ /g
s/\/\*.*\*\///g
}
---------------------------------------
358デフォルトの名無しさん:2008/01/12(土) 08:30:01
ttp://main.rtfiber.com.tw/~changyj/sed/html/p.20010226b.html
ちょろっと探したらすぐ見つかったしorz
359デフォルトの名無しさん:2008/01/12(土) 09:21:03
でも>358だと文字列中の/*にも反応しちゃうんだよね。
本格的に使うのは、ちょっと無理。
360デフォルトの名無しさん:2008/01/12(土) 09:51:59
プリプロセッサ指令をプリプロセスで消されないよう加工
 ↓
プリプロセッサにかける
 ↓
加工したプリプロセッサ指令を元に戻す
361デフォルトの名無しさん:2008/01/14(月) 12:03:15
正規表現のエスケープしなくてもいい記号がわからないので、
とにかく記号という記号はエスケープしていて結構カオスになっているのですが、
エスケープしなくてもいい記号一覧とかどっかにありませんか?
!"#$%&'()-=^~\|@`[{;+:*]},<.>/?_
これが
\!\"\#\$\%\&\'\(\)\-\=\^\~\\\|\@\`\[\{\;\+\:\*\]\}\,\<\.\>\/\?\_
こんな感じに・・・
362デフォルトの名無しさん:2008/01/14(月) 12:22:13
半角スペースって普通に半角スペースをいれるか\x20とかくかどっちがいいんですか?
363デフォルトの名無しさん:2008/01/14(月) 12:23:19
普通に半角スペースを
364デフォルトの名無しさん:2008/01/14(月) 12:40:39
>>363
レスありがとう。
普通に半角スペース使うことにしますね。
365361:2008/01/14(月) 15:43:29
完全かどうかはわかりませんがWikipediaにのってました。
というわけで自己解決しました。
366デフォルトの名無しさん:2008/01/14(月) 18:31:15
>362

\s
367デフォルトの名無しさん:2008/01/14(月) 18:36:27
>>366
秀丸じゃ使えないんだよな
368デフォルトの名無しさん:2008/01/14(月) 18:37:44
>>366
つーか、それホワイトスペース一般じゃないか?
369デフォルトの名無しさん:2008/01/14(月) 18:55:23
ホワイトベースに見えた
370デフォルトの名無しさん:2008/01/14(月) 19:43:17
セイラさんにハァハァしすぎ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]だけだと行頭行末がダメ。。。
373デフォルトの名無しさん:2008/01/14(月) 22:23:48
>>372
\b
374デフォルトの名無しさん:2008/01/14(月) 22:28:09
非語境界ってやつだな。
375372:2008/01/14(月) 22:28:22
>>373
ありがとう。知らんかった。首吊ってくるわ。。。
376デフォルトの名無しさん:2008/01/14(月) 22:41:54
イ`
377デフォルトの名無しさん:2008/01/14(月) 22:44:30
\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です。よろしくお願いします。
379デフォルトの名無しさん:2008/01/17(木) 19:22:45
正規表現は再帰をあつかえない。即ち括弧の対応を確かめることが出来ない。
上限をハードコードするなら可能ではあるが、普通にパーサを書いたほうがいいと思う。
380デフォルトの名無しさん:2008/01/17(木) 21:31:48
新しいPerlへようこそ
381デフォルトの名無しさん:2008/01/18(金) 13:21:50
>>380
新しい Perl でも、正規表現 *だけ* では無理じゃね?
382デフォルトの名無しさん:2008/01/18(金) 19:34:46
ソースコードやXMLはネスト構造を持つから正規表現は向かないよな。
Javaとかもソースコードパーサー用の汎用クラスがあるけど、何故か使われなかったり。
BNF法の知識がデベロッパレベルで浸透してないから、無理も無いけど。
383デフォルトの名無しさん:2008/01/24(木) 09:57:54
仕用言語は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? じゃない?
386デフォルトの名無しさん:2008/01/24(木) 11:20:57
>>385
dです
ご指摘のように

$pat2 = "h?(ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep2 = "<a href=\"h\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);

こうすることで動きました
ありがとうございました
387デフォルトの名無しさん:2008/01/24(木) 14:34:41
h?っていらなくない?
388デフォルトの名無しさん:2008/01/24(木) 14:46:58
http: ってちゃんと書いたときに h が増殖しちゃわない?
389388:2008/01/24(木) 14:51:28
スマソ、勘違い。

h? を省くと、 http: ってちゃんと書いたときに、こんなふうに h が出てきちゃう。
h<a href="http://hoge">ttp://hoge</a>
390デフォルトの名無しさん:2008/01/24(木) 21:19:55
全体を括弧でくくってそれをテキストに指定、
内側の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です
すみませんでした
393デフォルトの名無しさん:2008/01/24(木) 23:30:33
>>390
kwsk
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);

↑こういうことじゃね?
395デフォルトの名無しさん:2008/01/25(金) 00:14:49
>>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でなくても他に使いやすいライブラリがあれば教えてください。
397デフォルトの名無しさん:2008/01/27(日) 11:14:06
C 言語なら PCRE とか鬼車で良いのではないかと。
398デフォルトの名無しさん:2008/01/27(日) 12:52:37
>>396
元々Cだしなぁ。ラッパーに何を期待してる?

それはそれとして、素のBREGEXPは古いのでやめておいた方がいい。
いくつかバグも見つかっているようだし。せめてbregonigにすべきかと。
399デフォルトの名無しさん:2008/01/27(日) 12:55:52
RE *re = ReCompile("/(\d+)/");
if(ReMatch(re, s)) { printf("%s", re->d1); }
ReFree(re);

これくらい簡単なのは確かに欲しい。
400デフォルトの名無しさん:2008/01/27(日) 18:22:16
みんながCのアプリをC++でコンパイル通してくれればfreeもなしで
if (/([0-9]+)/ == str) ...
こうできるけどね。

クラス定義とかしなくていいからさぁ、
C++のランタイムにしてくればモジュール提供する側がラクなんだよなぁ
401デフォルトの名無しさん:2008/01/27(日) 19:22:38
世の中の全てプログラム言語はC++でいいと?
402デフォルトの名無しさん:2008/01/27(日) 19:37:07
C99
403デフォルトの名無しさん:2008/01/29(火) 14:08:08
a b c
aa bb cc
aaa bbb ccc

これのインデントあわせって正規表現だけでできますか?perlです。
404デフォルトの名無しさん:2008/01/29(火) 14:41:11
<A HREF="http://hogehoge.jp/**************">http://hogehoge.jp/**************</A>
<A HREF="http://hogehoge.jp/**************">http://hogehoge.jp/**************</A>
…以下続く

という文字列があるのですが、**************の部分に暗号化された文字(例:=7%be%8e%e4)が50文字くらい並んでいて
毎回文字数や形式が変動してしまいます。

<A HREF=" のほうはいいのですが、 HTML上に表示される文字のほうも暗号文字になってしまうので困っています。

正規表現で、HTML上に表示される文字のほうだけ、「リンク」という文字に変える方法はありますでしょうか?
405デフォルトの名無しさん:2008/01/29(火) 15:32:43
>>403
右寄せ?左寄せ?
まあ無理なんじゃない
>>404
pack形式と実行環境書け
406405:2008/01/29(火) 15:42:18
>>404の例は「美人」だと思われるが、それでいいのか?
あとhogehogeやめれexampleにしろ
407デフォルトの名無しさん:2008/01/29(火) 15:55:11
>>404です

実はプログラミングを知らないので、実行環境はテキストです…
秀丸でできればおkです…
408デフォルトの名無しさん:2008/01/29(火) 19:56:06
>>403
正規表現では無理だろう。

幅固定なら awk が楽だが、
最長のに合わせるんだったら perl で普通に
ガシガシ書いてきゃいいんじゃね?
409デフォルトの名無しさん:2008/01/30(水) 00:44:52
perlでweb製作しています。

$txt の中の

href="URL" の中のURLを
http:example.net/test.cgi?url=エンコードしたURL
の形に一括変換したいです。

たとえば
href="http://search.com/str.cgi?first=1&p=%BA%C7%B9%E2"
href="http:example.net/test.cgi?url=http%3A%2F%2Fsearch.com%2Fstr.cgi?%2Fsearch%3Ffirst%3D1%26p%3D%25BA%25C7%25B9%25E2"
のようにしたいです。

$txt内には複数のhref=""があり、href=""外にもURLがあり、その部分は変換不要です。


$cgi = "http:example.net/test.cgi?url=";
$txt =~ s/(href\=\")([\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\$]*\")/$1&cgi$2/g;

$2の部分をエンコードすればよさげなのでエンコード法を調べてみましたが↓を↑に組み込み方がわかりません。
どなたか、お教えください。
$str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg;

410デフォルトの名無しさん:2008/01/30(水) 01:18:38
use strict;

my $txt = <<TXT;
href="http://search.com/str.cgi?first=1&p=%BA%C7%B9%E2"
href="http://search.com/str.cgi?first=1&p=%BA%C7%B9%E2"
TXT

$txt =~ s{(?<=href=").*?(?=")} {
no locale;
sprintf q{http:example.net/test.cgi?url=%s},
do{$_ = $&; s/([^\w ])/'%' . unpack('H2', $1)/eg; tr/ /+/; $_}
}eg;

print $txt;
411デフォルトの名無しさん:2008/01/30(水) 01:26:23
>>410
THANKS

なんか、できそうですが、PERL事態初心者で構文自体は理解できませんorz
412デフォルトの名無しさん:2008/01/30(水) 11:34:55
echoが含まれない行の検索って、java正規表現でできますか?

^.(?<!echo)*$ ではできませんでした。
413デフォルトの名無しさん:2008/01/30(水) 11:45:01
>>412
すいません。できました。
下の2つともできたのですが、「.」のおく位置で何か違いはあるのでしょうか?

^(.(?!echo))*$
^((?!echo).)*$
414デフォルトの名無しさん:2008/01/30(水) 13:56:44
それ上手く動かないだろ
415デフォルトの名無しさん:2008/01/31(木) 01:40:06
ふつうは^(?!.*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); /* "/___/../" -> "/" */
419416 :2008/02/01(金) 02:04:34
どうもPHP固有の仕様に関することかもしれないので、
そっちで聞いてみたいと思います。
どうもありがとうございました。
420デフォルトの名無しさん:2008/02/01(金) 13:56:31
.(?!xx)* は.*中に「xx」がない、との解釈になるのでしょうか?


よって下記とは異なる、でよろしいでしょうか。
(?!xx).*
421デフォルトの名無しさん:2008/02/06(水) 19:08:06
正規表現で遊べないかと考えていたんけど、みさくら語を正規表現で表すとしたらどうやる?
422デフォルトの名無しさん:2008/02/06(水) 19:56:32
ぐぐったら出てくるじゃないか
ttp://home.1555.info/misakura.html

とりあえず上のJavaScriptの意味を調べてみては
その過程で正規表現より他に必要なものが見つかるはず
423デフォルトの名無しさん:2008/02/07(木) 09:29:34
マッチさせた後どう処理するかの方が肝なので、正規表現だけ考えても仕方ないかと。
424デフォルトの名無しさん:2008/02/07(木) 21:45:00
蒲焼《か はやき》
深川《ふか がわ》
↑のような《》に挟まれた半角スペース、全角スペースを指定する正規表現はどう書けばいいか教えて下さい。よろしくお願いします。
425デフォルトの名無しさん:2008/02/08(金) 03:36:32
426デフォルトの名無しさん:2008/02/08(金) 17:50:02
********aaa aa *
****age p * kk **
*aaaa
のようなものの*を行頭から連続している部分だけ-に換えたいんですが
--------aaa aa *
----age p * kk **
-aaaa
こういうような二重絞り込みみたいなものってperlのワンライナーでやる方法が知りたいです
perl -pe '/^[\*]*/ & tr/*/-/'
みたいな感じで条件を合成できそうな気がするんですが
427デフォルトの名無しさん:2008/02/08(金) 18:02:31
perl -pe 's/^\**/q{-} x length($&)/e'
428デフォルトの名無しさん:2008/02/08(金) 18:46:33
どうもありがとうございました
正規表現だけじゃできないんですね
perlも勉強することにします
429424:2008/02/08(金) 19:34:16
ソフトは秀丸使ってます。実装言語とかよくわかりません。
430デフォルトの名無しさん:2008/02/08(金) 19:58:15
テンプレのサイトで少しは勉強してきなよ
431デフォルトの名無しさん:2008/02/08(金) 20:10:24
やってみって《》とその中までは指定できたけどその先がよくわからんのです。
432デフォルトの名無しさん:2008/02/08(金) 20:27:02
[《 》]
↑だと《》も一緒に指定してしまうし、だめだ。
433デフォルトの名無しさん:2008/02/09(土) 01:36:18
あきらめてこれで検索したら?
\f《[^《]*\f \f[^》]*》\f
置換するなら"\1置換後文字\3"とかで指定すればいいんだし。
434デフォルトの名無しさん:2008/02/12(火) 01:09:08
phpなんですが、たとえば
$a = "aiueo";
$b = "aiu";
と、あるときに
変数$bの中身(aiu)が$aに含まれるかを調べたいんですがどうしたらいいでしょうか。
435デフォルトの名無しさん:2008/02/12(火) 01:17:22
strstr
436434:2008/02/12(火) 11:16:40
わかりました!ちょっと難しく考えすぎていたようです。
正規表現使う必要ないんですね。
ありがとうございます。
437デフォルトの名無しさん:2008/02/13(水) 00:28:11
・・・これだ
438デフォルトの名無しさん:2008/02/13(水) 15:18:34
phpです。
htmlファイル中の
<p>
test
あああ
いいい
ううう
</p>
を preg_match('/<p>((.|\n)+)<\/p>/', $source, $test); でマッチさせると
$test[0]には全体、[1]には一致した部分が入っていて正しいのですが
[2]に空白も入ってしまっているようです。
Array
(
[0] => <p>
test
あああ
いいい
ううう
</p>
[1] =>
test
あああ
いいい
ううう

[2] =>

)
このようになります。
上手く間にある文字列だけをマッチさせる方法はないでしょうか。
439デフォルトの名無しさん:2008/02/13(水) 15:26:34
>>438
二個目のカッコ (.|\n) にマッチした箇所がキャプチャされてるね。
後方参照されないように (?:.|\n) とか。 ?: の意味は自分で調べて。
440デフォルトの名無しさん:2008/02/13(水) 15:34:54
素早いレスありがとうございます。調べてみます。
441デフォルトの名無しさん:2008/02/15(金) 18:54:31
Perl5.6でIPアドレスの範囲と場所をマッチングさせたいと思っています。

192.168.1.* を東京
172.16.0.* 〜 172.16.3.* を大阪

という場合はどのように判定させればいいのでしょうか。
Perl歴3日目なもんで・・・どなたかお力を。
442デフォルトの名無しさん:2008/02/15(金) 19:00:38
とりあえず、正規表現でやろうとするのは間違ってますよ。
split /\./ してからごにょごにょするか、
CPANのNetAddr::IPのようなモジュールが使えないか検討してください。
443デフォルトの名無しさん:2008/02/15(金) 19:04:12
なるほど。分けてから比較するんですね。
方向性が分かっただけでも助かりました。
ありがとうございました。
444デフォルトの名無しさん:2008/02/15(金) 20:05:50
そういう場合はサブネットマスク使ったほうが綺麗にかけるぞ
445デフォルトの名無しさん:2008/02/15(金) 22:54:30
255.255.252.0とかで切っててもいけるもんなんですか?
446デフォルトの名無しさん:2008/02/16(土) 13:40:36
bitでかんがえてみろ
447デフォルトの名無しさん:2008/02/19(火) 10:54:06
テキストエディタで検索・置換をするのに
特定のワードで始まる行末7文字の指定はどう書けばいいでしょうか?

それとDOSのワイルドカードだと
AA○○.txt
AA××.txt
とあったときren AA*.txt BB*.txtとすれば
BB○○.txt
BB××.txt
となったと思うのですが、正規表現でも同様な事ができますか?
こちらもテキストエディタでの検索・置換です
448デフォルトの名無しさん:2008/02/19(火) 15:07:30
PHP正規表現チェッカー
ttp://www.rider-n.sakura.ne.jp/regexp/regexp.php
449デフォルトの名無しさん:2008/02/19(火) 17:34:36
>特定のワードで始まる行末7文字の指定
これの意味がわからない、例を出せ例を
450デフォルトの名無しさん:2008/02/19(火) 17:36:10
テキストエディタっつってもできることできないこといろいろあるので
具体的なソフト名を出した方が回答が得られやすいと思われ。
451デフォルトの名無しさん:2008/02/19(火) 17:48:38
コミュニケーション能力が不足しているな。
エディタの使い方とか正規表現とか覚える前に
人間として最低限必要な事を先に覚えたほうがいいんじゃない?
452447:2008/02/19(火) 17:55:55
答えられないカスどもは黙っててください
わかる人だけが、質問に答えてくれればいいです
では引き続きよろしくお願いします
453デフォルトの名無しさん:2008/02/19(火) 18:07:23
晩飯なににすっかなー
454デフォルトの名無しさん:2008/02/19(火) 18:37:56
サンマの缶詰が安かったから、これで炊き込みごはん。
米1合を洗ってダイソーで買った105円の土鍋に入れる。
そのままサンマの缶詰1缶まるごとブチ込む。
水加減は、缶詰の水分と合わせて200mlくらいになるように調節。
30分くらい浸して火にかける。
最初は中火より強め。5分くらいで吹いてくるから弱火にして、さらに5分。
(赤子泣いてもフタ取るんじゃないぞ)
炊き上がったら5分むらす。
缶詰はサンマでなくても、鯖とかイカとか赤貝とか、好みのでOK。
味が濃い目の缶詰がいいな。味が薄いときは醤油や砂糖やみりんを加えてから
炊くといいよ。
455447:2008/02/19(火) 18:40:47
エディタはJedit X1.11です

例)
あああ〜〜〜1234567
いいい〜〜〜1234567
………
………

〜〜〜は文字数などもバラバラな任意な文字列(全角含む)

行頭『あああ』で始まる行の、行末『1234567』を
別の文字列『abcd』等に置換したいのです
456デフォルトの名無しさん:2008/02/19(火) 18:43:41
あああ腹へったなー
457デフォルトの名無しさん:2008/02/19(火) 20:02:10
(?<=あああ).*(?=.{7}) -> abcd
458447:2008/02/19(火) 21:51:39
>>452
おいおい気がついたらとんでもない事勝手に書いてるな〜(苦笑

>>457
ありがとうございます
戻り読みと先読みですか、なるほど!
ですが、これだと『〜〜〜』の部分になってしまいますよね……
459デフォルトの名無しさん:2008/02/19(火) 23:38:16
1合炊きの土鍋なんてあるのか
今度ダイソーに行ったら見てみよう
460デフォルトの名無しさん:2008/02/19(火) 23:44:48
>>459
中国製の土鍋なんてどんな毒が混ざってるか分からんぞ。
461デフォルトの名無しさん:2008/02/20(水) 00:38:19
ニ○リの土鍋以外にでたっけ
462デフォルトの名無しさん:2008/02/20(水) 08:47:18
>>452
こういうことすぐ言う人って、昔いじめられてた人なんでしょ?可哀想にね
463デフォルトの名無しさん:2008/02/20(水) 11:24:13
めんどくさがりなので俺なら↓でやってしまうな
/^(あああ.*?)(.{7})$/\1abcd/
464447:2008/02/21(木) 18:24:17
>>463
ありがとうございます

いろいろ調べながらやってますがダメなようです
もうちょっとがんばってみます
465デフォルトの名無しさん:2008/02/21(木) 18:30:35
せっかくヒントもらえたんだし、頑張ってもらわんとな
466デフォルトの名無しさん:2008/02/22(金) 00:06:24
>>396
いまラッパーつくってるよ
ちょっとまてて
467デフォルトの名無しさん:2008/02/22(金) 13:22:33
2008-03 発売(予定)
「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳)
ISBN 978-4-87311-359-3 定価 5,040円
468デフォルトの名無しさん:2008/02/22(金) 16:48:39
おや、和訳出るのね。今回は田和さんじゃないんだ
もったいない気もするがロングテールの人なら鉄板か
469466:2008/02/22(金) 21:49:08
できましたよ 使ってみてください サポートはここで
http://fx10.web.fc2.com/index.html
470デフォルトの名無しさん:2008/02/23(土) 03:35:41
>>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
でできたよ
473デフォルトの名無しさん:2008/03/05(水) 20:28:49
秀丸で検索するときに文字列Aを含んで且つ文字列Bを含まない行全体を指定したいのですが、
(含む行)       ^.*文字列A.*\n
(含まれない行)   ^((?!文字列B).)*\n
で個別にはわかるんですがこの2つを合わせてて検索したいのですがどう書けばいいのでしょうか?
474デフォルトの名無しさん:2008/03/05(水) 23:21:55
(^.*文字列A.*\n|^((?!文字列B).)*\n)
475デフォルトの名無しさん:2008/03/05(水) 23:22:43
あ、間違えたわ
476デフォルトの名無しさん:2008/03/06(木) 01:07:25
  dll
| ^
  dll
477デフォルトの名無しさん:2008/03/07(金) 08:06:30
微妙にイケメソがいるな
478デフォルトの名無しさん:2008/03/07(金) 08:12:32
479デフォルトの名無しさん:2008/03/07(金) 08:35:28
(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|
      `</ / |
        `<|
482デフォルトの名無しさん:2008/03/07(金) 18:16:02
正規表現関係ないな。脳みそつかえ
483デフォルトの名無しさん:2008/03/07(金) 20:32:03
>>480
s/\.?0+$//
484デフォルトの名無しさん:2008/03/08(土) 10:40:12
約2万件のデータがあるのですが
使用する文字が半角全角交じりで途中に記号やスペースもあるかもなのです
文字数もわかりません
2つのキーワードで全部取れますか?

キーワード@東京都
キーワードA3-5-7

何区何町だったか思い出せません><
何故か357って数字だけ覚えてました^^
485デフォルトの名無しさん:2008/03/08(土) 10:59:33
東-京/都
とかなってたら終わりだな
486デフォルトの名無しさん:2008/03/08(土) 11:44:11
東京都 市ってなかったっけ?w
487デフォルトの名無しさん:2008/03/08(土) 12:23:42
東京都.*?[33三].+?[55五].+?[99九]
で抽出してあとは手動かなぁ、俺がやるなら
漢数字が入る地名とかいちいちはじいてられないし
488デフォルトの名無しさん:2008/03/08(土) 14:42:33
<object> ←これ検索したいんですお願いします
489デフォルトの名無しさん:2008/03/08(土) 17:32:38
/<object>/
490デフォルトの名無しさん:2008/03/09(日) 01:17:00
>>1
みたいにアンカー機能を付けたいのですがどのように書けば良いのでしょうか?
491デフォルトの名無しさん:2008/03/10(月) 10:41:21
>>490
>>1 を見てその質問の仕方なのかよ!?
492デフォルトの名無しさん:2008/03/10(月) 21:13:30
<hoge aaa="aa\"bb<cc>dd" zzz="ee\"ff<gg>hh">value</hoge>

value

と置換する正規表現を教えて下さい
言語は JavaScript で、戻り読みは使えません
493デフォルトの名無しさん:2008/03/10(月) 21:23:42
正規表現よく分かりません><
<[^/]+>([^<]+)</.+>
494デフォルトの名無しさん:2008/03/11(火) 02:03:14
入門 正規表現

サンプルがJavaで吹いた
495デフォルトの名無しさん:2008/03/11(火) 06:12:35
>492
ブラウザのJavaScriptならXPathのほうが速くて正確
496デフォルトの名無しさん:2008/03/11(火) 06:39:06
>>495
ブラウザじゃないです

取得したページからタグを削除することを目的としています
497デフォルトの名無しさん:2008/03/11(火) 06:41:25
>>495
493の正規表現でいいんじゃね?
498デフォルトの名無しさん:2008/03/11(火) 08:57:13
秀丸ではスペースは直打ちがデフォですか?
何か気持ち悪い。
499デフォルトの名無しさん:2008/03/12(水) 01:26:27
Perlの正規表現で[^\.-z]っていうのがあったんですけどこれってどういう文字が当てはまるんですか?
500デフォルトの名無しさん:2008/03/12(水) 01:36:32
>>499
ASCIIのコード表でも見てみればいいんじゃないかな
501デフォルトの名無しさん:2008/03/12(水) 06:02:36
>>500
見てみたけどピリオドのほうがzより後に来てるのでこれおかしいんじゃないのと思って質問したのですが・・・
502デフォルトの名無しさん:2008/03/12(水) 06:04:10
どこの表にそんなでたらめが書いてあるんだよ
503499:2008/03/12(水) 06:07:45
あ、あれ・・・
もう一回調べてみたらピリオドのほうが先に来てる・・・
504デフォルトの名無しさん:2008/03/12(水) 22:09:17
>>503
あー、すまん、書き間違えてたので修正しといた。
505デフォルトの名無しさん:2008/03/12(水) 22:16:00
ってのは冗談として、
そういう ASCII コード表の順に大きく依存するような範囲指定を書くのは良くないと思う。
バグってハマったときに ASCII コードを凝視しないと解決いけなくなるし、移植性も低くなる。
アルファベットと記号は分けて書くようにするとか、文字クラスなどを利用した方が良い。
506デフォルトの名無しさん:2008/03/12(水) 23:26:03
>>505
言うことは非常によくわかる。
文字クラスを使うべきっていうのには完全に同意。
でもASCIIコード順は移植性十分にある気がする。
とりあえず俺はASCIIコードで範囲指定するのは問題ないと思う。
507デフォルトの名無しさん:2008/03/12(水) 23:49:22
個人的には
OSの事情とかLOCALEまわりのランタイムの完成度とか
POSIX文字クラスは警戒心をくすぐるものだw
508デフォルトの名無しさん:2008/03/13(木) 02:07:43
こんばんは!
はじめましてよろしくです^^

キーワード@とキーワードAを同時にグレッペ出来る機能のあるツールはありますか
1000ファイル単位で処理したいんですが
1ファイルに@AA(Aは同じものが連続である)
これを行ごとgrepしたいんです
Aについては1つ削除がいいです
よろしくお願い致します

キーワード@東京都 キーワードA性別A(性別マーク)
509デフォルトの名無しさん:2008/03/13(木) 02:25:18
日本語でおk
510デフォルトの名無しさん:2008/03/13(木) 03:23:27
3回読んだが意味わからん
511デフォルトの名無しさん:2008/03/13(木) 03:30:34
なんとなくわかった気がしたけど最後の1行でぶちこわされた
512デフォルトの名無しさん:2008/03/13(木) 07:22:30
グレッペ
513デフォルトの名無しさん:2008/03/13(木) 07:40:30
こんばんは迄呼んだ。
514デフォルトの名無しさん:2008/03/13(木) 08:09:40
グレッペのあたりで断念した
515デフォルトの名無しさん:2008/03/13(木) 09:04:25
デフォルトのまで読んだ
516デフォルトの名無しさん:2008/03/13(木) 09:11:02
1ファイルに3つのキーワードが先頭から
 都道府県名
 性別
 性別を表す何らかのマーク
の順番で並んでいて、
2つめと3つめは同じ性別を意味する別表現である。
例えば2つめが「男」だったら、3つめは「♂」となる。
これをgrepしたいが、性別については一つ消したい。

こんな感じか?
grepだけじゃ無理だからsedかawk使え、でおk?
517デフォルトの名無しさん:2008/03/13(木) 09:48:33
わろた
518デフォルトの名無しさん:2008/03/13(木) 12:54:59
縦読みだろ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]てきなのを取り出すにはどうしたらいいのでしょうか?
520デフォルトの名無しさん:2008/03/13(木) 16:26:58
>>519
ハェ?誰に聞いたんだ?言った奴に質問してこい
521デフォルトの名無しさん:2008/03/13(木) 20:34:26
$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さんの通りにやるとアンカー自体はマッチします
この後それを取り出すのはどのようにすればいいのでしょうか?
ログからデータを取得するのはわかりますが、実際にその取り出された部分だけを抽出して表示するやり方がいまいちわかりません
524デフォルトの名無しさん:2008/03/13(木) 21:35:50
webprog池
525デフォルトの名無しさん:2008/03/13(木) 21:58:16
>>508
やったな、おい!大漁じゃねーか!
526デフォルトの名無しさん:2008/03/14(金) 07:20:33
なんだい今更になって
本人乙とでも言ってほしいのか?
527デフォルトの名無しさん:2008/03/14(金) 18:46:06
528デフォルトの名無しさん:2008/03/14(金) 21:06:23
「楽しいかもね、そうかもね」っていう文字列で
「楽.*ね」ってやると、.*は可能な限りマッチするから
「楽しいかもね、そうかもね」まで拾っちゃうでしょ?
それを「楽しいかもね」でマッチさせたい場合どうすればいいですか?
529デフォルトの名無しさん:2008/03/14(金) 21:08:42
*?って?をつければ非欲張り型(なるべく短くマッチ)になるかも知れない
530デフォルトの名無しさん:2008/03/14(金) 21:08:49
>>528
まずは>>1を音読したまえ
531デフォルトの名無しさん:2008/03/14(金) 21:09:35
楽.*?ね
532デフォルトの名無しさん:2008/03/14(金) 21:12:11
.*? でした。
533デフォルトの名無しさん:2008/03/15(土) 00:19:58
60文字程のURLなんだけど
真ん中あたりの15文字くらいがわかんなくなりました
正規表現でなんとかなりませんか?
534デフォルトの名無しさん:2008/03/15(土) 00:27:42
その15文字の前か後ろの長いほうで検索すればいいだろ…
535デフォルトの名無しさん:2008/03/15(土) 10:57:56
>>528
楽[^、]*ね
536デフォルトの名無しさん:2008/03/15(土) 11:05:59
>>535
それが許されるなら
楽しいね
だって許されるはずだ
537デフォルトの名無しさん:2008/03/15(土) 11:47:45
楽しい、ね
538デフォルトの名無しさん:2008/03/15(土) 11:48:14
楽しいかもね楽かもね
539デフォルトの名無しさん:2008/03/15(土) 14:28:52
>>535
だったら
 楽[^ね]*ね
でもいい様な。
540デフォルトの名無しさん:2008/03/15(土) 18:53:11
ワード協会とか除外すればいいのどは
541デフォルトの名無しさん:2008/03/15(土) 22:03:46
安楽死ね
542デフォルトの名無しさん:2008/03/16(日) 00:57:08
「楽しいかもね、そうかもねABC」っていう文字列で
「ね.*$」ってやると
「ね、そうかもねABC」まで拾っちゃうでしょ?
それを最後の「ねABC」でマッチさせたい場合どうすればいいですか?
543デフォルトの名無しさん:2008/03/16(日) 00:59:00
ね.*?$ だと何度言えば
544デフォルトの名無しさん:2008/03/16(日) 01:02:19
>>543
マジで?できないけど??
545デフォルトの名無しさん:2008/03/16(日) 01:04:58
[^ね]を使うとか、いろいろやりようはある
546デフォルトの名無しさん:2008/03/16(日) 01:08:49
>>544
最短一致に対応してないタイプの正規表現なのかな。
547デフォルトの名無しさん:2008/03/16(日) 01:16:55
>>543,546
その目的には、最短一致は使えないから。
照合開始位置を後ろにずらしてまで最短を見つけるわけではない。
548デフォルトの名無しさん:2008/03/16(日) 01:21:20
ああ、そうなんだ。
549デフォルトの名無しさん:2008/03/16(日) 01:34:22
さあ、この問題を解決できる神はいるのだろうかっ!!(ただ答えが欲しいだけ)
550デフォルトの名無しさん:2008/03/16(日) 01:35:49
ね[^ね]*$ じゃないのか?
551デフォルトの名無しさん:2008/03/16(日) 01:50:55
それもう545で提案されてんじゃん。
552デフォルトの名無しさん:2008/03/16(日) 02:24:31
>>550
THX!ひとまずそれで省いた後
ね$をマッチさせることにするよ
553492:2008/03/16(日) 03:14:37
やはり戻り読みが使えないと難しいですか?
554デフォルトの名無しさん:2008/03/16(日) 03:24:12
戻り読みはいらんだろ
555デフォルトの名無しさん:2008/03/16(日) 06:10:58
Vimで
2008年3月16日 06:09:42

2008-03-16 06:09:42
のように年月を-で、日を削除するように置換するにはどうしたらいですかね?
556デフォルトの名無しさん:2008/03/16(日) 06:25:49
:%s/年/-/
:%s/月/-/
:%s/日//

じゃあかんのんか?
というか、3 を 03 に変える所までやりたいの?
557デフォルトの名無しさん:2008/03/16(日) 06:31:06
>>556
説明不足ですみません、対象のテキストには日付以外にもいろいろ書かれていて、
年や月などの単語はそのままに日付部分だけ置換したいのです。
日付の正規表現が理解できていないので、こちらでお尋ねした次第です。

>というか、3 を 03 に変える所までやりたいの?
可能ならしたいです。
558デフォルトの名無しさん:2008/03/16(日) 07:04:36
とりあえずこれでいけた。

:.s/\([0-9]\{1,4}\)年\([0-9]\{1,2}\)月\([0-9]\{1,2}\)日/\=system("printf '%04d-%02d-%02d' " . submatch(1) . " " . submatch(2) . " " . submatch(3))/
559デフォルトの名無しさん:2008/03/16(日) 07:09:55
しまった。
テスト用に1行のみの置換にしてた。
:.s は :%s に変えてね。
まあ分かると思うけど。
560デフォルトの名無しさん:2008/03/16(日) 07:45:51
>>558さん、ありがとうございます。
やってみたのですが、うまくいかず、日付の部分が丸ごと消えてしまうようです。

'printf' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と出ました。こちらのVimの設定が悪いのでしょうか?もう少し試してまたレス返しにきます。
561>>555=>>557:2008/03/16(日) 08:05:26
何度か試したのですが、同じ結果です。
一応こちらの手順ですが、スレに貼って頂いたものをクリップボードに入れてから、
:<C-R>*
で貼り付けして、先頭を :%s/ に変えてテキスト全体に適用してから、実行しました。ほぼコピペなので打ち間違いはないと思うのですが。
Vim7 を Windows 2000 sp4 で使ってます。
printf などもわからないため、もう少し調べてみます。
562デフォルトの名無しさん:2008/03/16(日) 10:10:00
>>555
ViVi でだけど以下でいけた
:s/(\d{4})年(\d{1,2})月(\d{1,2})日 (\d{2}):(\d{2}):(\d{2})/\1-\2-\3 \4:\5:\6

Vim でも同じように出来るんじゃないか?
563デフォルトの名無しさん:2008/03/16(日) 11:45:32
>>562さん、やってみましたが無理でした。
マッチはうまくいってるみたいですが、置換の仕方がVimとだいぶ違うようです。
ViViはいじったことないので、少し調べてみます、スペース入れる辺りがよくわかりませんので。
わざわざありがとうございました。皆さん、お手数おかけしております。
564デフォルトの名無しさん:2008/03/16(日) 12:03:58
お二人のご教示をヒントにいろいろいじっていたら、以下で、

%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桁のままですが、それ以外は置換できました。もう少し試行錯誤してみます。
565デフォルトの名無しさん:2008/03/16(日) 12:29:58
月などを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
566デフォルトの名無しさん:2008/03/16(日) 16:54:21
>>560
>>558 は printf コマンドがあることを前提にしてるから
Windows のコマンドプロンプトだと無理なんだろう。
Cygwin でやればいけるはず。
567デフォルトの名無しさん:2008/03/16(日) 17:51:53
>>565さん、ViViを使って、教えていただいた正規表現でできました。
いろいろVimで粘ったのですが自分のスキルでは無理だったので。
ありがとうございました。

>>566さん、ご教示ありがとうございます。
Cygwinはよくわからないのと、>>565さんの方法で出来たので printfコマンドはあきらめました。

>>555の質問の件は>>565さんので解決することができました。
皆さん、いろいろ教えていただきありがとうございました。お世話になりました。
568デフォルトの名無しさん:2008/03/16(日) 19:50:39
あまりの丁寧なレスに
全米が泣いた
569デフォルトの名無しさん:2008/03/18(火) 14:41:31
初心者です、それなりに調べたんですが・・

あああああああ
aaaaaaaaa
??????????
乙乙乙乙乙乙乙乙乙乙乙乙

こういうある文字の繰り返しを、一つの表現でマッチできますか?たとえば10文字以上
専ブラで弾きたいんですが、数字はのぞけると嬉しいです
570デフォルトの名無しさん:2008/03/18(火) 14:44:54
[^\d]{10,}
571デフォルトの名無しさん:2008/03/18(火) 14:45:26
"正規表現 後方参照"でググれ
572デフォルトの名無しさん:2008/03/18(火) 16:39:30
任意の一文字って . ドットのことでおききしたいんですけど
探したい文字の前につけるんですよね?
< を探すのに
.< として検索したら結果は
>< として検索されます
検索結果に > を含めない方法教えて下さい
573デフォルトの名無しさん:2008/03/18(火) 17:00:47
>探したい文字の前につけるんですよね?
新しい解釈だな
574デフォルトの名無しさん:2008/03/18(火) 19:07:48
久しぶりに理解不能なの読んだな
「>」でない任意の1文字 + 「<」
と一致させたいってことなら [^>]<
検索結果から>だけ取り出したいってなら.(>)
後者に何の意味があるのかは知らないけど

ただ少なくとも正規表現について基礎から勉強しなおしたほうがよさそうだな
575デフォルトの名無しさん:2008/03/18(火) 19:15:14
むしろ日本語について基礎から勉強しなおしたほうがよさそうだな
576デフォルトの名無しさん:2008/03/18(火) 19:38:21
最近も508が理解不能だったぞ
577デフォルトの名無しさん:2008/03/18(火) 20:04:03
読み直して 吹いた>>508
578デフォルトの名無しさん:2008/03/18(火) 20:12:36
>>514が秀逸
579デフォルトの名無しさん:2008/03/19(水) 02:36:39
>>577
あれからダブルグレッペというマクロをつかわせていたらきましたよw
一応テストしてから本格的に使わせていただこうと
HDDの奥深くにテスト用のテキスト置いて、 grep開始!
ほへ?
グアッガッガーッ!!うわぁぁああああ!!!
この音は何??
なんだろか!?
ハードディスクが唸りまくってるタラリーン
よくわからないけどドライブごとgrepしてくれたよ
1ファイルで5000行〜1万行が40万ファイルあるのに・・・(ポカーン
コントロール+オルト+デリートでストップかけたら
エディター画面の後ろ側にエラー画面がいくつもでてたww
今時ブラクラ??
驚いたというかワラタwww
580デフォルトの名無しさん:2008/03/19(水) 15:44:41
使用するソフトはProximitronです。

以下のような広告を含む<table>ブロックを丸ごと削除したいと考えています。
<table width=100% class=tbl border=1 cellpadding=5>
<tr bgcolor=#EEEEEE><td height=5px></td></tr>
<tr>
<td align=center>
<iframe id='a5c37d59' name='a5c37d59' src='http://ads.xxx.com/xxx/afr.php?n=a5c37d59&zoneid=2&cb=<?=41Q40eQDW2vfp6o;?>' framespacing='0' frameborder='no' scrolling='no' width='300' height='250'>
<a href='http://ads.xxx.com/xxxxxx/ck.php?n=adf3ef1c&cb=<?=41Q40eQDW2vfp6o;?>' target='_blank'>
<img src='http://ads.xxx.com/xxx/avw.php?zoneid=2&cb=<?=41Q40eQDW2vfp6o;?>&n=adf3ef1c' border='0' alt='' /></a>
</iframe>
<script type='text/javascript' src='http://ads.xxx.com/xxx/ag.php'></script></td></tr><tr bgcolor=#EEEEEE><td height=5px></td>
</tr>
</table>

一部伏字にして置換してあるので100%同じ文字列ではありません。
これをマッチさせて丸ごと削除したいのです。

<table.*>.*</table>
これだとページ自体が全体的に崩れてしまいます。
tableの開始と終了を合わせないといけないのですが
そこがネックになっています。
581デフォルトの名無しさん:2008/03/19(水) 16:43:48
>>580
正規表現スレだからこんな書き方をするとスレ違いかも知れないけど、
$NEST(<table,[^>]++class=$AV(tbl)[^>]+>*,</table>)

「*」の所を、「*消したい文字を入れる*」とか、すればいいんじゃないかな。
582デフォルトの名無しさん:2008/03/23(日) 02:57:04
拡張子のないファイルに.txt付けたいです
aa1234ファイル

[0-9]
$[\.(txt)]
だめですか?
583デフォルトの名無しさん:2008/03/23(日) 03:02:31
584デフォルトの名無しさん:2008/03/23(日) 03:12:15
+ が使えるなら
s/^\([^.]+\)$/\1.txt/
+ が使えないなら
s/^\([^.][^.]*\)$/\1.txt/
585デフォルトの名無しさん:2008/03/23(日) 04:16:02
>>583
了解
>>584
ありがとうございます
586デフォルトの名無しさん:2008/03/23(日) 12:58:56
(Perl5互換)のツールで半角括弧を削除したいんですよろしくお願いします
元の文字列
(10123)test.txt
希望する変換後の文字列
10123test.txt

使ってみたいツールはこれです
ベクター Flexible Renamer
ttp://hp.vector.co.jp/authors/VA014830/FlexRena/

このスレの>>1関連サイトを廻ってみたけどよくわかりませんでした
ツールの作者HPもいって見ましたがQ&Aとか掲示板はなかったです
どなたか括弧の取り除き方教えて下さいお願いします
587デフォルトの名無しさん:2008/03/23(日) 14:28:15
( 削除
) 削除
588デフォルトの名無しさん:2008/03/24(月) 17:03:04
正規表現教えて下さい
<h2>タイトル</2>
「<」から「>」までお願いします(「タイトル」の文字列含む)
どなたかよろしくお願いします
589デフォルトの名無しさん:2008/03/24(月) 17:06:50
>>1
590デフォルトの名無しさん:2008/03/24(月) 17:15:46
>>588です
書き込んでから>>1読みました
今のところ使うソフトは秀丸エディターを試用しようしてみよう思いますが
ツールは何も揃えていない状態なので解答者サンのお勧めのソフトで始めてみます
正規表現でテキストの加工をしたいです
初心者でも挫折しないで継続して使っていけるソフトも一緒に探してます
金額にもよりますがフリー有料問いません
使うソフトはまだ明確には決めていませんので取り合えずシェアーウェアーで試してから
本格的にやってみようと思います
<h2>タイトル</h2>
よろしくお願いします
591デフォルトの名無しさん:2008/03/24(月) 17:18:55
<h2>///ここは<strong>見出し</strong>です///</h2>

こんなのは想定しなくていいのか。
592デフォルトの名無しさん:2008/03/24(月) 17:26:26
>>591サン
即レスありがとうございます
そういうのもあるかもしれないです
文字列の中に <strong>見出し</strong> が入っていれば検索文字列も変わりますよねorz
<h2>からエンドを</h2>にする方法教えて下さい
お願いします
593デフォルトの名無しさん:2008/03/24(月) 17:27:33
途中に改行は?
594デフォルトの名無しさん:2008/03/24(月) 17:53:20
>>593サン
588です
途中に改行は想定していなかったです
あるかもわからないと今気づきました
お手数お掛けして恐縮ですが何卒よろしくお願い致します
595デフォルトの名無しさん:2008/03/24(月) 23:10:25
おまいら、よく>>588の文章で、その意図が判ったな。
596デフォルトの名無しさん:2008/03/24(月) 23:37:54
<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

とかでいいのでは?
599デフォルトの名無しさん:2008/03/24(月) 23:47:39
なるほどね
過去スレ読めばよかったorz
>>33まで読んだ
600デフォルトの名無しさん:2008/03/24(月) 23:52:05
>>595がここに張り付いてるようじゃ
このスレで勉強させてもらおうって人も尻込みするね
>>595の意図はそれなんだろうけど・・・
601デフォルトの名無しさん:2008/03/24(月) 23:54:45
ライオンはなんとかって話なわけで
潰しにかかれるうちに潰しちゃう
やな奴だ氏ねばいいよ
9図
602デフォルトの名無しさん:2008/03/24(月) 23:58:48

- - - こ こ へ 何 か 聞 き に 来 た 人 へ - - -

ま ず 過 去 ス レ 読 ん だ ほ う が い い
変 な 潰 し 屋 が い て る よ う な の で ご 注 意 下 さ い
603デフォルトの名無しさん:2008/03/25(火) 00:18:28
質問です。

正規表現だと、〜〜を含む行を探すってのは簡単にできるんだけど
〜〜を含まない行を探すのはどうするのが一般的なのでしょうか?

エディタならば、「abcde」を含む行を
^((.*)abcde(.*))\r\n
で探して、削除することで処理できるのですが、
これはあくまで含む行を探してるのであって、
含まない行を探すというのとは違うような気がして釈然としません。

別に今困ってるわけじゃなくて、知っておきたいだけなのですけど・・・。
よろしくお願いします。
604デフォルトの名無しさん:2008/03/25(火) 00:24:37
うあ、>>473ですでにあった。
605デフォルトの名無しさん:2008/03/25(火) 00:25:12
>>603
言語理論での定義では、正規表現は「ある文字列を含まない文字列」はあらわせない。
しかしそれでは不便なので、パターンマッチ用に拡張された言語では否定を表現する方法を持っている場合はある。
606デフォルトの名無しさん:2008/03/25(火) 02:48:25
sage を含まない文字列

^(?!sage)(.(?!sage))*$
607デフォルトの名無しさん:2008/03/25(火) 03:06:14
>>603
^([^a]|a([^b]|b([^c]|c([^d]|d([^e]|$)|$)|$)|$)|$)*
608デフォルトの名無しさん:2008/03/25(火) 08:13:09
>>603
vi, vim, ViVi なら

:v/regexp/d

で正規表現に一致しない行を削除できる
609デフォルトの名無しさん:2008/03/25(火) 12:28:43
<h2 title="></h2>">みだし</h2>

こんな記述も可能ではある。
結論: HTMLのパースに正規表現は向かない

610デフォルトの名無しさん:2008/03/25(火) 13:40:43
java1.4ですが、

 1234567890 を 1234______ にリプレイスしたいのですが、

どうすればできるでしょうか?
611デフォルトの名無しさん:2008/03/25(火) 13:44:44
"1234567890".replaceAll("[567890]", "_")
612デフォルトの名無しさん:2008/03/25(火) 13:45:35
"1234567890".replaceAll("[5-90]", "_")
613デフォルトの名無しさん:2008/03/25(火) 13:55:11
「違うんです。
 987654 なら 9876__
 314159265358979 なら 3141____________
 にしたいんです」
かな。
614デフォルトの名無しさん:2008/03/25(火) 14:02:37
>>610
自己レスですが、いろんなサイトを見よう見まねで + 気合で何とかできました。


"1234567890".replaceAll( "(^....|).+?(?=.+|$)" , "$1_")

615デフォルトの名無しさん:2008/03/25(火) 20:25:13
「任意の一文字」の.や「前にある文字の1回以上」の+は、bashだとそれぞれ?と*ですが、
正規表現は規格で決まってるものではないんでしょうか?
言語ごとに違いってあるんでしょうか?(bashは言語じゃないってのもありますが・・・)
616615:2008/03/25(火) 20:27:21
「前にある文字の1回以上」の+

↑は違いましたね・・・失礼しました。
617デフォルトの名無しさん:2008/03/25(火) 20:28:54
>bashだとそれぞれ?と*
それ性器表現じゃないし
618615:2008/03/25(火) 20:49:04
>>617
bashのは正規表現とは言わないんですか、失礼しました。そう呼んでるサイトも見かけますが・・・

bashの*に対応するのは.*ですね。
bashスクリプトとperlスクリプトが混ざってると、ちょっと紛らわしいですね
619デフォルトの名無しさん:2008/03/25(火) 22:05:10
bash のは言うならワイルドカードだな。
620デフォルトの名無しさん:2008/03/26(水) 01:49:44
grepとglobの違い。
621デフォルトの名無しさん:2008/03/26(水) 03:33:07
えっ?どう違うの?
622デフォルトの名無しさん:2008/03/27(木) 13:47:15
えっと・・・
VBS (WSH Windows Scripting Host) のRegExp では
マルチラインの指定はできんですか?
ググって必死こいて探してるけど見つけられないんで。
623デフォルトの名無しさん:2008/03/27(木) 14:56:06
かなり前のバージョンでサポートされた

Set ObjRegExp = New RegExp
ObjRegExp.Multiline = True
624デフォルトの名無しさん:2008/03/27(木) 22:10:38
>>623
できました。アリガトです。
625デフォルトの名無しさん:2008/03/29(土) 17:03:54
「ます」「ただいま」
という二つの単語がある場合で
上記2つにはマッチするが
たとえば「まる」という言葉にはマッチしないようにする
正規表現ってどうやればいいですか?

今は「ます」と「ただいま」の2語をマッチするようにしているのですが、
やり方が悪いのか「まる」という言葉でもマッチしてしまいます。
626デフォルトの名無しさん:2008/03/29(土) 17:12:13
>今は「ます」と「ただいま」の2語をマッチするようにしている
具体的にはどうしているの?
627デフォルトの名無しさん:2008/03/29(土) 17:15:05
(ます)|(ただいま)

どう間違えると「まる」にマッチするのか知りたい。
628625:2008/03/29(土) 18:03:22
()なんてあったのか!

解決しました!ありがとうございます。
629デフォルトの名無しさん:2008/03/29(土) 18:12:12
どうやっていて (ます|ただいま) にマッチさせたいのに まる に
マッチしてたのかという謎を解決して欲しいです。
630デフォルトの名無しさん:2008/03/29(土) 18:43:26
>>627
そんな書き方があるとは知らなかった
どの正規表現実装か教えてくれ
631デフォルトの名無しさん:2008/03/29(土) 21:09:51
Firefox2.0.0.13の拡張機能Adblock Plus 0.7.5.3でフィルタを登録しています。
/[\W_]ad(?!=&)(banner|click|conmatch|eeper|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|trix|xchange|wrapper)?s?[\W\d_]/

これが↓にもヒットしてしまい表示されなくて困ってます。
ttp://navi.ekitan.com/ppnavi/Dr?PC=&uid=&dir=22&path=2008032920482250400&flati=12485742&flong=48790567&fland=%E5%A4%A7%E9%98%AA%E5%BA%9C%E5%A4%A7%E9%98%AA%E5%B8%82%E4%B8%AD%E5%A4%AE%E5%8C%BA%E5%A4%A7%E9%98%AA%E5%9F%8E1-1&ftell=&sf=10900
デコードすると、
ttp://navi.ekitan.com/ppnavi/Dr?PC=&uid=&dir=22&path=2008032920482250400&flati=12485742&flong=48790567&fland=大阪府大阪市中央区大阪城1-1&ftell=&sf=10900
よく分らないのですが、"中"の%E4%B8%ADに当たってるようです。

一番よく使ってるフィルタなので消したくないです。
このフィルタで"中"にはヒットしないような正規表現は可能ですか?
632デフォルトの名無しさん:2008/03/29(土) 21:55:14
/[^%A-Za-z0-9]
633デフォルトの名無しさん:2008/03/30(日) 07:49:32
一番外側の開始文字〜終了文字までを
マッチさせるようなのは正規表現でいけません?

開始終了を括弧としたら
"(((1 + 2) * 3) - 4) / 5"
の時
"(((1 + 2) * 3) - 4)"
ここまで取れない?

括弧見づらいからブレイスにするけど
/{([^{}]*|{[^{}]*})*}/
だと2段までしかとれないのは何故?
634デフォルトの名無しさん:2008/03/30(日) 08:00:38
/{([^{}]*|{([^{}]*|{[^{}]*})})*}/

こうすれば3段までマッチさせられるよ。
635デフォルトの名無しさん:2008/03/30(日) 09:04:26
普通に最長一致させてやりゃいいんでないの?
(1+2)*3)-4 みたいな構文が来たら困るけど
636デフォルトの名無しさん:2008/04/03(木) 12:27:53
質問ですperl5.8です

<aaa bbb ccc>
ddddddddddddd<aaa>

検索:<aaa.*?>(.+?)<aaa> で検索したけどマッチしません。どなたかよろしくお願いします
637デフォルトの名無しさん:2008/04/03(木) 13:22:02
>>636
.*? の部分かな。
<aaa[^>]*> でどうだろう。
638デフォルトの名無しさん:2008/04/03(木) 14:20:12
>>636
対象が複数行なんだよね?

$str = "<aaa bbb ccc>\nddddddddddddd<aaa>";
$str =~ s/<aaa.*?>(.+?)<aaa>/$1/s; # 後ろに s つける
print $str;
639デフォルトの名無しさん:2008/04/03(木) 14:22:45
改行のせいだろJK

(?s-:<aaa.*?>(.+?)<aaa>)
640デフォルトの名無しさん:2008/04/03(木) 14:23:10
うわぁ、更新してなかったorz
641デフォルトの名無しさん:2008/04/03(木) 22:23:59
みなさんレスありがとう>>636です
上手くいかないです^^;
もうちょっとガムバッテみます
複数行になると難しいですね
続いた行はできそうな気がするんだけどできないorz
642デフォルトの名無しさん:2008/04/03(木) 22:43:52
while (<FH>) { /pattern/s; # 先生、何もマッチしません }
if (@lines =~ /pattern/s) { # 先生、ここ通りません }

どっちか知らないけど。
643デフォルトの名無しさん:2008/04/04(金) 20:06:53
" 11 11 "
これにマッチあせて"11 11"を取得することはできますか?
「 *([^ ]*[.]*[^ ]*) *」
でやってみたのですがうまく取得できなくて・・・
スペースは全て全角です
お願いします
644デフォルトの名無しさん:2008/04/04(金) 21:22:00
>>643
途中の[.]*でぶっ飛んでる。つーか、. に [ ] つける意味がないよね。
645デフォルトの名無しさん:2008/04/04(金) 21:30:34
>>644
じゃあ教えてあげればいいのに文句書くだけなら解答者じゃない荒らしだ
どっか池

こんな感じか違うかw
".1+.*?"
646デフォルトの名無しさん:2008/04/04(金) 21:35:40
スペースが全角って、もとの文字列がってこと?
あと 11 と 11 は同じ文字?
それなら

+(([^ ]*) +\1) +

かな。全角を認識させたいなら・・・環境によるなぁ。
647デフォルトの名無しさん:2008/04/04(金) 22:01:59
perl5.8です
文字列を3行続けて取得したいのですが教えて下さい

【郵便】100-0001
【住所】東京都○○区○○町1-2-3 もしくは 神奈川県○○市○○町1-2-3○○○○○○○○マンション3階303号室
【電話】03-3000-XXXX

1行目、3行目は行頭にそれぞれ【郵便】【電話】がありますが
2行目の住所部分はマンション名が長かったりすると【住所】はなくて行頭が東京都や神奈川県から始まる行もあります

3行連続で取得する方法教えて下さい
648デフォルトの名無しさん:2008/04/04(金) 22:18:25
【郵便】[.\n]*?【電話】.*
649デフォルトの名無しさん:2008/04/04(金) 22:26:17
650デフォルトの名無しさん:2008/04/05(土) 00:02:46
>>646
「○11○5656○」
○は全角スペースです
全角スペースに囲まれた文字列を取得したくて・・・
11とか5656は任意の文字で
間に全角スペースが入っているかもしれないんです
上の文字列だったら「11○5656」
って感じで
わかり難い書き方して申し訳ないです
651デフォルトの名無しさん:2008/04/05(土) 00:10:43
>>650
言語は?
652デフォルトの名無しさん:2008/04/05(土) 00:19:51
○(.*)○
これで抽出できないかな?正規表現始めたばっかでよくわからないけど
653デフォルトの名無しさん:2008/04/05(土) 00:20:47
○*(.*)○*
こうか、すまん
654デフォルトの名無しさん:2008/04/05(土) 00:21:36
基本的に正規表現は最長一致するから >>652 で問題ないんじゃない?
655デフォルトの名無しさん:2008/04/05(土) 00:27:45
test
656デフォルトの名無しさん:2008/04/05(土) 01:28:02
>>650
言語と文字コードがないとあきまへんが、なんとかせーっちゅーなら、

(\xe3\x80\x80|\xa1\xa1|\x81@)(.*)(\xe3\x80\x80|\xa1\xa1|\x81@)

これでいけますわ。utf-8,shift_jis,euc-jpなんでもこいのすぐれものや。
657デフォルトの名無しさん:2008/04/05(土) 01:59:54
どうして正規表現はいつもいつも顔文字に見えてしまうんですか?
658デフォルトの名無しさん:2008/04/05(土) 02:59:24
>>650
「○11○5656○」
これの1個目3個目の空白はマッチさせないんだよね
2個目の空白は実際にはあるかないかわからない
両隣は任意の文字
ん〜これピッタシあわせるのは今の情報だけでは難しいというより不可能じゃないでしょうか
任意の文字が半角だけの構成なら[0-9][a-z]簡単なんだけどなー
何か他にkeyに出来そうなのないですか?

それとここで解答者が自分の環境でよい結果が出てもあなたの環境ではマッチしないかもしれない
環境に合った正規表現の使い方をしないとマッチさせれない場合がありますよ
質問者も解答者も徒労に終わるので
あなたが正規表現をどのように使うのか記載したほうがいいよ
正規表現を扱おうとする言語もしくは正規表現を扱えるエディターで検索しようとしているのか
あなたを攻めてるわけではないので誤解しないようにね
659デフォルトの名無しさん:2008/04/05(土) 03:16:49
>>650
[^\x81@].*[^\x81@]
660デフォルトの名無しさん:2008/04/05(土) 08:53:44
>>653
ああ、そうか。そうだな。
661650:2008/04/05(土) 12:28:26
すみません戻りました
皆様レスありがとうございます
「○11○5656○」
○は全角スペース、何個あるかわからないし、ないかもしれません
「一三○四○○○」だったら「一三○四」
「○○○○八九4○○た」だったら「八九4○○た」
こんな感じで取得したいです
他の文字は任意です。全角の場合が多いですが
言語はJava、コードはUnicodeかな?
簡単に言うと両端の全角スペースをトリムしたいだけなのですが・・・
わかり難い表現ですみません
662デフォルトの名無しさん:2008/04/05(土) 12:35:01
先頭の全角スペースを除去、末尾の全角スペースを除去
という処理にしたほうが簡単だよ

非欲張りなのが使えればこうかな
/ *(.*?) *$/
663デフォルトの名無しさん:2008/04/05(土) 12:50:55
/^□*([^□]+(□+[^□]+)*)□*$/
664デフォルトの名無しさん:2008/04/07(月) 03:05:23
gawk3.16です
2行に渡る文字列を検索でマッチさせたいです
<title(.+?)\n.*title>
秀丸(正規表現ON)ではマッチしていたのですがgawkではマッチしません
アドバイス頂けましたら幸いです
どうぞよろしくお願い致します
665デフォルトの名無しさん:2008/04/07(月) 03:14:35
mオプション可能な処理系を使うか、事前に加工しとくか。
666デフォルトの名無しさん:2008/04/07(月) 04:08:57
>>665さん
mオプション
マルチラインですね
実はgawkのスクリピトを教えていただいたのです
とても気に入り今後末永く使わせていただこうと思うのですが
複数行の検索が秀丸と違うようなので戸惑っています
他にgawkのアドバイスありましたらよろしくお願いします
667デフォルトの名無しさん:2008/04/07(月) 06:08:38
>666
相変わらず具体的じゃないのね。
665をやったがこういう風にうまくいかなかったとか
こうしたけどダメだったとかあれば、アドバイスのしようもありますが、
他にアドバイスと言われてもなかなか。
668デフォルトの名無しさん:2008/04/07(月) 08:58:29
>>666
ない物は仕方ない。
mオプションの正規表現を組み込んだawkを自前で作る?
perlとか、正規表現が拡張されてる処理系に移った方が、後々幸せ。
669デフォルトの名無しさん:2008/04/07(月) 13:26:21
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さん
レスありがとうです
670デフォルトの名無しさん:2008/04/07(月) 13:57:34
>>669
気付け。gawkじゃ無理。
FSはフィールドセパレータ。用途が全然違う。
671デフォルトの名無しさん:2008/04/07(月) 14:00:36
そういうのはどうしてもawkでやりたければtrで改行文字を置換してからawkで処理して戻すとかやるからなぁ。
awkだけじゃなくて、基本的な知識が足りなすぎるよ。
672デフォルトの名無しさん:2008/04/07(月) 14:04:12
>>669です
>>670さん
>>671さん
gawkは諦めた方がよいかもしれないですね
私じゃ無理だということはわかりました
アドバイスありがとうございました^^;
673デフォルトの名無しさん:2008/04/07(月) 16:01:44
<element attribute>マルチラインを
キャプチャしたいんです</element>

このお題はまだ続くのかな。

> perl5.8です
> gawk3.16です
次は何だろ。
674デフォルトの名無しさん:2008/04/08(火) 00:07:32
>>673
残念でした
秀丸
perl
gawk
ですよw

秀丸でもう少しのところまでいけたんだけど
データが長すぎて最後のソートが出来なかったんだ
それでエクセルとかでやろうとしたんだけど
文字化けで遠回りした
正規表現扱えないんだってわかるのに1週間かかったw
んで改めてやってるんよ
データ形式をちょっと変えて保存するだけなんだけど
こんなに難しいとは思わなかった
秀丸スレの人たちとUWSCスレの人たちのお陰で
ここまでなんとか前進できた
いつも「もう少しだっ」って思っていたところへたどり着くまでに
思いもよらぬ壁が現れるんだ
この正規表現もそうだね
私は正規表現って生まれて始めて知ったんだ
またお願いしますね
オヤシミ^^
675デフォルトの名無しさん:2008/04/08(火) 03:18:20
>>674
Excelでも正規表現使えるよ。
CreateObject で正規表現オブジェクトを使えるようにすればね。

つか、Perlでできなかったてーのはなんでだ?
676デフォルトの名無しさん:2008/04/08(火) 03:25:58
>>675
perlで出来そうなんだけど私が作れないだけ^^;
オヤシミノシ
677デフォルトの名無しさん:2008/04/08(火) 05:15:30
>>676
正規表現使うならperlじゃなくてもいいが何かプログラミング言語もやっといたほうが自由度はあがると思うけどな。
perlは何するにしても過去の遺産のおかげで楽ができるから趣味でやる分にはお勧め。
678デフォルトの名無しさん:2008/04/08(火) 14:44:33
いくつかのスレで見かけたけど、大本のやりたいことは何なの?
ウェブページをテキストで取り込んでデータベース可?
なんだかやりたいことの過程で部分部分でこのソフトでこうするのはどうしたらいいか
とういう質問でよく分からない。

紙copi/紙copi lite/Kamicopi/ネタの種 12
http://pc11.2ch.net/test/read.cgi/software/1201627570/
あたりのソフトを使えば良いんじゃないか?とか思っちゃうんですが、見当違いだったらごめんね。
679デフォルトの名無しさん:2008/04/08(火) 18:46:44
>>678
紙コピ持ってるよ
最初はスゲーとか思ってシェア払って正規ユーザーなったけど
加工で正規表現検索できないので役に立たない
ビジネスバージョンも抽選で当たったけど
もう使ってないよ

やりたいことは何十回も書いてるよ
ここで書くのもなんなんだけど
既存のファイルからタイトルとデータ1箇所を抽出して一覧表作りたいだけ

<ol>
<li><a href="ファイル名">タイトル</a></li>
<li>データ</li>
</li>予備項目(空欄)</li>
</ol>

この前ファイル名とタイトルの部分を作ってくれた方が居たんだけど
その下にデータ項目と予備項目を作らなければいけないことがわかって
もっかい頼んだら後でコロコロ変わるってことで断られた
それで自分でやってるわけ^^;
680デフォルトの名無しさん:2008/04/08(火) 22:33:34
素朴な疑問だが、「シェア払って」ってなに?
681デフォルトの名無しさん:2008/04/08(火) 23:15:19
「シェア払って」ですか
「お金払って」ですね
682デフォルトの名無しさん:2008/04/09(水) 11:27:48
シェアウェアにシェアフィーをシェア、って早口言葉みたいだ。
683デフォルトの名無しさん:2008/04/11(金) 01:20:21
Wiki(pedia)って感じだな。
684デフォルトの名無しさん:2008/04/11(金) 10:39:52
詳説 正規表現 第3版の訳本がやっと出るっぽいな
原書あるから要らんけど…
685デフォルトの名無しさん:2008/04/11(金) 18:59:29
Perl5.8.2です。
「あかスまのた゚」「゙ナをフaき」のように、
規則性のない全角かな・カナ、半角かな・カナ(濁点半濁点含む)をマッチさせたいのですが
例えば上の例ですとどのようなパターンで記述すればいいでしょうか?
文字コードは何でも構いませんが、可能ならeuc-jpが良いです。
よろしくお願いします。
686デフォルトの名無しさん:2008/04/11(金) 19:16:59
半角英字が混じってるように見えるが、
それは排除しなくていいのか?

Ruby なら EUC にして 0x00 〜 0x7F を排除すればいいだけだと思うが、
規則性の有無のチェックが必要とかなると正規表現では難しいかと。
687デフォルトの名無しさん:2008/04/11(金) 19:20:26
あ、全角英字や漢字も除くというか、
本当に仮名のみにするのか。
仮名の範囲の端同士で [ヲ-゚ぁ-んァ-ミム-ヶ] みたいにすればいいと思うよ。
Ruby なら文字コード指定できるから、EUC でそうやればいい。
688デフォルトの名無しさん:2008/04/11(金) 20:59:19
どうだい本当にそういうことか?
文字化けしてる領域をまるっと抽出したいってことだと思うんだが
もしそうなら>>306みたいに先読み使えばどうにかなると思う
689デフォルトの名無しさん:2008/04/12(土) 00:19:19
ttp://www.oreilly.co.jp/books/9784873113593/
第3版が出るようだけど,PHPイラネなら買うほどでもないのかな
690デフォルトの名無しさん:2008/04/12(土) 01:42:47
性器にperlを埋め込みたいんですが、腕のいいクリニックをご存知ありませんか?
691デフォルトの名無しさん:2008/04/12(土) 02:36:34
埋め込むなら、perlではなくpearlをどうぞ。
692デフォルトの名無しさん:2008/04/12(土) 05:25:33
さすがにRuby埋め込んでくれるところはないんでしょうか?
693デフォルトの名無しさん:2008/04/12(土) 08:45:46
ないね
Pythonなら最初から生えてるのにね
694デフォルトの名無しさん:2008/04/12(土) 10:20:33
朝になるとEiffelです。
695デフォルトの名無しさん:2008/04/12(土) 19:18:06
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
> _と-の扱いは?

ああ、それもいるのか・・
700デフォルトの名無しさん:2008/04/13(日) 17:07:31
先読み使える言語なら、それで一発では?
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 に怒られるのはなぜでしょうか
* をはずすと特に問題は無いのですが
703デフォルトの名無しさん:2008/04/13(日) 21:33:31
>>702
エラーメッセージでてるだろ。
そこに理由が書いてあるから読めよ。
704デフォルトの名無しさん:2008/04/14(月) 07:33:27
>>701
サンクス試してみる。
705デフォルトの名無しさん:2008/04/14(月) 08:25:50
別々にマッチした方が良くね?

706デフォルトの名無しさん:2008/04/14(月) 22:46:37
だな。おれもそうする。

どんなプログミング言語で書いてるのかわからんけど
if ($password =~ m/^[A-Za-z0-9_\-]+$/
&& $password =~ m/[0-9]/
&& $password =~ m/[A-Za-z]/) {
  ほげほげ・・・
}
みたい書いたほうが、どんな言語にも応用がきくし
あとのメンテナンスも楽だしな。
どうしても無理やり1つにまとめなきゃいかん事情があるんなら別だが。
707デフォルトの名無しさん:2008/04/16(水) 01:54:40
VC++ 2005、WinXPで開発をしています。
正規表現を扱えるライブラリを探しています。
出来れば、charとwchar_tの両方に対応しているものが欲しいと思っています。
片方なら、boostでいいと思うのですが……

どなたか、ご存知の方教えてください。
708デフォルトの名無しさん:2008/04/16(水) 07:19:25
"abc__def__ghi__jkm"という文字列があるとして、
この文字列中の「__」を任意の数だけ半角スペースに置換するという場合
(1が指定されたなら1つ、2が指定されたなら2つというように)、どのような記述になるのでしょうか。
使用言語はPerlです。

oオプションを指定して評価を1度だけにし、ループで回す、という方法は考えたのですが、
可能なら正規表現のみで完結させたいです。

どなたかご存知でしたら教えていただけないでしょうか。
よろしくお願いします。
709デフォルトの名無しさん:2008/04/16(水) 07:48:59
perlなら_でsplitしてjoinしたほうが速いような。
710デフォルトの名無しさん:2008/04/16(水) 10:45:45
正規表現でバッチ処理的な事したとき最速なのってやっぱperlか?
711デフォルトの名無しさん:2008/04/16(水) 13:58:17
ruby
712デフォルトの名無しさん:2008/04/16(水) 14:20:48
まじか。ruby早いのか
713デフォルトの名無しさん:2008/04/16(水) 14:24:48
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です。
715デフォルトの名無しさん:2008/04/17(木) 07:00:53
2chの中だったら
2ch.netというURLが必ず入るわけだから、
それが含まれている文字列にマッチするかしないかを確認すればいだけじゃないの
716デフォルトの名無しさん:2008/04/17(木) 07:37:42
2ch.netだけだと、
http://www.example.com/2ch.net/
がマッチしちゃうよ
717デフォルトの名無しさん:2008/04/17(木) 07:41:25
じゃぁ
//[^/].*2ch.net/
718デフォルトの名無しさん:2008/04/17(木) 16:16:02
itemが必ず入ってい<mark>〜</mark>を検索する方法はありましか?
その場合itemがない<mark>〜</mark>があり、これはヒットさせたくありません。

javaです。
正規表現は:<mark>.*?</mark>(?<!item.*?)

<mark> item </mark>  → うまくいく

<mark> item </mark> <mark> </mark> <mark> item </mark>  → うまくいかない
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑_↑↑↑↑↑↑↑↑↑
1個目のヒット_____________2個目のヒット
719デフォルトの名無しさん:2008/04/17(木) 18:03:59
それがXMLデータなら明らかにミスアプローチだと思う。
720デフォルトの名無しさん:2008/04/17(木) 19:42:27
>>718
そこに書かれている条件だけなら、
<mark>[^<]*item[^<]*</mark>
で上手くいくかもしれない。

<marK>とかのタグが入れ子するかもー、ということなら正規表現じゃムリ。

721デフォルトの名無しさん:2008/04/17(木) 19:57:24
正規表現でファイルに文字が存在するかチェックしています。
存在していたら中の文字を返す仕様です。
/(<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>

どんな書き方がいいでしょうか?
ご鞭撻のほどよろしくお願いします。
722デフォルトの名無しさん:2008/04/17(木) 20:00:02
</grep>がどっちの</grep>を指してるのかわかりづらい
あとそういう入れ子構造は正規表現の苦手な分野だから、ほかの手が使えるならそっちのがいい
723デフォルトの名無しさん:2008/04/17(木) 20:21:25
教えてください。
正規表現じゃないアスタリスクってなんていうんですか?
たとえばsyslog.logから始まるファイルを表示するとき

$ ls syslog.log*

こんな感じで見てるんだけど、このときの*はメタキャラクタ?
また、こういうときに正規表現を使ってみたい場合はどうすればいいですか?
724デフォルトの名無しさん:2008/04/17(木) 20:42:30
わいるどかーど
725デフォルトの名無しさん:2008/04/17(木) 21:04:26
ls | grep 正規表現
726デフォルトの名無しさん:2008/04/17(木) 21:16:35
ありがとうございます。
なるほど、確かにシェルのワイルドカードですね。
納得しました。
727721:2008/04/17(木) 22:14:46
>>722
ありがとうございます。
C言語やJAVAなんかの入れ子のifのような感じといえばわかりやすいかもしれません。
こういう処理はどうやればいいのでしょうか?
正規表現とは関係ないですがよろしくお願いします。
728デフォルトの名無しさん:2008/04/18(金) 00:05:52
>>727
パーズして構文木を作って、構文木に対していろいろ処理をするのがふ
つう。
楽をしたいなら、その変な文法をやめてXMLにしてしまえ。DOMにしてか
らイロイロすればいい。
729デフォルトの名無しさん:2008/04/18(金) 18:40:10
>>728
ありがとうございます。
正規表現でやりたいです。

テーブルタグの入れ子処理みたいなものは正規表現では難しいのですね。。。
<table>
 <tr>
  <td>
   <table>
    <tr>
     <td></td>
    </tr>
   </table>
  </td>
 </tr>
</table>
730デフォルトの名無しさん:2008/04/18(金) 21:07:38
普通の正規表現では不特定回数の入れ子を扱えません。
731デフォルトの名無しさん:2008/04/19(土) 11:38:21
正規表現を基礎から学習したいのですが、チュートリアル・サイドで
人妻がどうのとか、女子高生がどうしたとかが概説に載っていて嫌な気分になりました。

そこできちんとした書籍を購入しようと思いますがオススメはありますでしょうか?
ポケット・リファレンスあたりかな?
732デフォルトの名無しさん:2008/04/19(土) 11:48:12
正規表現って学習するようなものか?
たしかに、正規表現を何か難しいもののように扱って、
「正規表現が分かる!」とか謳ってる本は巷に溢れてるけど、
役に立つと思ったのは一冊もないね。

処理系のリファレンスでも読んで試行錯誤するのが一番いいと思う。
733デフォルトの名無しさん:2008/04/19(土) 11:59:21
さっそくご回答いただきありがとうございます。
なるほど、モヤモヤがすっきりしました。
とりあえずエディタのヘルプで生きていきます。
734デフォルトの名無しさん:2008/04/20(日) 00:56:54
普段使いする1冊。
http://www.amazon.co.jp/dp/4798109126/
一応理論的な説明もなくはないけどメインはリファレンス。
簡単な例(任意の1文字にマッチさせるとか)から
進んだ内容(先読みとか)まで幅広くてグッド。
735デフォルトの名無しさん:2008/04/22(火) 09:23:34
詳説正規表現第2版の何が不満なのか
736デフォルトの名無しさん:2008/04/22(火) 09:30:00
もうすぐ3版が出るところだろ
737デフォルトの名無しさん:2008/04/22(火) 16:29:32
今週
738デフォルトの名無しさん:2008/04/22(火) 23:25:14
公式で買ったらもう届いたw
739デフォルトの名無しさん:2008/04/23(水) 04:50:49
2版だってまだ読み終わってないよorz
740デフォルトの名無しさん:2008/04/23(水) 08:33:46
>>738
マジかよwいいなー
741デフォルトの名無しさん:2008/04/23(水) 23:54:46
>>738
書評頼むよ
2版からどう変わってた?
742デフォルトの名無しさん:2008/04/24(木) 22:03:25
教えてください
地図のアドレスなのですが
http://abc.com/map.php?x=123.4567890&y=34.56789012&z=1
これを下のように置換したいのですがどうやればよいのでしょうか?
x=とy=の値を取り出して
http://def.com/map.html?x=123.4567890&y=34.56789012&z=19
のようにしたいのですがよろしくお願いします。

rubyを勉強中です。
743デフォルトの名無しさん:2008/04/25(金) 07:01:17
URIはパーサ使えばいいやん
744デフォルトの名無しさん:2008/04/25(金) 09:13:28
>>742
'&'(と'?')でsplit()してからの方が楽だったりするかな。
745デフォルトの名無しさん:2008/04/26(土) 04:02:00
perl なら
s!abc\.com/map\.php!def.com/map.html!
s!=1!=19!
かな。簡単なんだけどな。
ruby氏ね
746デフォルトの名無しさん:2008/04/26(土) 05:35:42
ええ!!
rubyのどこが嫌い?
747デフォルトの名無しさん:2008/04/26(土) 08:05:53
盲目的な信者のみが嫌い。
748デフォルトの名無しさん:2008/04/26(土) 09:37:52
↑こいつ頭おかしいからw
749デフォルトの名無しさん:2008/04/26(土) 11:09:34
perlの方がガチ
750デフォルトの名無しさん:2008/04/26(土) 15:15:37
だからぁ、perl なら >>745 に示したとおり、実に簡単に解決できるだろ?
751デフォルトの名無しさん:2008/04/26(土) 17:04:38
せめて
s!z=1!z=19!

s!=1$!=19!
にしないと。
752デフォルトの名無しさん:2008/04/27(日) 09:13:42
2 重引用符に囲まれた文字列".*?"を取り出すにはどうしたらいいか分かります?

"2ch"
2ch
753デフォルトの名無しさん:2008/04/27(日) 09:18:04
>>1
> 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
754デフォルトの名無しさん:2008/04/27(日) 09:21:10
()で括れば済む話じゃね
755デフォルトの名無しさん:2008/04/27(日) 09:41:57
これは失礼しました
Speeeeedで2 重引用符に囲まれた文字列を取り出したいです
756デフォルトの名無しさん:2008/04/27(日) 10:09:30
解決しました!
757デフォルトの名無しさん:2008/04/28(月) 14:17:03
s="1234567890"
s="abcdefghijk"

これを
123
456
789
0

ab
cd
ef
gh
ij
k

のように取り出すことはで来ますか?
任意の文字を個数で指定して取り出すことです。難しすぎて分かりません。
java, javascriptです。
758デフォルトの名無しさん:2008/04/28(月) 14:30:17
/.{3}/
/.{2}/
759デフォルトの名無しさん:2008/04/28(月) 14:36:10
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のじゃ中途半端なものが取り出せない。
760デフォルトの名無しさん:2008/04/28(月) 14:39:28
/.{1,3}/みたいにすればいいじゃん
761デフォルトの名無しさん:2008/04/28(月) 14:40:33
最大一致だからそれでいいか
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みたいな整形は無理なんでしょうか。
763デフォルトの名無しさん:2008/04/28(月) 15:37:25
取り出すって配列として取り出すんじゃなくて、
ああいう形の文字列として取り出すってことかよ
それは正規表現の仕事じゃない
764デフォルトの名無しさん:2008/04/28(月) 15:40:28
s="abcdefghijk"
reg=/(...)(...)(...)/;
arr=reg.exec(s);
arr=s.match(reg);

一応不完全ですが、固定ならこういう感じなんですけど、可変長で出来ないのでしょうか。
765デフォルトの名無しさん:2008/04/28(月) 17:43:50
 .*
ドットが任意の改行以外ですが、改行にマッチさせたいときどのパターンになるんでしょうか。

func() {
a
b
}


func(){return c}
としたいときに改行マッチが必要になります。

k2editorです。
K2Editorの検索は、正規表現を使うものに関してはK2Regexp.dllによって行われています。 K2Regexp.dllは、Baba氏のBREGEXP.DLLに独自の拡張を施したライブラリで、 perl5互換の正規表現が使用できます。 

766デフォルトの名無しさん:2008/04/28(月) 17:46:01
\n
767デフォルトの名無しさん:2008/04/28(月) 18:21:42
"abcdefghijk".match(/.{1,3}/g);
768デフォルトの名無しさん:2008/04/28(月) 19:08:50
>>767
ああ、さんきゅうー
769デフォルトの名無しさん:2008/04/28(月) 21:29:46
javaの方も出来たけど、javaのregexは難しいな。Mathcerの操作が少し変てこ。
770デフォルトの名無しさん:2008/04/29(火) 07:51:48
>>766
どうやるんですか?
771デフォルトの名無しさん:2008/04/29(火) 10:19:41
Matcher
772デフォルトの名無しさん:2008/04/29(火) 11:30:13
>>765,770
K2Regexp.dll自体は、Perlなどと同じように (?s) を使えば . が改行にもマッチするようになる。
しかし、通常K2Editorは1行分のデータしかK2Regexpには渡さないので、そのままでは
複数行の検索はできない。検索文字列に \n や \s が含まれていた場合は、その数を数えて、
その分のデータをK2Regexpに渡すようになっているので、その場合は複数行の検索が可能。
結局、K2Editorで、改行を含む任意の1文字にマッチするパターンは、
[\s\S] あるいは (.|\n) のいずれかが適当と思われる。

なお、K2Regexp.dllは、bregonig.dllに同梱のものに差し替えて使うのがお薦め。
773デフォルトの名無しさん:2008/04/29(火) 12:35:33
(.|\n) は気づいたんですけど、[\s\S] は築きませんでした。
知らなかったんですけど . ドットは文字じゃないんですか。
[ . \n]ではヒットしないんで。 
秀丸は少し独特だけど、K2は改行もヒットするしK2の方を使います。
774デフォルトの名無しさん:2008/04/29(火) 12:38:34
[ ] の中の . は . そのものとして扱われる。
775デフォルトの名無しさん:2008/04/29(火) 12:46:52
func1(){
a
b
}

func2(){
a
b
}

\{(\n|.)*?\}
{c}

func1(){c}

func2(){c}

ま、こんなとこですかw
便利便利w

>[ ] の中の . は . そのものとして扱われる。 

 . は文字クラスじゃないんですか。
改行\n \r マッチが目的なら、[^\0]とかじゃダメですか?
776デフォルトの名無しさん:2008/04/29(火) 23:45:11
>  . は文字クラスじゃないんですか。
何を言いたいのかよく分からない。
. はメタ文字であるが、文字クラスの中(すなわち [ ] の中)では
メタ文字ではなくリテラルとして扱われる。
777デフォルトの名無しさん:2008/04/30(水) 11:11:34
第3版で気に入らないのは、太字が明朝体なところだけ
2版ではゴシックだったのに、この部分は改悪といってもいいんじゃなかろうか
それ以外は結構満足だけど、オビの、「新訳でさらに読みやすくなりました。」
ってのはちょっと言い過ぎかも

Javaについて結構な修正が入ってるっぽいけど、
まだそこまでいってねー
778デフォルトの名無しさん:2008/04/30(水) 22:33:45
>>777

[[.cc.]]*cに関して何か言及してる?
合成文字関連でその辺の話題が気になる。
779デフォルトの名無しさん:2008/05/04(日) 16:55:09
Speeeeedで行末に.があったら削除する正規表現を教えてください
780デフォルトの名無しさん:2008/05/04(日) 16:57:43
$  行末
   (例)。$
   行末の区点(。)にのみマッチし、それ以外の「。」にはマッチしない

ちなみに「.」はエスケープする必要があります
781デフォルトの名無しさん:2008/05/04(日) 17:07:38
>>780
即レスありがとうございます

検索文字列\.$としてみましたが上手くいきません・・・
782デフォルトの名無しさん:2008/05/04(日) 17:12:49
>>781
そのソフト使ったことないからよく分からないけど
正規表現使うにはBREGEXP.DLLが必要みたいだけど入ってる?
正規表現検索にチェックついてる?
置換文字列は空白になってる?
783デフォルトの名無しさん:2008/05/04(日) 17:15:46
>>782
はい。なっています
784デフォルトの名無しさん:2008/05/04(日) 17:22:26
>>783
いまためしたみた
↓でうまくいった、ごめんな

[\.$]
785デフォルトの名無しさん:2008/05/04(日) 17:31:07
>>784
できました!
ありがとうございます
786デフォルトの名無しさん:2008/05/04(日) 17:35:18
>>784
すみません
[\.$]だとすべての.を削除しませんか?
787デフォルトの名無しさん:2008/05/04(日) 17:37:31
>>786
なっちゃうね、悪気はなかったんだけどごめん
他の回答者さんを待ってくださいorz
788デフォルトの名無しさん:2008/05/04(日) 17:44:19
スマートじゃないけどこうかな

検索文字列 \.$\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
これね。
http://www.vector.co.jp/magazine/softnews/020316/n02031623_pic.html

使ったこと無いけど、もしかして↓を付けたらOKかも。(マルチラインモード)
自分で試してみてね。

     [レ]m(M)
791デフォルトの名無しさん:2008/05/05(月) 16:46:25
----
名前:
佐藤よしお
----
趣味:
野球☆
あやとり☆
----
好きな食べ物:
しょうゆ☆
みそ☆
なっとう☆
----
名前:
加藤たけし
(以下、同じように膨大な人数分続くものとする)


他スレから誘導されてきました
このようなテキストファイルがあって
「好きな食べ物」の項目の行末の「☆」だけまとめて消したい、
言い換えれば「好きな食べ物:」から最初の「----」までの間の「☆」だけを
まとめて空白に置換したい場合
どのように指定してやればいいのでしょうか?
趣味、好きな食べ物とも人により個数はまちまちで、一行にひとつ表示、
行末にすべて「☆」がついてます
どうかよろしくお願いします
792デフォルトの名無しさん:2008/05/05(月) 16:49:18
なにで処理する予定?
793791:2008/05/05(月) 16:54:05
テキストエディタのEmEditor Freeを使っているのですが
WinXP対応のフリーで使えるソフトであれば何でもかまいませんm(_)m
794デフォルトの名無しさん:2008/05/05(月) 17:18:17
"☆"を""に置換するだけ。
795デフォルトの名無しさん:2008/05/05(月) 17:19:09
違うだろ
796デフォルトの名無しさん:2008/05/05(月) 18:45:33
「好きな食べ物:」から最初の「----」までを選択状態にして>>794
797デフォルトの名無しさん:2008/05/05(月) 18:53:13
あほばっかり
798デフォルトの名無しさん:2008/05/05(月) 19:30:34
なんかゴミが一人いるようだけど>>796でまったく問題ない。
799791:2008/05/05(月) 20:04:54
数が膨大で、いちいち選択するのがたいへんなので
一括でできたらいいんですが・・・
そういうツールはないのでしょうか
800デフォルトの名無しさん:2008/05/05(月) 20:59:49
アホ。ここもすれ違いだな。
801デフォルトの名無しさん:2008/05/05(月) 21:12:22
>>799
無能な人間ばっかりですいません。
他をあたってください。
802デフォルトの名無しさん:2008/05/05(月) 23:50:35
>>791
秀丸エディター → 検索 → grepして置換
HMJRE.DLL V1.85
正規表現ON

検索:好きな食べ物:\n(.+?)☆\n(.+)☆\n(.+?)☆
置換:好きな食べ物:\n\1\n\2\n\3\
これでどうでしょうか
803デフォルトの名無しさん:2008/05/06(火) 03:42:23
>>802
好きな食べ物の数は固定じゃないんじゃないか?

>>791
sed でこんなのとか。

sed -e "/好きな食べ物/,/----/s/☆ *$//" 

マルチバイト文字食える sed くらい転がってるだろ。


804デフォルトの名無しさん:2008/05/06(火) 03:57:14
>>803
それですね
最後のあたりよく読んでなった^^;

>>791さん
>>803さんのを参考にしてください
805791:2008/05/06(火) 08:46:23
>>803 >>802
すごい、5万行オーバーのが一瞬で出来ちゃいました\(^o^)/
sed、自分でもいろいろ勉強してみようと思います。
まことにありがとうございました。
806デフォルトの名無しさん:2008/05/08(木) 11:17:48
ローマ字としてちゃんと読める10文字のアルファベットはどう表現すればいいですか

[KSTNHMYRWGZDBP][AIUEO]
の5連続でも満たすけど、Nやア行が入らない
ヘボン式表記は無視でいいです

処理系はtripper+です
807デフォルトの名無しさん:2008/05/08(木) 12:03:30
トリッパーだけでは無理っぽい
トリッパーで ^([KSTNHMYRWGZDBP][AIUEO]|[AIUEON]) の5連続を検索して
テキストエディタで [^0-9a-zCFJLQVX./]{9,} を検索すればいいんじゃないかな
808デフォルトの名無しさん:2008/05/08(木) 12:20:44
なるほど
広くひっかけて後で絞った方が楽だし速そう

じゃあもう、[ABDEGHIKMNOPRSTUWYZ]の10連続の結果に対して、
拗音や促音も含めて読めるパターンはどう書けばいいでしょう
809デフォルトの名無しさん:2008/05/08(木) 14:00:00
^(([KSTNHMYRWGZDBP])\2?Y?[AIUEO]|[AIUEON])*$

↑のパターンを使えばトリッパーだけで検索可能だった
大文字・小文字の区別無しならHitしまくり
810デフォルトの名無しさん:2008/05/08(木) 14:31:45
おお
>>806の方法でやってるよりも明らかに速いペースで見つかる
促音だけ目をつぶって、これで必要十分だと思います
ありがとうございました
811デフォルトの名無しさん:2008/05/08(木) 14:35:38
ああ、違う
促音にも対応してあるのか
全然ヒットしないだけで
812デフォルトの名無しさん:2008/05/15(木) 16:31:56
PHPの正規表現について質問なのですが、
「任意の文字列の中にABCという文字列が含まれていたら」というルールを記述する時には
どのようにかけばよいのでしょうか?
813デフォルトの名無しさん:2008/05/15(木) 16:54:19
文字列中にある[]で括られた文字列を抽出するには
どのように書けばいいのでしょうか?

例えば
 AAAA[1234]BBBB
から
 [1234]
だけを抽出したいです。

よろしくお願いします。
814デフォルトの名無しさん:2008/05/15(木) 17:54:06
(\[[^\]]*\])
815デフォルトの名無しさん:2008/05/15(木) 23:05:57
最短一致が使えるなら (\[.*?\])
816デフォルトの名無しさん:2008/05/16(金) 00:26:58
つか、こういう文字列の最短抽出にしか正規表現使ってない気がする
817デフォルトの名無しさん:2008/05/16(金) 01:50:31
そう言えば・・・ずっと前から思ってた。
最長一致って使いづらいよね。
たぶん使いたい人がいるから、そういう仕様なんだろうけど
オレは不便で不便で仕方ないと思う。
まんどくせぇ〜〜〜〜
818デフォルトの名無しさん:2008/05/16(金) 02:40:32
使いたい人がいるからとかそういう話じゃなくてツール・言語の歴史に関連することで・・・

もともとsedやawkしかなかった時代には最長一致しかなかったんだぜ。
でも正規表現の書き方によって最短一致に対応することが可能だからそれでいいじゃんと
考えられてたのだろうと思う。
(逆に最短一致しかなければ最長一致に対応することはできないしね)
perlあたりからやっぱ最短一致の表現もあったほうが便利じゃねって感じで導入されたんだろ
819デフォルトの名無しさん:2008/05/16(金) 09:40:42
正規表現は何かと記号が多くてエスケープしまくりになる。
perlあたりが幅を利かせて、perl互換になるように右へならえしてるけど、
javaとかmsとかibmあたりがデファクトの記法を作ってくんないかな。
regexpを実装する方もperl記法に合わせると仕様がでかすぎで大変だろに。
820デフォルトの名無しさん:2008/05/16(金) 16:39:12
Unicode前提にして、豊富な記号文字を駆使しても面白いかも。
現状だと、同じ記号が文脈によって違う意味になったり、
言語に組み込まれると、その言語の記号とも混同しそうだし。
821デフォルトの名無しさん:2008/05/16(金) 17:17:48
今、perl とかけ離れたセイキヒョウゲンの仕様を作って、
それがデファクトになる可能性がどんだけあるんだ?
Sun や IBM や MS なんか、日本じゃお上様も同然だけど、普通の営利企業なんだぜ?
822デフォルトの名無しさん:2008/05/16(金) 18:23:46
このスレだとPerlも生き生きしてるんだ!
823デフォルトの名無しさん:2008/05/16(金) 18:29:13
>>817
意味がわからない。最長一致がないと。
例えばAで始まる単語(A\w*)と言った簡単な表現すらできない。
普通は最短一致の使用頻度はかなり少ないと思うけど。
同じ内容なら最長一致のより遅くなるってのもある。
824デフォルトの名無しさん:2008/05/16(金) 19:49:21
いっそ[a-zA-Z0-9_]以外は全てエスケープが必要って仕様にしてくれw
その方が逆に分かりやすいw
javascriptはエスケープ廃止になるんじゃなかったか
825デフォルトの名無しさん:2008/05/16(金) 19:53:17 BE:576548429-2BP(0)
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
テメーら、正規を舐めんじゃねぇぞ!
829デフォルトの名無しさん:2008/05/16(金) 21:35:31
ちょっとわかりにくかったね。突っ込んでるのは
>たぶん使いたい人がいるから、そういう仕様なんだろうけど
>オレは不便で不便で仕方ないと思う。

のところで『使用頻度の少ない機能』が『デフォルト』で
あったほうが良いような発言をしてるから、なんのこっちゃってこと

最長一致がないと困るケースなんぞいくらでもあるのに
『たぶん』とかさ、ほんとにこの人正規表現わかってるんだろうか
830デフォルトの名無しさん:2008/05/16(金) 21:51:50
>>825 h?t?tp://[^./]+\.2ch\.net/\S+?/\d+/?
831825:2008/05/16(金) 22:09:52
>>830
ありがと
832デフォルトの名無しさん:2008/05/16(金) 22:18:14
>>827
今でもこういう化石がいるのかw
コボルと一緒に絶滅したのかと思ってたw
833デフォルトの名無しさん:2008/05/16(金) 22:21:37
ed, sedはカーソル移動をregexpでやるんですか。知らんかった。
viスクリーンエディタ様様やな
834デフォルトの名無しさん:2008/05/16(金) 22:23:12
コボラーの俺が通りますよっと
835デフォルトの名無しさん:2008/05/16(金) 22:40:31
そのまま通り過ぎろ
836デフォルトの名無しさん:2008/05/16(金) 23:07:43
grepの由来はg/RE/p
837825:2008/05/16(金) 23:58:39
>>830
のやつで実験して日本語文字(なぜかあった、アクセスはもちろん出来ない)も引っかかったんで
自分なりにまた改造してみたんで一応張っときますね

h?t?tp://[-a-zA-Z0-9]+\.2ch\.net/[-./a-zA-Z0-9]*?/\d+/?
838デフォルトの名無しさん:2008/05/17(土) 08:30:50
素人丸出しですまんけど、正規表現ライブラリとやらを作ってる人が独自の仕様を作ることはできないの?
そりゃデファクトスタンダード勝ち得てるらしい位だから、Perlの正規表現仕様はそれなりに有用なんだろうけど。
Perlの仕様がアレなんで自分の使いやすいように作ってみましたー、なんて言う人が集まってみたら個別のニーズに合った使い方ができるんじゃ・・・?
839デフォルトの名無しさん:2008/05/17(土) 10:17:11
ソフトごとに違うしおおむね独自
840デフォルトの名無しさん:2008/05/17(土) 11:35:12
>>838
アプリ独自といっても細かいところだけじゃないのか。
秀丸の\fは少しビビッたが。だからいきなり記法をかえるのは無理だろ。
正規表現自体が記号を多用していて独特だからな。
上にもあったが、全ての記号はエスケープするか、
記号も文字として扱いたい場合は括弧とかでくくるのどちらかしかないな。

\[abc\]\<def\>
と冗長にするか、

\QUOTE[abc]<def>\QEND
みたいなの。

似たような仕様はJavaにもあったが、これはもう仕様を策定してデファクトになるしかない。
841デフォルトの名無しさん:2008/05/17(土) 15:17:38
viで空行/#から始まる行をまとめて削除しようとしています。
以下2つは個別に動作するのですが
g/^$/d
g/^#/d
これらをまとめようとすると動作しません
g/^#|^$/d
g/(^#|^$)/d
g/^(#|$)/d
書き方が間違っているんでしょうか・・
842デフォルトの名無しさん:2008/05/17(土) 15:20:39
\( \) \| じゃないかね
843デフォルトの名無しさん:2008/05/17(土) 15:30:03
おお、動きました。ありがつ!
844デフォルトの名無しさん:2008/05/18(日) 01:36:53
そもそもperlの正規表現でなんか変なところってあったか?
845デフォルトの名無しさん:2008/05/18(日) 03:17:09
変って言うよりも、短すぎて検索しずらいって事じゃないかな。
たとえば、java だと System.out.println() って何だ?って思ったら
 google [ System.out.println() ][検索]
で解説ページがたくさんひっかかる。
ところが、正規表現で /\d+/ の \d って何だ?って思って
 google [ \d ][検索]
とかやっても関係なさそうなのしかひかからない。
何の知識も無いヤツがパッと見て意味を調べようにも調べにくい。

・・・単に馴れの問題だけどね。毎日使ってればすぐに覚えられるのにね。
せっかくエディタに正規表現検索機能があっても使わない人はたくさんいる。



846デフォルトの名無しさん:2008/05/18(日) 03:39:44
そういう問題じゃないだろ。といっても、おまえの意見は2CHクオリチーだけどな
847デフォルトの名無しさん:2008/05/18(日) 04:16:38
「そもそも」は>>819で、PCRE だと実装が大変だろうからもっとお手軽なデファクト作れよとか
そんな話じゃないの?POSIX だと軽装すぎなのかな。
848デフォルトの名無しさん:2008/05/18(日) 06:15:52
いや、あれだろ。[]()つかったり<>使わなかったりで
正規表現は記号に頼りすぎでカオスになってる
別に手に馴染んでるから困らないけど、たまに使わなくなるといちいちマニュアル見る事になるしめんどうじゃん
結局細かい機能は使わないし忘れる
849デフォルトの名無しさん:2008/05/18(日) 06:18:50
pearlなんてしょせんはテキスト処理awkとかの延長だろ。
今じゃ言語とかいって肥大化してるけど、設計がプログラム言語じゃなくて、テキスト処理用途だったからカオスになってる。
バッチとかのテキスト処理というよりも、プログラムやりたいならrubyでいいよ。
850デフォルトの名無しさん:2008/05/18(日) 06:48:43
なんとかは思いつきでものを言うってやつですね、わかります
851デフォルトの名無しさん:2008/05/18(日) 08:07:57
的外れな事は言ってないと思うけど
852デフォルトの名無しさん:2008/05/18(日) 09:55:59
>>849
pearlは真珠、言語はperl。
853デフォルトの名無しさん:2008/05/18(日) 10:02:53
>正規表現は記号に頼りすぎでカオスになってる

気持ちはわからないでもないけど、
そもそも正規表現って数学が基になってるからしょうがない。
数式が (1 + a * (3.4 / 5.6 ** b) - c + Σf(n) みたいになるのと同じだね。
記号で抽象化されてるからこその数式みたいな強力な表現力だし。
854デフォルトの名無しさん:2008/05/18(日) 10:03:24
なんだここ?
自己破産者のスレか?
855デフォルトの名無しさん:2008/05/18(日) 10:35:24
>>853
説明するときは記号で抽象化してもいいけど、
設計するときはその記号とやらに頼る必要もなく、使いやすいように実装してほしい。
例えば今の設計だと、その数式の各各を正規表現で取り出すとしたら、正規表現のソースが汚くなるんじゃないのか?
読み返したとき何なってるのかさっぱり分からなくなる。まあ、所詮はハック専用だけど。
856デフォルトの名無しさん:2008/05/18(日) 11:09:19
記号だらけっつーとAPLが最強^H凶だな。
慣れちゃえば簡潔でイイ。
POSIXの[:alpha:]とかってのは冗長でイヤなんだけど、
こっちの方が可読性は多少は上?
忘れても、又はよく使わない表現でも、一応は読めるのが利点か。
857デフォルトの名無しさん:2008/05/18(日) 12:09:26
POSIXやISOあたりになると、少なくとも業界最強の人たちが設計してるからなんか意味あるんだろう。
何十年も前なのに、腐ってないだろ?確かに冗長ではあるけど、あんまり使わないし、それは実装依存じゃないのか?
実装依存なことは正規表現と全く関係ない。

低学歴が設計してもカオスなだけになるしwwwMSのC$みたいなのとか最強に笑えるww
858デフォルトの名無しさん:2008/05/18(日) 12:16:38
ていうか正規表現って別の字面の奴ってないの?
細かい方言はいっぱいあるけど
全く別物って見たことないな。
859デフォルトの名無しさん:2008/05/18(日) 12:20:00
個人的な意見で申し訳ないけど、D, C#, perlはカオスでそのうちゴミになる。
C++はカオスというよりも、誰もが既にゴミ言語と認めるだろう。
たぶんC++を極めたとしても、いざ何か作ろうとしても何も作れないんだろうけど。
言語とか設計というのは、あくまでソフト側の問題であるし、
冗長とか関係なくて意味不明・複雑すぎたらカオスだし、そういうもんじゃないのか?
860デフォルトの名無しさん:2008/05/18(日) 12:34:32
正規表現組み込みのPerlならともかく
C++/C#/Dを持ってくる意味がわからん
861デフォルトの名無しさん:2008/05/18(日) 13:35:42
たぶんスレ違いだろ
前後のレスと話が繋がってねーもの
862デフォルトの名無しさん:2008/05/18(日) 13:37:15
やっぱ歴史のあるCOBOLだね!
コボラーの俺バンザイ(泣
863デフォルトの名無しさん:2008/05/18(日) 14:44:21
コボルは予約語を小文字で書くとエラーになるんだろうか?
864デフォルトの名無しさん:2008/05/18(日) 17:13:25
>>827
か、かっこいいタル……
865デフォルトの名無しさん:2008/05/18(日) 17:34:59
頭おかしくなっちゃうとこうなるんだよね〜
頭んなかは記号だらけでしょw
866デフォルトの名無しさん:2008/05/18(日) 23:13:33
>>858
違う実装も可能なんだろうけど、
イライザ効果(人工知能じゃない方)があるから、
より多くの人が直観で機能を把握できる方が有利。
867デフォルトの名無しさん:2008/05/19(月) 10:21:06
その割にはUNIX界隈って無駄としか思えない車輪の再開発で溢れかえってるよな
868デフォルトの名無しさん:2008/05/19(月) 10:47:45
イライザ効果と再実装は直交するでしょ。
869デフォルトの名無しさん:2008/05/19(月) 22:53:26
可読性云々言う人は、boostのxpressiveで
パターンを変数に突っ込んで使ったら?
870デフォルトの名無しさん:2008/05/19(月) 22:55:50
regexpが言語組み込みかライブラリなのかはあまり関係ないと思うけど、どうなの?
871デフォルトの名無しさん:2008/05/19(月) 23:13:49
>>869
sedやperlで済ませるような仕事を
わざわざC++とboostで書くのかよw
872デフォルトの名無しさん:2008/05/20(火) 00:27:07
演算子の形式とか比較の機能追加とかそんなんばかりじゃなくて

検索の中断がやりやすくなるようにリカーシブコールを排除するとか
合成文字関係の対処とか、ハードウェアアクセラレーションを考えるとか

社会保険庁じゃないけど大量のデータの突合に正規表現を使うと
空間・計算のコストが洒落にならないからVMの構造の再考とか
873デフォルトの名無しさん:2008/05/20(火) 01:16:19
今pythonのお勉強中なんだが、pythonの正規表現って使いづれー
使い勝手最悪だわもーなんじゃこれ〜
正規表現が組み込み演算子じゃないのはいいとして、
正規表現クラスのメソッドmatchが文字列の"先頭"と一致するかどうかって調べてどうすんだよこれ
文字列中のどっかでマッチさせようと思ってメソッドsearch使ったらmatchオブジェクト返してこねーし
なんか俺の中で全然直感的じゃないわpython
正規表現の扱いは組み込みのperlか、直感的に馴染むrubyがいいわ
874デフォルトの名無しさん:2008/05/20(火) 01:23:26
いやいや、MatchObject返してるだろ
875デフォルトの名無しさん:2008/05/20(火) 01:29:09
よく考えると、正規表現をアレコレ使い勝手でデコレートしていくと、組み込みのパールの様になるんだと思った。
つまりpearl自体は実は言語とかじゃなくて、正規表現の現在の進化なんだとw
876デフォルトの名無しさん:2008/05/20(火) 01:32:20
モジュールで定義してある関数を使えばsearchは期待どおりの動作するけど
普通は正規表現クラスのインスタンスメソッドでsearchってやったらmatchオブジェクト返してくるだろ常識的に考えて
pythonの正規表現クラスのsearchメソッドがstringクラスで定義してあればまだ話はわかる
とりあえずモジュール定義関数とメソッドの定義をどういう基準で分けてるのか全然わからんから使いづらい
877デフォルトの名無しさん:2008/05/20(火) 01:37:18
ん?ん?

>>> 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。
879デフォルトの名無しさん:2008/05/20(火) 01:48:00
javaにはWYSIWYG文字列リテラルないの?
880デフォルトの名無しさん:2008/05/20(火) 02:25:55
>>878
それは組み込みかどうかとは関係ないんじゃないか?

Pythonはライブラリで正規表現を実現しているけど、r'' と '' という二つの形式の文字列がある。
r''のほうを使えば'\'が二倍になるのは避けられるよ。
881デフォルトの名無しさん:2008/05/20(火) 05:38:12
>>873
書籍版『Pythonチュートリアル』巻末の付録オススメ
Perl/Rubyから入ってきた人が正規表現でイラつくところをケアしてくれてる
882869:2008/05/20(火) 07:48:56
>871
だねw
あとはxオプションつけて
字下げとコメントつけるくらいかなぁ
戻り読みが入った長いパターンだと
それもつらいけど。
883デフォルトの名無しさん:2008/05/20(火) 12:44:00
>>878
ちょとワラタ
884デフォルトの名無しさん:2008/05/20(火) 13:06:11
それなら、\\\と3連続なら、\\\\\\\\\\\\ になるのか!!
885デフォルトの名無しさん:2008/05/20(火) 13:42:32
なんでそんなに増えるw
\\\をjavaの文字列リテラルで表すなら"\\\\\\"で済む
あくまで文字列リテラルの表記法がそうなっているだけで
javaの正規表現APIに渡される文字列は\を渡すべきところは\でなければならない
たとえばストリームから正規表現を文字列として読み込むときとかは\を\\にすると違うものになる
886デフォルトの名無しさん:2008/05/20(火) 13:50:01
すまん勘違い
"\\\\\\\\\\\\"で正しい
887デフォルトの名無しさん:2008/05/20(火) 13:59:44
この拝金主義者が
888デフォルトの名無しさん:2008/05/20(火) 14:17:53
>>887
斜線のどこが拝金主義?
889デフォルトの名無しさん:2008/05/20(火) 14:56:36
バックスラッシュを斜線と申すか
890デフォルトの名無しさん:2008/05/20(火) 15:02:38
>>889
斜線じゃないと?
891デフォルトの名無しさん:2008/05/20(火) 15:09:37
拝金主義者w
892デフォルトの名無しさん:2008/05/20(火) 15:10:39
パチンコ・ゴールド・ラッシュ!!
893デフォルトの名無しさん:2008/05/20(火) 19:17:44
>>890
フヒヒwwwシャーセンwww
894デフォルトの名無しさん:2008/05/20(火) 22:38:58
>>875
真珠はpearlで合ってるけど、言語はperl、aがない。
895デフォルトの名無しさん:2008/05/20(火) 22:57:06
\\\\\\\\\\\\ 円地獄!

まるで武●士みたいなヤツだな
896デフォルトの名無しさん:2008/05/20(火) 23:21:07
ちょっとかっこいいな>武●士
897デフォルトの名無しさん:2008/05/20(火) 23:22:10
>>878のつづき

で、正規表現パターンをテキストファイルから
・・・たとえば MyApplication.properties というテキストファイルから読み込むとする。
何も考えないヴァカなjavaプログラマは、テキストファイルにこう書くんだな。
 検索文字列=\\\\
 置換文字列=/
これで \ を / に置換できると思ってる。が、当然うまくいかない。

\\\\ と書くのは、あくまでもjavaソースコードの中だけで、外部のリソースから入力するときは
普通に \\ でいいんだよ。

この違い。なぜそうなるのか。
コレが理解できないヤツが結構多い。しかも結構ベテランのjavaエンジニアにもいるんだな。
898デフォルトの名無しさん:2008/05/20(火) 23:31:17
今時のクールな若いハッカーはjavaみたいなダサい言語は使わないから
899デフォルトの名無しさん:2008/05/20(火) 23:34:31
若くてクールな人は言語なんていじらずに女の子をいじります
900デフォルトの名無しさん:2008/05/20(火) 23:36:23
誰がうまいことry
901デフォルトの名無しさん:2008/05/21(水) 07:56:16
\\\\\

\\\\\\\\\\武士\\\\\\\\\\\\\\\\\
\\\\\

\\\\\\\\\\\\\\\レイク\\\\\\\\\\\ \\\\\
902デフォルトの名無しさん:2008/05/21(水) 08:23:29
>>898
どういう言語使うの?
903デフォルトの名無しさん:2008/05/21(水) 08:42:15
JAVA って正規表現リテラル使えないの?
904デフォルトの名無しさん:2008/05/21(水) 10:19:10
正規表現使ったアプリってテストデータはどうやって作るのですか?
905デフォルトの名無しさん:2008/05/21(水) 10:19:49
自分で作れば?
906デフォルトの名無しさん:2008/05/21(水) 12:28:56
テストデータは自分で作るもんだろ…
907デフォルトの名無しさん:2008/05/21(水) 12:56:04
行頭から連続したスペースを全角空白に置き換える正規表現ってどうかけばよいんでしょうか
2chにコード貼り付けるのに、インデントして見やすくしたいなと思ったんですが
意外と難しい・・
908デフォルトの名無しさん:2008/05/21(水) 13:01:51
何が難しいのか理解するのが難しい・・・
909デフォルトの名無しさん:2008/05/21(水) 13:11:22
>>907
どうせなら全角空白じゃなくて&nbsp;とかに置換汁
910デフォルトの名無しさん:2008/05/21(水) 13:16:44
あ、それでも表示いけるんでしたっけ
ちょっとテストさせてください
  ←&nbspです
911デフォルトの名無しさん:2008/05/21(水) 13:17:54
やっぱり、2つ&nbsp書いても空白一つにしかならないですね
&nbsp→空白の置換は簡単なので、
見栄えが重要な時は全角のほうがよいと思います
912デフォルトの名無しさん:2008/05/21(水) 13:27:08
あ、セミコロン付け忘れてたのでもっかい。
 1個
  2個
913デフォルトの名無しさん:2008/05/21(水) 13:28:09
スレ汚しすません・・
 への置換を目指します
914デフォルトの名無しさん:2008/05/21(水) 13:32:16
行頭にこだわる必要ないなorz・・s/ / /g
915デフォルトの名無しさん:2008/05/21(水) 13:59:33
ここは実験場じゃない。
916デフォルトの名無しさん:2008/05/21(水) 18:34:14
>>911
全角はコピペ即実行できないから嫌い
917デフォルトの名無しさん:2008/05/21(水) 21:29:43
  ↑
全角を半角に置換するスキルも無いの?
918デフォルトの名無しさん:2008/05/21(水) 21:44:04
              \   ∩─ー、
                \/ ● 、_ `ヽ
                / \( ●  ● |つ
                |   X_入__ノ   ミ 俺は釣られないクマ ・・・
                 、 (_/   ノ
                 \___ノ゙
919デフォルトの名無しさん:2008/05/21(水) 22:37:28
perlをshift-jisで書いてうまく動作させるのに苦労してた時に、
ネットで拾ってきたソースを組み込んだら謎のエラーが増えて、
さんざん困った挙句全角スペースが原因だったことがある
920デフォルトの名無しさん:2008/05/22(木) 08:33:04
全角スペースと行末の空白は可視化しておくとよろしおま。
921デフォルトの名無しさん:2008/05/22(木) 13:13:39
行末の空白が見えるのもあるんだ
922デフォルトの名無しさん:2008/05/22(木) 13:34:40
半角スペースを表示するエディタは一般的でしょ。
923デフォルトの名無しさん:2008/05/22(木) 13:42:21
保存時に行末の空白を除去するオプションがあるエディタもある。
924デフォルトの名無しさん:2008/05/22(木) 16:42:04
コンパイラがUnicode的な定義で空白文字を認識してくれればいいのに。
925デフォルトの名無しさん:2008/05/22(木) 19:26:53
Unicode的てよく分からないだけど、なに的なの?
926デフォルトの名無しさん:2008/05/22(木) 21:49:48
ん?
ユニコードの空白文字はユニコードの空白文字じゃね?
ZsカテゴリとかZlカテゴリとかZpカテゴリとか。
927デフォルトの名無しさん:2008/05/22(木) 23:04:37
MSのC#コンパイラはIDEOGRAPHIC SPACEも空白文字として扱ってくれるよね。
928デフォルトの名無しさん:2008/05/23(金) 18:44:07
専ブラ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おながいします
929デフォルトの名無しさん:2008/05/23(金) 18:49:07
\b[0-9a-f](?:32|40|64)\b

こうですか?わかりません><
930デフォルトの名無しさん:2008/05/23(金) 19:08:12
>>929
どもっす!
ハッシュ3種の抽出はそれぞれおkでしたけども、
ファイル容量の3桁の数字に誤爆してるようだすw
53,864,862
  ~~~
とか378,231,040
        ~~~
とからへん…
931デフォルトの名無しさん:2008/05/23(金) 19:48:05
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
932デフォルトの名無しさん:2008/05/23(金) 20:04:43
Janeの検索なんかバグあるからなあ
933928=930:2008/05/23(金) 20:10:49
>>932まじっすかw
ならしゃーないんで諦めて個別に抽出する事にするです。
dでした!
934デフォルトの名無しさん:2008/05/23(金) 20:56:23
>>928
\b[0-9a-f]{32}([0-9a-f]{8}([0-9a-f]{24})?)?\b
とか?

>>929は全然違う希ガス。
935デフォルトの名無しさん:2008/05/23(金) 21:16:50
>>931
正規表現「だけ」で構文解析は不可能でしょ?
struct S { int x, y; struct S *next; } a, b, c, d, *e;
とかこんなんも declaration ですよ
936928:2008/05/23(金) 21:50:53
>>934
すげーバッチリっす!キタコレ
どーもですdd!
937デフォルトの名無しさん:2008/05/23(金) 22:40:00
blog URLがザクザク出てきまする
938デフォルトの名無しさん:2008/05/23(金) 23:09:44
変数名だけ拾えばいいならできそうかな
;か,の前にあって空白か*の後ろにある文字列が変数名ってことで
あと関数ポインタはあきらめる
939デフォルトの名無しさん:2008/05/23(金) 23:11:52
>>938
それ幾らなんでもは単純すぎでしょう。宣言には初期化子がついてることもある。
int a[] = { 1, 2, 3 };
のようにね。
940デフォルトの名無しさん:2008/05/23(金) 23:30:28
;か,の前にあって空白か*の後ろにある文字列 なら、普通にポインタのデリファレンスとか引っかかるだろ
941デフォルトの名無しさん:2008/05/23(金) 23:31:05
それなら = と [ の直前に文字列がある場合も含めればいいじゃない

942デフォルトの名無しさん:2008/05/23(金) 23:32:10
typedef int a, *b;
int c, *d;
943デフォルトの名無しさん:2008/05/23(金) 23:38:24
コンパイル可能なCのソースにのみマッチする正規表現を記述したが
それを記すにはスレの残りが少なすぎる
944デフォルトの名無しさん:2008/05/23(金) 23:39:56
ネタをネタと(ry
とでも書いておけばいいのかな
945デフォルトの名無しさん:2008/05/24(土) 00:48:19
>>943
bisonオワタ
こうですか><
946デフォルトの名無しさん:2008/05/25(日) 04:49:43
「EXEファイルを見るだけで私ならすべて読めると思うのですが」
に通ずるものがあるな
947デフォルトの名無しさん:2008/05/25(日) 13:52:46
Q. XXXを証明せよ
A. 自明である
948デフォルトの名無しさん:2008/05/26(月) 10:31:49
朝から笑っちまったじゃねーかw
949デフォルトの名無しさん:2008/05/26(月) 22:42:20
"1234abcd5678"のような文字列で、英字の部分だけ9にしたい。
"123499995678"

英字は何文字あるかはわからないが、その文字数分だけ9に置き換えたいのですか
正規表現で可能でしょうか?
950デフォルトの名無しさん:2008/05/26(月) 22:46:46
>>949
検索文字列 : [a-z]
置換後    : 9

大文字小文字区別するときは、わかるよな?
951デフォルトの名無しさん:2008/05/27(火) 11:11:49
[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/
954デフォルトの名無しさん:2008/05/27(火) 23:18:39
s/hoge=1234ab/hoge=XXXXXX/

>>953は条件を満たしてないな
955>>952:2008/05/28(水) 07:08:08
>>954
すいません、1234abの部分は不定となっており、123456となったり、12abとなったりします。
でも、Xにする文字数は同じにしたいのですが、正規表現で可能でしょうか?
956デフォルトの名無しさん:2008/05/28(水) 07:48:52
>>955
可能というか基本すぎ。それくらいググれ。
957デフォルトの名無しさん:2008/05/28(水) 08:18:20
ググるのもいいけど自分で考えてみることも大事だよ
958デフォルトの名無しさん:2008/05/28(水) 10:30:04
知識が無いのに、いくら考えても無駄だろ。gdgd言ってないでさっさとググれ。
959デフォルトの名無しさん:2008/05/28(水) 13:06:00
s/hoge=(1234ab|123456|12ab)/hoge=XXXXXX/
960デフォルトの名無しさん:2008/05/28(水) 14:36:50
s/hoge=.*/hoge=XXXXXX/
961デフォルトの名無しさん:2008/05/28(水) 14:41:04
>>952
sedだけでやるのは厳しい気がするからRubyで書くと

k, v = "key1=value1".split("=")
"#{k}=#{'X' * v.length}" #=> "key1=XXXXXX"

正規表現使ってないしsedじゃなきゃ駄目とかいうならスルーしてね
962デフォルトの名無しさん:2008/05/28(水) 14:55:50
echo hoge=1234 | sed -e ':a;s/\(hoge=X*\)\([^X]\)/\1X/;ta'
963デフォルトの名無しさん:2008/05/28(水) 15:00:19
陰険なレスが多いな。ちょっとワロタw
964961:2008/05/28(水) 15:15:45
hoge=1234ab
hoge=X234ab
...
hoge=XXXXX

すげー! sedじゃ厳しいかもとか言ってすみませんでした >>962
965デフォルトの名無しさん:2008/05/28(水) 17:52:58
以下のデータで
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
967デフォルトの名無しさん:2008/05/28(水) 21:00:17
なんつうかもう正規表現とかのレベルの話じゃないな
968965: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>をなくすと正常に抽出ができる点です。
正規表現として悪い部分をご教授願います。
970デフォルトの名無しさん:2008/05/30(金) 13:30:58
[^(</a>)|(<a)]

[^...]
は文字の否定で文字列の否定ではないよ。
971969: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 $&;
974デフォルトの名無しさん:2008/05/30(金) 15:46:27
文字列の否定?不可能です。
975デフォルトの名無しさん:2008/05/30(金) 17:22:47
文字列の否定は、(?!文字列) をサポートしてれば、可能っちゃ可能。
976デフォルトの名無しさん:2008/05/30(金) 17:52:37
ふつーにHTMLパーザを使ったほうがイロイロ楽だと思うんだがねえ。
977969:2008/05/30(金) 18:15:56
>>972,973
リンクの入れ子とかになっている場合に都合が悪かったので、
この方法はできませんでした。
>>974,975
なかなか厳しそうって事ですよね?
とりあえず、とりあえず正規表現1発で
処理するのは諦めました。
>>976
createRange()にて選択している部分のみを対象としているので、
パースでできなかったのですorz

結局、<aタグの開始と終了を別々に検索して、
切り出すことにしました。

皆様ありがとうございました。
978デフォルトの名無しさん:2008/06/01(日) 11:09:10
順序関係なく1回ずつ現れる正規表現ってどう書けばよいのでしょうか
例えばA B Cの組み合わせで以下のパターンのみにマッチするような正規表現です
 A B C
 A C B
 B A C
 B C A
 C A B
 C B A
979デフォルトの名無しさん:2008/06/01(日) 11:13:25
追記ですが、(A B C)|(A C B) | ... | (C B A)これよりもスマートなやり方はありますか
980デフォルトの名無しさん:2008/06/01(日) 11:23:17
(A (B C|C B))|(B (C A|A C)|(C (A B|B A)))
981デフォルトの名無しさん:2008/06/01(日) 11:38:41
こういうやり方もあるんですね、勉強になりました、ありがとう。
982デフォルトの名無しさん:2008/06/01(日) 23:52:02
!!!!━(゚∀゚)━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━(゚∀゚)━!!!!
983デフォルトの名無しさん:2008/06/02(月) 00:16:24
組み合わせが増えるととんでもない長さになるんだよな、これ……
984デフォルトの名無しさん:2008/06/02(月) 00:26:34
なんでもかんでも正規表現でやるなってことだよ
985デフォルトの名無しさん
どうせ学校の宿題だろ。