トップページ⇒php
1001コメント313KB

正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/11/19 21:42ID:Kst3Nn4S
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

註:& や " を書くときには、&amp " と描いておきましょうね。

Perlメモ
 http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
 http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
 http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
 http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
 http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
 http://www.sixnine.net/regexp/

ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
 http://www2.famille.ne.jp/~akio1998/l_grep.html

過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc2.2ch.net/test/read.cgi/php/1038146241/
0190nobodyさん04/02/12 02:26ID:???
coffee
tattoo
balloon
saccees

あたりがひっかかればいいのか?
019118904/02/12 02:40ID:???
すまん、質問文全体的に読み間違えてた。。。

/^..\(.\)\1\(.\)\2/

でいいんじゃない?
0192nobodyさん04/02/12 02:44ID:???
ありがとうございます。
Perlで\1とかが使えるのは知ってたのですが、sedでもつかえるとは思って無かったです。

ぶしつけがましいかもしれませんが、Perlで!~と表される「マッチ以外」を
sedで実装するにはどうすればいいのでしょうか。

実は今回初めてsedというものに触れることになったもので・・・
Perlみたく正規表現が使える、というのは知ってたのですが仕様が違うらしくうまくいかなくて・・・
0193nobodyさん04/02/12 02:57ID:???
>>192
>>1 の正規表現メモを見れ。
0194nobodyさん04/02/12 16:51ID:???
>>192
!

マニュアルは死んでも見ない主義か?
0195nobodyさん04/02/12 23:51ID:???
PHPで2chのスレッドURLの正規表現(ereg)は
http://(.)+\.2ch\.net/test/read\.cgi/(.)+/[0-9]{10}/
これでいいですか?
もうちょっとスマートなのあればお願いします。
0196nobodyさん04/02/13 04:16ID:???
↑キター
0197nobodyさん04/02/13 17:14ID:???
>>195
bbspink.comとmachi.toが抜けてるよ。
(.)はわざと?
0198nobodyさん04/02/13 17:38ID:???
>>196>>197
ごめんなさい。素人なものでよくわからないのです・・・
任意の文字は、「(..)+」じゃないんでしょうか・・・
「.+」でいいですか?
http://(.+\.2ch\.net|.+\.bbspink\.com|.+\.machi\.to)/test/read\.cgi/.+/[0-9]{10}/
でいいでしょうか?
それと、Perlでは、10個の数字なら「\10d」でできたと思うのですが、PHPではできないみたいですね・・・
019919504/02/13 22:04ID:???
お騒がせしました。自分のダメダメでしたね。
http://([a-zA-Z0-9]+\.2ch\.net|[a-zA-Z0-9]+\.bbspink\.com|[a-zA-Z0-9]+\.machi\.to)/test/read\.cgi/[a-zA-Z0-9]+/[0-9]{10}/
これでOKですね。
0200nobodyさん04/02/14 02:42ID:???
正規表現でどう書くのかと言っても目的によって変わる場合があるからな
0201nobodyさん04/02/14 12:38ID:???
質問です。お師匠様よろしくお願いします。

次の文字列で、<!--from-->〜<!--to-->部分を除去する
正規表現が分からないです。

"あい<!--from-->か<>き<!--to-->うえ<!--from-->くけ<>こ<!--to-->お"
→「あいうえお」を取り出したい

自作の失敗正規表現
/<\!--from-->.*<\!--to-->//g
→「あいお」になってしまう。
0202nobodyさん04/02/14 12:46ID:???
>>201
Perlなら最短マッチ
.*?
0203nobodyさん04/02/14 12:54ID:???
>>202
よくばりを抑えることができました。
お師匠様ありがとうございました!
0204nobodyさん04/02/14 13:29ID:???
>>202
最短マッチ
できないやつってあるの?

C++のboost::regexも出来たよ
0205nobodyさん04/02/14 13:50ID:???
>>204
Perl4ダケダタ
スマソ
0206nobodyさん04/02/14 14:44ID:???
>>205
*awkやsedにもねぇだろ。
0207nobodyさん04/02/14 14:47ID:???
>>206
俺につっかからず
>>204に尾長居します
0208nobodyさん04/02/14 23:14ID:???
置換でimgタグのalt属性だけを全て検出するにはどうすればいいですか
今は

