トップページphp
986コメント301KB

正規表現道場@2ch

■ このスレッドは過去ログ倉庫に格納されています
0001ヽ(´▽`)ノ2001/07/26(木) 09:03ID:???
以外と毛嫌いして居る人も多そうな正規表現、
でもperlを使いのなす上で避けて通れない道だったりするかもです。
そこで、スクラップブック的に目に止まったカッコイイ正規表現を
書き留めておこうと言うスレッドです。
質問する時は言語と、得たい結果をなるべく詳しく書いてね。

取り合えず僕が知ってる有用なリンクです。
http://www.din.or.jp/~ohzaki/perl.htm
http://www.kt.rim.or.jp/~kbk/regex/regex.html

もっとイイ(・∀・) リンクは>>2-10さん辺りが書いてくれるカモ・・・・
0182ぴこ01/12/14 03:34ID:LSCy87gy
>>181
 おぉお〜出来ました感動です!
かなり不安でしたが2chに書き込みしてみてよかったです。

 自分の勉強不足が身にしみました
ただ、全角スペースが||で囲まれている理由が
全く分らないのでCGI&Perlポケットリファレンスを
片手に、がばってみます。

 このような質問に丁寧に答えていただき
真に有難う御座いました。
0183JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/14 03:56ID:???
ちなみに、理由は...

$piko =~ s/^[.\n\s ]*//g;
これは、ソースコードが Shift_JIS で書かれている場合、
$piko =~ s/^[.\n\s\x81\x40]*//g;
と等価になります。

で、さらに言うと、

* (いわゆる) 全角スペースは Shift_JIS で "\x81\x40" です。
* Perlでは原則的に文字列をバイト単位で扱います。
* "?" は Shift_JIS で "\x81\x48" です。

頑張ってください。

あと、このままだと先頭の "." まで削除しちゃいます。
# 文字クラス [...] 中では多くのメタ文字はそのメタ性を失うため。

----
あと、本は少し高いけど「プログラミングPerl改訂版」が良いと思います。(
中身はperldoc に全部載っていますが、本の形態である方が最初のうちは何か
と便利です。)
018417401/12/14 13:56ID:eAyIvKrj
>>179
やりたいことってのは、
普通の文章の中にあらわれる (...) を切取るって作業なんです。
でも、普通の文章の場合、(...) の中に単体で '(' とか ')' が出ることもあるか...
諦めます。
0185名無しさん@お腹いっぱい。01/12/18 00:11ID:lPs5lnwv
正規表現で「宣教師と・・・」みたいな(名前忘れた)パズルを解くのが
あるってどこかで見て一度見てみたいんだけどgoogleで調べても出てこない。
だれか、コード or コードを載せてあるページ知ってる人いない?

恥ずかしながら、どうやって解いているのか見当もつかない。
0186名無しさん@お腹いっぱい。01/12/18 00:31ID:???
恥ずかしながら、何を言っているのか見当もつかない。
0187名無しさん@お腹いっぱい。01/12/18 00:39ID:???
>>186
人食い族と宣教師がボートに乗って川を渡る
とかいうやつじゃないの?
0188名無しさん@お腹いっぱい。01/12/18 01:14ID:???
>>186
スマン。
問題書いてなかったね。

3 人の宣教師と 3 人の人喰い土人が川の左岸にいます.
1 隻の 2 人乗りボートを使って,
右岸に渡るにはどうすれば良いでしょうか?
ただし土人の人数が宣教師の人数よりも多くなると,
宣教師は喰われてしまいます

という問題。
0189名無しさん@お腹いっぱい。01/12/18 01:52ID:???
>>187 >>188 ぁ、わかった。けど、肝心のサイトを知らないな…。
0190名無しさん@お腹いっぱい。01/12/18 02:36ID:???
http://pc.2ch.net/test/read.cgi/php/991313362/
でプログラム技術板で解いてたとか。(18,52あたり)
ちょっと違う問題っぽいけど。
肝心のムの板スレは見つからず・・・
019119001/12/18 02:41ID:???
ムの板スレ・・・ → ム板のスレ
0192名無しさん@お腹いっぱい。01/12/19 00:58ID:???
>>190
おもしろそうだから探してみたけど見つからなかった (-v-;
正規表現のコンパイラを上手く使って分岐するのかな?
と言うかこの問題ニ分木で解いたけど難しかった。。。
0193名無しさん@お腹いっぱい。01/12/19 19:57ID:iZmRvdOP
アクセスログ解析でUserAgentを見てみるとあきれるほどMSIEのバージョン違いが多くて
まとめようと思いました。IEのバージョンとwinのバージョン以外は無視するつもりで
/MSIE.*5\.5.*Windows.*98/
とやっても
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
などにマッチしてくれません。正規表現道場の師範の方々にご教授願いにあがりました。

環境はActivePerl(perl5.6.1 built for MSWin32-x86-multi-thread) on Windows2000proです。
一応分け方としてはMSIE5.01, 5.0, 5.5, 6.0とWindows 95, 98 ,NT5の組み合わせを
考えています。

#それにしてもヴァージョン違いの多さにあきれてしまいます。そういえばMeがでてきません。
#98の3rdエディションともでていなかったけど
0194名無しさん@お腹いっぱい。01/12/19 20:11ID:1HBNd19Z
>>190
最短は何手なの?
自分も解いてみたけど13手だった。
0195JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/19 20:56ID:???
>>193
マッチしますが?
0196名無しさん@お腹いっぱい。01/12/19 21:53ID:FzZSVld0
>193
コーディングの問題でした。
処理が下に抜けていた。

修行し直します。
0197名無しさん@お腹いっぱい。01/12/20 17:08ID:???
ある正規表現にマッチするような文字列を自動生成する方法ってなんかある?
例えば、/\d+/とかだったら、0、/\d+\w+/だったら、0aとか。
0198JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/20 18:04ID:???
一般的には無理です。
0199名無しさん@お腹いっぱい。 01/12/20 23:34ID:???
コンパイラを書く、で、途中で挫折これ最悪(って訳でも無い,,)
0200名無しさん@お腹いっぱい。01/12/20 23:46ID:dNXMf8EI
>>188
ちょっと違うけど。

問題クレクレ
http://piza.2ch.net/tech/kako/989/989687023.html

船渡し問題
http://piza.2ch.net/tech/kako/990/990503990.html

スクリプト
$_='i=FMBBGGSD;@n=(F,M,B,G,S,D);Yp{_X!(/D/&!/S/&/[^D]/|/F/&/G/&!/M/|/M/&/B/&!
/F/)}Yz{_X!_|/[FMS]/}Yr{aXbXp(a)&p(b)&p(a.b)&z(b)}Yt{my(@o,c,d,e,f,g,h,i,j);c=k
%2;e=iXf=jXif(c&!f){push@m,join"\n",@l,k,"";return}_=e;y/FB/MG/;return if Z&Z<=
k;Z=k+1;@o=(@n,"");for g(@n){shift@o;for h(@o){e=i;d=g.h;f=j.d;next if e!~s/g//
|h&e!~s/h//|!r(e,d);a="e->d j";a="j d<-e"if c;push@l,a;k++;t(f,e);k--;pop@l;}
}}t i;print@m,@m+0';s/X/=shift;/g;s/Y/sub /g;s|Z|\${c}{join"",sort split//}|g;s
/[|&]/$&$&/g;s/\b[_-k]\b/\$$&/g;eval
0201名無しさん@お腹いっぱい。01/12/21 02:38ID:???
やっぱ無理か。
020218501/12/21 03:29ID:???
>>200
おお、どうもありがとう。
こっちの船渡し問題は昔Cでhash使って、最短手数出るように
解いたんだけど、このスクリプトもちゃんと同じ17手になるんだね。


しかし、見にくいコード・・・。
020317401/12/21 06:58ID:???
>>197
ああ、それたまに欲しくなるよね。

$pattern ="hogehoge";

$dummy =/^${pattern}_[Gg][Ee][Tt]\s*=\s*(.*)/;

while( // ){
...
}

$patterm も case を ignore してほしいのよ。

素直に i つかえばいいんだろうけどさぁ...
020417401/12/21 07:00ID:???
>>203
ああ、ちょっと違う。

$pattern ="[Hh][Oo][Gg][Ee][Hh][Oo][Gg][Ee]";

だった。

んで、$dummy をどうするかって話...
0205JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/21 07:18ID:???
>>203
何が言いたいのか良く理解できないので、想像して書きます。

$pat = "abc"; のとき、/${pat}de/ で "ABCde" も受理されるようにしたいっ
てこと? それなら/(?i:$pat)de/ とかいう感じで。(The letters between ? and
: act as flags modifiers, see the (?imsx-imsx) manpage.)

繰り返しになるけど、ある正規表現が受理する文字列は無限に存在する可能性
があるので、正規表現 => 受理する文字列を全て見つける は不可能だよ。正
規表現じゃなくて単純なパタンならある程度可能だけどね。
# 単純な例として、// とか /moe/ とかの場合考えると分かると思う。

とりあえず、>>203 は分かりやすい日本語でも書いてろってこった。
0206名無しさん@お腹いっぱい。01/12/21 08:15ID:???
>>203
の言ってることは意味不明だけど、>>197は「全て」とはひとことも
書いてない。一つだけでいいんだろ。

とりあえず、JAPUは脳内変換やめろってこった。

>>197
できないことはないだろうけど、正規表現パースして解析して
とかカナーリめんどくさいことになりそう。
0207名無しさん@お腹いっぱい。 01/12/21 08:37ID:???
パースして解析してってのは脳内長島用語ですか?
0208名無しさん@お腹いっぱい。01/12/21 08:53ID:EZ0rO4Ln
( ´,_ゝ`)   ・・・
0209名無しさん01/12/21 09:32ID:???
( ´,_ゝ`)   ぷ
0210名無しさん@お腹いっぱい。01/12/21 09:33ID:???
197みたいなのを作るのは面白そうだね。
学生さんの冬休みの自由研究としてちょうどいい分量かも。

1. 正規表現をparseしてオートマトンを作る。
2. オートマトンからゴールに向かって状態を遷移させていく。(無限ループに注意)

みたいな感じか。

1で作るオートマトンでのNFAとDFAの比較、2で最短の解を求めるアルゴリズム
なんかを考察してみるのも楽しそう。
0211名無しさん@お腹いっぱい。01/12/21 09:37ID:???
197です。

perlはあまり使ったことがないので、203さんの言ってることは
ちょっとよくわかんないんですが、

全てヒットする必要はありません。
一個でもヒットする文字列ができればいいんです。

if ($str =~ /\d+/) {
}
とかあったときに、ifが成立するようなstrを生成したいというだけなので、
全ては必要ないですし、長さが最低でなければならないというわけでもありません。

>>206
自分でもいろいろ考えた結果、自分でパースするしかないかと思い
かなりめんどくさそうだったので、もしかしたらなんかいい方法あるかも?
とか思い質問したんですが、やっぱ地道な方法しかありませんか……
0212名無しさん@お腹いっぱい。01/12/21 09:38ID:???
>>207
脳内長島用語って脳内長嶋用語のことですか?
0213名無しさん@お腹いっぱい。01/12/21 12:42ID:???
>>211
仕様が曖昧すぎるな
もう少し簡単に絞ればいくらでも実現方法はあるだろ
0214名無しさん@お腹いっぱい。01/12/27 00:04ID:8/UHgYLF
良スレあげ
http://123http://456http://789
↑ 1つのURLに… 笑!
0215名無しさん@お腹いっぱい。01/12/27 01:29ID:???
かっこわるいね
0216名無しさん@お腹いっぱい。01/12/27 02:16ID:???
>>214
よく意味が判らないのですが...
0217名無しさん@お腹いっぱい。 01/12/27 02:24ID:???
偏執クンだよ w
0218名無しさん@お腹いっぱい。01/12/27 08:38ID:???
https://123:456.7890123.456:789//0/00//...
0219名無しさん@お腹いっぱい。01/12/27 19:20ID:???
意味わからなくてヨーソロ
0220わかれ01/12/28 00:50ID:???
http://teri.2ch.net/test/read.cgi/bobby/1008921769/
http://tmp.2ch.net/test/read.cgi/kitchen/1009247793/

http://1.              ??
http://1.              ??
http://1.              ??
http://1.              ??
http://1.            ??????
http://1.          ??????????
http://1.      ??????????????????
http://1.    ??????????????????????
http://1.  ??????????????????????????
http://1.??????????  ??????  ??????????
http://1.????????  ??  ??  ??  ????????
http://1.????????  ??  ??  ??  ????????
http://1.??????????  ??????  ??????????
http://1.??????????????????????????????
http://1.  ??????????????????????????
http://1.      ??????????????????
0221test01/12/28 00:51ID:???
http://www. ヾ     ∧∧
http://www.  ゝ′ ̄( ∀)
http://www.   UU ̄U U
0222名無しさん@お腹いっぱい。01/12/28 00:58ID:???
>AA
青くなってないぞ・・・。
0223名無しさん@お腹いっぱい。01/12/28 01:11ID:???
ね、残念
フォームの中では絵になってたよ(w

↓こっちで楽しんでくれ
http://tmp.2ch.net/test/read.cgi/kitchen/1009247793/
0224名無しさん@お腹いっぱい。01/12/29 02:13ID:???
http://www..ヾ     ∧∧
http://www...ゝ′ ̄( ∀)
http://www......UU ̄U U
0225名無しさん@お腹いっぱい。02/01/05 04:37ID:jzyBr8o2
文字列と数字が混ざってるのを分離するうまい正規表現を教えてください。
0226名無しさん@お腹いっぱい。02/01/05 05:25ID:???
>225
よく意味がわからないなあ。
たとえば"14giko9mona033zonu7:@dd+i100"を、"14","giko","9","mona","033","zonu","7",":@dd+i","100"
に分割したいってこと?
0227名無しさん@お腹いっぱい。02/01/05 12:22ID:0tAKedaD
>>226
よくわからんけど、例えの労力に感動。
「ちがいます」の一言で終わりそうだけど。
たとえば・・・てのは、質問者がやらなきゃいけないことでしょう?(笑)
022822502/01/06 03:54ID:Ts5foqO9
>>226
その通りです!
例えば…を書かなくてすみません。お願いします。
0229名無しさん@お腹いっぱい。02/01/06 04:16ID:???
wakata
imakara
tukuruyo
mattetene
023022902/01/06 04:42ID:???
@mozi = (a..z);
$mozi = join("", @mozi);
@suzi = (0..9);
$suzi = join("", @suzi);

$data = 'abc940ab?!あkcc873ilo';
$naga = length $data;

for (0..$naga) {
$base = substr($data, $_, 1);
if ($mozi=~$base) { $char = 'mozi'; }
elsif ($suzi=~$base) { $char = 'suzi'; }
else { $char = 'hoka'; }
if ($oldchar eq $char) { $form[$#form].=$base; }
else { push(@form, $base); }
$oldchar = $char;
}

print "Content-type: text/html\n\n";
print join("<>", @form);

できた。
023122502/01/06 04:49ID:ksFrDwl4
>>230
ありがとうございます。まずコードを読んで勉強します。
でも、正規表現でもっとスマートにはできないでしょうか?
やはり、これくらいコードを書かなきゃだめですか
0232名無しさん@お腹いっぱい。02/01/06 05:18ID:???
これでどう? >>226のヤツ
$giko = '14giko9mona033zonu7:@dd+i100';

@kazu = $giko =~ /(\d+|\D+)/g;
$moji .= '"' . join('","' , @kazu) . '"';
print "$moji\n";
0233名無しさん@お腹いっぱい。02/01/06 05:26ID:???
わわ…
○ $moji =
× $moji .=
0234ダメ男02/01/06 05:27ID:EPBlOzfD
>>225

;### これでどうでしょう?
$_= '012abc$%@987ABC/=!';
$SEPA= '^K';
s/(\d)(\D)/$1$SEPA$2/g;
s/(\D)(\d)/$1$SEPA$2/g;
s/(\w)(\W)/$1$SEPA$2/g;
s/(\W)(\w)/$1$SEPA$2/g;
for ( split(/$SEPA+/) ){
  print $_,"\n";
}
0235名無しさん@お腹いっぱい。02/01/06 06:03ID:???
これだけでも出来た…。
$giko = '14giko9mona033zonu7:@dd+i100';
print '"' . join('","' , $giko =~ /\d+|\D+/g) . '"';
023622602/01/06 06:52ID:???
俺も書いてみた。
たとえば数字とそうでないものとに分けて2つの配列に格納したい場合。

my $str = '14giko9mona033zonu7:@dd+i100';
my @num;
my @notnum;
($1) ? push(@num, $1) : push(@notnum, $2) while $str =~ /(\d+)|(\D+)/g;

"033"の先頭の0をこの段階で取り除いて、数値として @num に格納したいのなら、
$1 の箇所は $1 + 0 に変更だね。
0237ダメ男02/01/06 06:53ID:n1rLEP+p
>>235

;### 1行で書くと↓のようになります。(ピリオドで連結しないでカンマで区切って出力したほうが処理が速い)
print '"',join('","' , ($giko= '14giko9mona033zonu7:@dd+i100')=~ /\d+|\D+/g),'"';
0238名無しさん@お腹いっぱい。02/01/06 07:08ID:???
>>235
それだと、もはや$gikoに意味が無いような…。これと同じ。
print '"',join('","' , '14giko9mona033zonu7:@dd+i100' =~ /\d+|\D+/g),'"';
023923802/01/06 07:10ID:???
間違えた
>>237
× >>235
0240ダメ男02/01/06 07:34ID:rx7aYtfj
;### 新たに作ってみました。
$_= 'aa14giko9mona033zonu7:@dd+i100';
$SEPA= "\033";
s/((\d+)|(\D+))/$1$SEPA/g;
for ( split($SEPA) ){
  @catch= (@catch, $_); ## または push(@catch, $_);
}
0241ダメ男02/01/06 07:39ID:GkL31czH
>>240 自己レス

;### 不要なカッコを書いていました。
s/((\d+)|(\D+))/$1$SEPA/g;⇒s/(\d+|\D+)/$1$SEPA/g;
0242ダメ男02/01/06 07:51ID:7uRhBz8j
;### 236を改造してみるとこうなります。
my $str= '14giko9mona033zonu7:@dd+i100';
push(@catch, $1 ? $1 : $2) while $str=~ /(\d+)|(\D+)/g;
0243名無しさん@お腹いっぱい。02/01/06 16:36ID:???
>>235
で一番シンプルな解が出てるのに延々続いてるのはなぜ?
@catch = ( $str =~ /(\d+|\D+)/g );
024424302/01/06 16:37ID:???
間違えた。
@catch = ( $str =~ /\d+|\D+/g );
0245225,23102/01/07 03:24ID:9HzJI0rF
>>232-244
いろいろな書き方があるのでとても勉強になりました
たくさんの方々、本当にありがとうございます^^
0246名無しさん@お腹いっぱい。02/01/09 01:40ID:Guhk8J3C
良スレ認定。
0247名無しさん@お腹いっぱい。02/01/11 16:12ID:???
40あげ
0248名無しさん@お腹いっぱい。02/01/13 14:15ID:???
良スレだとは思うけど、WebProgとは直接関係ないし。
なぜプログラム板にスレを立てなかったか問い詰めたい。
0249名無しさん@お腹いっぱい。02/01/13 20:08ID:???
>>248
そんなことないでしょ?
Perlだってhttpd.confだっておけらだってあめんぼだって
みんなみんな生きているんだ。
ていうか、WebProg意外に正規表現使わない人だって結構いますから。
0250(・∀・)!! 102/01/13 21:15ID:???
>>248
いや、それがですね旦那、旦那みたいな方ばっかりなら良いんっすけどね
あっちもアレな人が増えてきたんで、
正規表現 → 氏らねー → Perlじゃネーカ?? → よっしゃ煽ったろ
みたいになって荒れるより、こっちで静かに余生を送りたいなと思ったんすよ

// 試しにたててみます?  ^^;;
0251名無しさん@お腹いっぱい。02/01/13 21:32ID:???
>>250
試しに立ててみましたみたいな立て方すると、結果が予見できる・・・(笑)
0252(・∀・)!! 102/01/13 21:48ID:???
= 予想された展開 =
普通の人:どの言語でも良いの?、それともオートマトンとかエンジンの話するの?
  ↓
R**y屋さん:正規表現も積んでない言語は糞!!p**lはもっと糞!!r**y!!!
  ↓
D**phi屋さん:ハァ??ライブラリ使えば良いだろ?R**y逝ってよし!
  ↓
R**y屋さん:でるphなんか使うやしはあふふぉf R**y!!!!>>>>>>>D**phi

以下糞スレを増殖しつつ、無限ループ 

// 嫌すぎます・・
0253名無しさん@お腹いっぱい。02/01/13 23:04ID:???
>>252
いや、Perlでいいじゃんとか。
PHP・・・とか書いて放置されるとか、
漢はshつかえとか、入り乱れてのバトルロワイヤル。

でもないか。
025424802/01/14 23:31ID:???
なるほど、たしかに使用言語がらみの厨な応酬が起きそうで嫌ですね  >ム板
スクリプト言語だと特に。

そこまで考えてませんでした。やぼなツッコミしてすみませんです。
0255名無しさん@お腹いっぱい。02/01/15 01:35ID:/IL06s2P
2ちゃんとかで引用に使われる">>"を判別して自動リンクつけたいんですが、

$text = ">>2は逝ってよし!";
$text =~ s/>>[0123456789]{1,3}/<a href="">$&<\/a>/g;

ココまではできたんですが、アンカーのURLに引用もとの数字を入れたいんですが
(この場合だと"2")、それをどう取得したらよいか分かりません。
この正規表現の書き方では無理ですか?
0256名無しさん@お腹いっぱい。02/01/15 02:47ID:???
$_ = q|>>255は逝ってよし!|;
s#>>(\d+)#<a href="http://pc.2ch.net/test/read.cgi/php/996105815/$1">$1</a>#g;
print;
0257名無しさん@お腹いっぱい。02/01/15 02:58ID:???
$_ = q|>>256修正|;
s#>>(\d+)#<a href="http://pc.2ch.net/test/read.cgi/php/996105815/$1">$&</a>#g;
print;
0258255@へたれ正規表現02/01/15 03:03ID:???
>>256,>>257
ありがとうございます。
ここでつまってて、もう文字列解析しようと思ってました(藁
0259名無しさん@お腹いっぱい。02/01/18 15:45ID:DsGDZg+9
もの凄く基本的な事のような気がして恐縮なのですが、
「文字Aが含まれる行」は正規表現でどのように書くのでしょうか?
Aが含まれる行を全て削除(又は置換)したいんです。
0260名無しさん@お腹いっぱい。02/01/18 15:50ID:OQbDLabT
/.*ё.*/´д`/
0261 ◆AskaRoYg 02/01/18 20:49ID:???
open(FILE,"+<$file");
@data = <FILE>;

map {
if ($_=~/A/) { $_=''; }
} @data;

seek(FILE, 0, 0);
print FILE @data;
close(FILE);
----------------------------
なんか間違ってたら直して
0262名無しさん@お腹いっぱい。02/01/18 21:48ID:???
なんも間違ってないけど、明らかに間違ってるな。
026325902/01/19 02:06ID:???
頼むぜ、ブラザー。
0264名無しさん@お腹いっぱい。02/01/22 02:11ID:hOKQ9mVE
while(<>){ print unless m/A/ }
0265名無しさん@お腹いっぱい。02/01/31 17:52ID:???
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

メールアドレスの入力チェックなんだけどどーゆー意味?
0266名無しさん@お腹いっぱい。02/01/31 23:21ID:XvhUBoWr
$str = '<font size="5">冬は"寒い"。</font>夏は"暑い"。';

この<と>に囲まれてない部分の"だけ("寒い"と"暑い")
"に変換するには正規表現でどう書くんでしょうか?

$str =~ s/>(.*?)"(.*?)</>$1"$2/g;
と書くと2個目の"が変換されませんでした。
0267名無しさん@お腹いっぱい。02/01/31 23:23ID:XvhUBoWr
変換されてしまった。訂正です。

> "に変換するには正規表現でどう書くんでしょうか?

> &quot;に変換するには正規表現でどう書くんでしょうか?
0268 ◆7P5EE/DI 02/02/01 00:08ID:???
>>261
とりあえず気が付いたことだけ。

1. 繰り返し処理``だけ''を行いたいならgrepやmapではなくforeachを使うのがよろし。
2. データの一部が削除されているので、truncateしてやらんと末尾にゴミがくっ付いてしまう。
0269名無しさん@お腹いっぱい。02/02/01 01:10ID:???
>>266
$str = '<font size="5">冬は"寒い"。</font>夏は"暑い"。';

こんなのしか考えつかない…。正規表現一発で出来るの?偉い人〜
foreach (split /(<[^>]+>)/,$str) {
    !/</ and s/"/&quot;/g;
    print;
}
027026602/02/02 01:23ID:YNNMuvTz
>>269
ありがとうございます。
そこから考えて、汚いですがとりあえずこんなので解決しました。
while ($str =~ s/>([^<]*)"/>$1"/g or $str =~ s/"([^>]*)</"$1</g) {}

もし正規表現一発で出来る方法があったらよろしくお願いします。
0271初心者02/02/02 03:29ID:oZiG+SwX
$str =~ s/\"/&quot\;/g; $str =~ s/<([^\>]*)=&quot\;(\w)&quot\;([^\>]*)>/<$1=\"$2\"$3>/g;

じゃだめなのか。
0272名無しさん@お腹いっぱい。02/02/02 03:58ID:???
URLとかスタイルシートがあるからだめだろうね -> \w
0273 ◆7P5EE/DI 02/02/02 06:05ID:???
一行だけど、なんだか。
こんなんしか出来ませんでした。

$str = join '', map { /^</ or s/"/\@/g; $_ } split /(<[^>]*>)/, $str;
0274 ◆7P5EE/DI 02/02/02 06:06ID:???
訂正。
$str = join '', map { /^</ or s/"/"/g; $_ } split /(<[^>]*>)/, $str;
0275名無しさん@お腹いっぱい。02/02/03 19:17ID:???
正規表現より良い表現(マッチ方法)って無いの?
0276名無しさん@お腹いっぱい。02/02/04 03:27ID:???
マッチョ法ってのがあるよ。
0277名無しさん@お腹いっぱい。02/02/04 03:37ID:???
>276
それどんなかんじ?
0278あぼーんNGNG
あぼーん
0279名無しさん@お腹いっぱい。02/02/04 06:14ID:???
>>277
ぐぐーるしてください。
0280名無しさん@お腹いっぱい。02/02/04 10:37ID:6Yw0Bfwo
>>275
これなんかどうよ?
文脈依存文法表現案
http://www.try-net.or.jp/~yoji/idea/gramagic/codgex.html

まだ案だけど、これが完璧になれば、圧縮ファイル中の html ファイルの
a 要素の href 属性の中で 2ch に関係してるものを検索、
とか出来るようになるのかな。まだ案だけど。
0281名無しさん@お腹いっぱい。02/02/15 04:54ID:???
>>278は何?
■ このスレッドは過去ログ倉庫に格納されています