$title =~ s/.*?( alt=\".*?\")*/$1/gs;
$title =~ s/alt="//g;
$title =~ s/"//g;

とやっていますが、効率が悪いと言われました。
0209nobodyさん04/02/14 23:29ID:???
>>208
$title =~ s/.*? alt=\"(.*?)\"*/$1/gs;
ってことじゃないのか。
0210nobodyさん04/02/14 23:39ID:???
>>209
それだと
alt="Alt属性値">
↓
Alt属性値">
ですよね
0211nobodyさん04/02/14 23:43ID:???
そんでしかも
alt属性値は複数ある可能性もあるんです(<img>タグの個数が分からないため)
0212nobodyさん04/02/14 23:49ID:???
効率が悪いといわれた意味は、>>209じゃないかってことだ。
で、求めたいことをやるコードなら、今、プログラム板の
Perl質問箱でも答えたとこだが、
@title = ($_ =~ /.*? alt=\"(.*?)\"*/$1/g);
でよろしかろう。

0213nobodyさん04/02/15 00:04ID:???
あー
ヒントを得られたので改変して自己解決しました。

$title =~ s/.*?alt=\"([^"]*)[^(alt)]*/$1/gs;

これでできました。
どうもありがとうございました。
0214nobodyさん04/02/15 00:09ID:???
>>213
( ゚д゚)ハァ!?
ま、いいか
0215nobodyさん04/02/15 00:11ID:???
>>213
それだと・・・
ま、、いいや
0216nobodyさん04/02/15 00:24ID:???
え

何か問題があるんでしょうか・・・汗
0217nobodyさん04/02/15 00:28ID:???
あ

alt="〜"以降にaかlかtが含まれるとそれ以降がおかしな事に・・・
0218nobodyさん04/02/15 02:32ID:???
このスレおもしろいな。
0219nobodyさん04/02/15 02:58ID:P41SZm3C
例えば、こんな感じの文字列があって、
90020E68E8D0320A9028D14FF40AE7307BD5A8...
これに16文字ごとに00を挿入するにはどう書けばいいでしょうか?
こんな感じに出力したいのですが
0090020E68E8D0320A009028D14FF40AE730007BD5A8...
自分でチュートリアルみながらやってみたら
アホみたいに00で溢れてしまいました・・・
0220nobodyさん04/02/15 03:45ID:???
>>219
具体的にどうやったのかの正規表現も書いておいた方が
誰かが教えてくれる気になってくれる率高いよ
022121904/02/15 04:05ID:???
恥ずかしすぎるのですが自分の晒します
$output =~ s/\(................\)/00\1/gs;
0222nobodyさん04/02/15 04:20ID:???
$output = "90020E68E8D0320A9028D14FF40AE7307BD5A8";
$output =~ s/([0-9A-Z]{16})/\1xx/gs;
print $output;

00ができねー。
0223nobodyさん04/02/15 04:23ID:???
$output = "90020E68E8D0320A9028D14FF40AE7307BD5A8";
$output =~ s/([0-9A-Z]{16})/00\1/gs;
print $output;

頭00つきで・・・。
0224nobodyさん04/02/15 04:24ID:???
>>219
ああ、頭00でいいんだ〜。
0225nobodyさん04/02/15 04:29ID:???
#Perlだけどこれではいかんでしょうか

$output =~ s/([0-9A-F]{16})/$1_/g;
$output =~ s/_/00/g;

0226nobodyさん04/02/15 04:40ID:???
>>225
2度もやらなくたって>>223
022721904/02/15 05:27ID:???
みなさんありがとうございます
無事できますた
0228>>20804/02/15 09:16ID:???
で、結局出来たんですが、これもちょっとまだ違う(属性名に「a」があるものがalt以降に出てくるとエラー)なので・・・

$title =~ s/.*?alt=\"([^"]*)[^a]*?/$1$2/gs;
$title =~ s/([^"]*).*/$1/gs;

「alt」っていう文字列が出てくるまで、ってどういう風に表現するんでしょうか・・・・
紹介された他のスクリプトは全て期待通りの動きをしませんでした

$title=<<END;
<h1><img src="./hoge.png" width="10" height="10" alt="alt属性値"></h1>
<div id="id">
テストaltテスト<br>
</div>
<h2><img src="./hoge2.png" width="10" height="10" alt="alt属性値2"><img src="./hoge3.png" width="10" height="10" alt="alt属性値3"></2>
<div id="id">
テストaltテスト<br>
</div>
END

これに正規表現をかけて、$titleの中身を

alt属性値alt属性値2alt属性値3

に出来ればかなり近いものになると思うんですが・・・・
0229未承諾広告※ ◆aiY4htt2.2 04/02/15 10:17ID:???
print join '', $title =~ /alt="(.*?)"/g;
0230nobodyさん04/02/15 10:55ID:???
@array = ($title =~ /<img[^>]+alt="([^>]*)"[^>]*>/g);
0231nobodyさん04/02/15 16:22ID:???
/(ー_ー)/
0232nobodyさん04/02/16 14:35ID:???
$_ = '_ _';

print 'ごめんなさい' if m(_ _)m;
0233 04/02/21 11:23ID:ZPsBKiYf
VBScriptでの正規表現についてご指導をお願いします。
私は↓のサイトで、サッカーの試合後に出される選手の採点をVBScriptを使って集計しております。
http://www.geocities.co.jp/SiliconValley-SanJose/8260/shukeihouhou040220/shukeihouhou.html

例えば、 「中田:6.5」というカキコを読み込むのに
re.Pattern = "([a-zA-Zぁ-んァ-ヶー−一-鶴]+)[  ;:;:…]*(10\.0|10|9\.5|9\.0|9|8\.5|8\.0|8|7\.5|7\.0|7|6\.5|6\.0|6|5\.5|5\.0|5|4\.5|4\.0|4|3\.5|3\.0|3|2\.5|2\.0|2|1\.5|1\.0|1|0\.5|0\.0|0)"
とパターンを設定しているのですが、
2つの問題に直面しております。

一つの問題は選手名の読み込みです。
漢字コードの設定がうまくないために取り込めない選手がいます。
今のところ、「黒部」が「部」になってしまうということが起きています。

もう一つの問題は点数の読み込みです。
採点では0.0〜10.0まで0.5刻みで点数を評価します。
それ以外の数字は無視しようと思うのですが、
3.14だと3と認識してような現象がおきているようです。


以前はjperlで認識させてまして漢字コードに関しては
[a-zA-Zぁ-んァ-ヶー−亜-腕弌-熙]+
でやってて問題は起きなかったですが、VBSでは無理なようです。
適当に文字コード表を開いたら漢字が一で始まって鶴で終わってたので
これを適用したら、そこそこうまくいったのですが、「黒」はだめなようで・・・
0234nobodyさん04/02/21 13:17ID:???
第一水準漢字をUNICODE指定するんだったら、[一-龍]じゃない?
鶴のうしろに、
鷲 鷹 鷺 鹸 鹿 麓 麗 麟 麦 麹 麺 麻 麿 黄 黍 黒 黙 黛 鼎 鼓 鼠 鼻 齢 龍
これだけの文字が残ってるよ。

しかし、JScriptはUNICODEで範囲指定しなきゃならんのか……
あと、置換で面倒なことしてるとおもったら、trがないのか……
ドキュメントのRegExp.Execute()のところにSubMatchesコレクションの記述がまったくない……
0235nobodyさん04/02/21 14:01ID:X1kd7Gnd
すんません。
$short = 'hoge++';
という場合に
$long = 'hogehoge++';
にマッチするかどうか判定するにはどうしたらいいですか。
if ($long =~ /$short/) {}
だと ++ の部分でエラーが出ちゃうです。
0236 04/02/21 14:14ID:ZPsBKiYf
>>234
ありがとうございます。「黒部」が読み込めました。
選手名はこれでいけたっぽいです。

>置換で面倒なことしてるとおもったら、trがないのか
どうなんでしょうね。おいらが探しきれなかっただけかも・・・

>RegExp.Execute()のところにSubMatchesコレクションの記述がまったくない
すいません、意味わかんないっす
0237nobodyさん04/02/21 14:17ID:???
>>233
VBSは良く分からないけど、
(10|[0-9](\.[05])?)([^\.0-9]|$)
得点はこんな感じでどうでしょ。

>>235
Perlなら
if ($long =~ /\Q$short/) {}
0238nobodyさん04/02/21 14:20ID:???
>>237
ありがとうございましたぁあああああああああ!!!!
0239 04/02/21 15:28ID:ZPsBKiYf
>>237
ありがとうございます。
しかしそれだと10.0が読み込めないようです。
(10\.0|10|[0-9](\.[05])?)([^\.0-9]|$)
こうすればいいのかな?
0240nobodyさん04/02/21 16:27ID:???
>>239
いいんじゃない?

あと、
(10(\.0)?|[0-9](\.[05])?)([^\.0-9]|$)
こんなでも。
0241 04/02/21 16:31ID:ZPsBKiYf
>>240
�dクス!!ありがとうございます。
これで解決です。
0242nobodyさん04/02/21 16:44ID:TmSpuw1E
ひらがな、漢字、カタカナのみを
許可したい場合どうしますか?

if($FORM{'name'} =~ /\w/g) { &error; }

や

if($FORM{'name'} !~ /\W/g) { &error; }
if($FORM{'name'} =~ /[a-zA-Z0-9]/g) { &error; }

では、カタカナを受け付けなくなってしまい、


if($FORM{'name'} !~ /\W/g) { &error; }
if($FORM{'name'} =~ /[A-Z0-9]/g) { &error; }

だと、アルファベット小文字が使えてしまいます。
0243nobodyさん04/02/21 16:59ID:???
>>242
文字コードどうしてる?
0244nobodyさん04/02/21 17:22ID:???
>>243
すいません、書くの忘れました。
shift-jisとなっています。
0245nobodyさん04/02/21 17:42ID:???
>>244
euc-jpで
0246nobodyさん04/02/21 18:04ID:???
>>245
euc-jpぢゃないと無理ですか・・・
ありがとうございます。
0247nobodyさん04/02/21 21:32ID:???
むりなもんか
0248nobodyさん04/02/21 21:49ID:???
無理だっつーの
PerlはEUCじゃないとマルチバイトの処理できない
024924704/02/21 21:54ID:???
だ・か・ら、、、、

文字である以上、文字コードだろ?

文字コードは変動しないよな?

できるじゃん!
0250nobodyさん04/02/21 22:08ID:???
>>249
jperlならな

お前のそのレスみてレベル低いと思った

>文字コードは変動しないよな?
↑特にこことか。
025124704/02/21 22:20ID:???
今、即席でつくってみたけど 例えばひらがなの場合こういうことだろ?

SJIS:ぁ \x82\x9f
SJIS:ん \x82\xf1

/^(?:\x82[\x9f-\xf1])+$/

なんでできないのか理由家! レベル低いかも知れんけどできるだろ?
0252nobodyさん04/02/21 22:23ID:???
>>242
if ($FORM{'name'} !~ /^(\x82[\x9f-\xf1]|\x83[\x40-\x96]|[\x88-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/){ &error; }
こんなんでいい?
全角アルファベット数字と記号類も省くけど。

>>250
正しく正規表現書けば、Shift_JISでも処理できるよ。
Perl 5.8.xならencoding.pmがお勧めだけどね。
中の人はUnicodeで処理してるらしいけど。

かぶった?
0253nobodyさん04/02/21 22:23ID:???
>>251
・・・
なんかもう、ね。
s/あ/ん/;
と普通にマルチバイト入れてやる場合のこと言ってるんだろ・・・
だれも文字コードでやれなんて言ってない
0254nobodyさん04/02/21 22:31ID:???
>>253
perl 5.8.x以降限定だけど、

use encoding "shiftjis";
...
s/あ/ん/;
025524704/02/21 22:33ID:???
お前のそのレスみてレベル低いと思った

>PerlはEUCじゃないとマルチバイトの処理できない

↑特にこことか。

jperl とか言い出す始末。。。
0256nobodyさん04/02/21 23:00ID:???
なんか、>>247って必死じゃね?
いや、いいんだけど、>>248と勝手に争ってくれ。
ここ、過疎スレだから、周り気にしないで争ってね、思う存分
0257nobodyさん04/02/21 23:20ID:???
>>252
ありがとうございます。
Shift-Jisで、試してみたところ、
正常動作しているようです。

全角アルファベット数字と記号類も
省きたいと思ってたので助かりました。
025823404/02/21 23:44ID:???
>>236
すまん、意味不明なこと書いちゃった。

MSのWindows ScriptドキュメントでRegExpオブジェクトのヘルプリファレンス読んだんだけど、
RegExp.Execute()のところに、実行するとSubMatchesコレクションが生成されるって記述が
ぜんぜんないんよ。
てなわけで、SubMatchesコレクションの存在を知らなかった……_| ̄|○
(ふだんはBASP21コンポーネントのMatch()やReplace()を使ってるし)
SubMatchesってキーワードでヘルプを調べれば載ってるんだけどね。
025923604/02/22 10:53ID:???
>>258
そういうことっすか。
ちなみにつくるとき、ここを参考にしましたよ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting121399.asp
0260nobodyさん04/02/22 23:25ID:kjGz/T2C
「注目に値[あたい]する特徴[とくちょう]が出せる。」

こういう文章から[あたい][とくちょう]の部分を
一括で削除する正規表現を教えてくれないでしょうか。
Wzの検索、置き換えを使っています。
0261nobodyさん04/02/22 23:39ID:???
s/\[.*?\]//g

とかしか思いつかない漏れはここに似つかわしくないですか
0262nobodyさん04/02/23 05:58ID:???
>>260
[[^]]+]
0263nobodyさん04/02/23 10:39ID:???
abc\,edf,ghi という文字列を
$_[0] = abc\,edf
$_[1] = ghi
という具合に split したいのですが、どうすればよろしいでしょうか?
0264nobodyさん04/02/23 11:51ID:???
>>263
split /(?<!\\),/, $str;

以後、Perl の質問は http://pc2.2ch.net/test/read.cgi/php/1075545279/ へ。
026526004/02/23 14:09ID:???
>>262
出来ました!すごいですね。
自分には難しくて。
ありがとうございました。
0266nobodyさん04/02/23 20:41ID:Ea0t25bl
文字列以外にマッチってできるべか?
こんなふうに書いてみたけどだめやった。
[^(mojiretu)]
それとも(?!)とか工夫すればできるの?
0267nobodyさん04/02/23 20:46ID:???
純粋に!で否定かければいいのでは、とか思いますがどうでしょう
026826604/02/23 21:30ID:Ea0t25bl
レスどうもです、具体的な例を紹介してくれると助かるんすけど、だめすか?
お願いしまぁす。
0269nobodyさん04/02/23 22:14ID:???
Perlなら
$hoge !~ /^mojiretu/g;
で、文字列以外にヒットするはず
0270nobodyさん04/02/24 21:18ID:1VWZCh18
質問です。
アルファベットのみで構成される6文字以上10文字以下の文字列、をcygwinのgrepを用いて検索したいのですが…。

正規表現の紹介をしているところを読んで回り、
^「A-Za-z]{6,10}
で、アルファベット6文字以上10文字以下、を表すということが分かったのですが、

grep -i "^[a-z0-9./]{6,9}"
としてみても何も反応が無く、

egrep -i "^[a-z0-9./]{6,9}"
とすると、11文字や12文字の文字列も引っかかってきてしまいます。

どう書けばアルファベットのみで構成される、6文字以上10文字以下の文字列、を正確に検索出来るのでしょうか?

宜しくお願いします。
0271nobodyさん04/02/24 21:22ID:???
>>270
egrep -iw "^[a-z0-9./]{6,10}"

途方に暮れて質問させていただいた直後に我に返りました。
wというコマンドを使えば出来ました。

スレ汚し失礼しました…。
027227004/02/24 23:35ID:1VWZCh18
スミマセン…もう一度質問させてください…。

http://koho.ktplan.jp/tango/y.html

ここを例にして説明します。
上のサイトを開いて、全部選択してテキストにコピペしてy.txtとして保存。
この中から、6文字以上、10文字以下の英単語だけを抜き取ろうとしています。

$ egrep -iw "^[a-z]{6,10}" y.txt

とすると、

English NaviHome0INDEX1 HELP2 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq
Rr Ss Tt Uu Vv Ww Xx Yy Zz基本的な英単語 Y
yesterday
yourself
Copyright c 2001-2004 English Navi All Rights Reserved

という結果になります。

English NaviHome0INDEX1 HELP2 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq
Rr Ss Tt Uu Vv Ww Xx Yy Zz基本的な英単語 Y
と
Copyright c 2001-2004 English Navi All Rights Reserved
の部分が、どうしても引っかかってきてしまいます。
上の書き方だと、間にスペースが入っているものとかを排除できないことは分かったのですが、どうすれば目的の文字数の単語だけが抜き出せるのか…頭がパンパンになって来ました。。。

上手く抜き出すことが出来る正規表現の書き方を教えてください。
よろしくお願いします。
0273nobodyさん04/02/24 23:40ID:???
grepて$つかえたっけ

Perlだと
/^[a-z]{6,10}$/i
で、できるかもしれない。
027427004/02/24 23:46ID:???
>>273
即レスありがとうございます…。

$ egrep -iw "^[a-z]{6,10}+$" y.txt

$ egrep "/^[a-z]{6,10}$/i" y.txt

共にだめでした…。
悩んでみます。
0275nobodyさん04/02/24 23:52ID:???
egrep -iw "^[a-z]{6,10}$" y.txt
じゃないのかと。
027627004/02/25 00:11ID:???
>>275
あ、スミマセン。。。

egrep -iw "^[a-z]{6,10}$" y.txt

です。
何も起きないのです…。
0277nobodyさん04/02/25 00:19ID:???
正規表現メモによると、egrepでは{n,m}をサポートしていないそうだ。

grepなら{n.m}をサポートしているみたいだが。
027827004/02/25 00:22ID:???
>>277
egrepだと、とりあえず>>272の状態まではたどり着くのですが、
$ grep -iw "^[a-z]{6,10}" y.txt
これだと何も起きないのです…。
そもそもgrepやegrepだと無理…なのかな…。
0279nobodyさん04/02/25 00:42ID:???
FreeBSDだけど、こんな感じだよ。

$ egrep -iw "^[a-z]{6,10}$" y.txt
yesterday
yourself
$ egrep -V
egrep (GNU grep) 2.4d
028027004/02/25 01:07ID:???
>>279
FreeBSD、ググッテ見ましたが、自分にはよく理解できませんでした。

自分は
http://sources.redhat.com/cygwin/
このcygwinというのを使用しています。

$ egrep -V
egrep (GNU grep) 2.5

と言うことでした。
つまり、これでは出来ない、ということですかね…。
ありがとうございました。
もうちょっとだけ色々考えてみます。
Copyright c 2001-2004 English Navi All Rights Reserved
↑こういうのが引っかかってくるようだと、英文ページから抜き取ることが出来ないですもんね…。
例としたサイトは辞書形式で、単語ごとに改行があったから何とかなったのか…。
0281nobodyさん04/02/25 02:25ID:???
>>280
man egrep して、冒頭を 100遍読んでみ。
028228104/02/25 02:28ID:???
あ、すまん、何か勘違いしてた。スルーしてくれ。
028328104/02/25 02:33ID:???
お詫びといってはナンだが、これでどう?
前の [[:space:]]* は余計かも知れないけど。

$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt
028427004/02/25 02:48ID:???
>>283
遅くにスミマセン…調べ調べて、

$ grep "^[a-z0-9./]\{6,10\}" y.txt

これで出来ました…。
本当に出来てるのか、検証していきたいと思います。

$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt

これでも出来ました!まずは…この意味を解読することから勉強して行きたいと思います…。

昨日cygwin入れてみて、初めてgrep使って…頭がパンパンです。・゚・(ノД`)・゚・。
オヤスミナサイ!
028527004/02/25 02:50ID:???
>>284
訂正!

$ grep -iw "^[a-z0-9./]\{6,10\}" y.txt

でした!

|彡サッ
028627004/02/25 03:34ID:???
$ grep "^[a-z0-9./]\{6,10\}" y.txt

$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt

どちらを使っても、y.txtの中の改行をすべて空白に変えてみて、一面単語の海にすると取り出せないですね…。
もう諦めてマジ寝ます。
また明日悩みます。
028728104/02/25 04:30ID:???
>>286
それこそ、man egrep して、冒頭を 100遍読んでみ。

ていうか、grep でそれやるなら、
逆に、空白をすべて改行に変えてみた方が取り出しやすいと思われ。
0288nobodyさん04/02/25 14:02ID:12gYevYJ
PERLで
予約語が行にあったら文字で挟んで置き換えるという処理なんですが

$ReplaceStr = $left . $word . $right;
$line =~ s/(\W)$word(\W)/$1$ReplaceStr$2/g;

だと行頭と行末が正しく置換できないです。どうすればいいんでしょうか?

0289nobodyさん04/02/25 14:32ID:???
s/\b$word\b/$left$word$right/g;
0290nobodyさん04/02/25 17:55ID:12gYevYJ
>>289
ありがとうございます!
こんな便利なキャラクタがあったんですね!
それぞれ予約語の配列にforeachかけてやってたんですが
速度的にはこっちの方が速くなるんでしょうか?

chomp(@ReserveWords);
$MachWords = join("|",@ReserveWords);

foreach $line(@inputlines){
    $line =~ s/\b$MachWords\b/$left$&$right/g;
}
■ このスレッドは過去ログ倉庫に格納されています