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

正規表現道場@2ch Part4

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

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

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/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
 http://pc5.2ch.net/test/read.cgi/php/1069245758/
03773702005/05/17(火) 15:25:00ID:???
すみません、書き直します。

$test = 'あん'; //機種依存のsjis文字入り(同じ文字はありません)
$test =~ s/\G((?:[\x80-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)([\xF8\xF9][\x40-\x7E\x80-\xFC

])/$1/eog;

これはPerlスクリプトなんですが、これをPHPに移行したいと思います。

eogを除いてpreg_replaceすると>>370のように何故か5c30になってしまいます。

$test1 = mb_ereg_replace("([\xF8\xF9][\x40-\x7E\x80-\xFC])","\\1" , $test);
これはWarning mbregex compile err: mismatch multibyte code length in char-class range in  となってしまいます

どこがおかしいのですか??
0378nobodyさん2005/05/17(火) 15:44:02ID:???
>>377
多分、ダブルクオートの中でバックスラッシュを使っているので、
正規表現エンジンに渡る前にバックスラッシュが展開されているのではないかと。
"\\xF8" みたいにするか '\xF8' みたいにシングルクオートにすると良いかと。
0379nobodyさん2005/05/17(火) 19:27:46ID:???
>>378
ありがとうございます

シングルクオートに変更したところ、そのエラーは出なくなりましたが、次は
mbregex compile err: too short multibyte code string in
と出るようになってしまいました
何が短いのですか?
0380nobodyさん2005/05/18(水) 10:51:05ID:???
>>377
正規表現スレなのでスレ違いなのですが自分なら
<?php
$emoji = pack("n*", 0xF89F, 0xF8A0, 0xF8A1);
$test = "絵文字test1".$emoji."test2";
$count = mb_strlen($test, "sjis");
for ($i = 0; $i < $count; $i++) {
$char = mb_substr($test, $i, 1, "sjis");
$char_hex[1] = 0;
if (strlen($char) == 2) $char_hex = unpack("n", $char);
if ($char_hex[1] > 0xF89E and $char_hex[1] < 0xF9FD) echo " <b>".bin2hex($char)."</b> ";
else echo $char;
}
?>
こうする。
0381nobodyさん2005/05/18(水) 13:05:20ID:JNoGnyuI
オマンコ!
0382nobodyさん2005/05/18(水) 17:17:50ID:???
> Perlメモ
> http://www.din.or.jp/~ohzaki/perl.htm
> > HTMLタグの正規表現
> >   $comment_tag_regex =
> >     '<!(?:--[^-]*-(?:[^-]+-)*?-(?:[^>-]*(?:-[^>-]+)*?)??)*(?:>|$(?!\n)|--.*$)';

ってあるんだけど、これ通すと
my $str = '<!--- abcde --->'; とか
my $str = '<!-- \n var i=0; i--; document.write(i); \n // -->'; とか
全然うまくとれないんだけど、どう改造すればいい?

(?:[^>-]*(?:-[^>-]+)*?)??
↓
(?:[^>-]*(?:-[^>-]*)*)??

こうすると ↑↑ のはとってくれるけど、今度は
my $str = '<!-- comment -- cdata --> comment -->';
これが最後までとってくれなくなって困る orz
03833822005/05/18(水) 17:30:24ID:???
ごめん、↑じゃ言ってること矛盾しててアホだったw

× my $str = '<!-- comment -- cdata --> comment -->';
○ my $str = '<!-- comment -- cdata -- > quote_comment -->';

こんなで。
03843822005/05/18(水) 17:57:38ID:???
orz
それだったら /<!--.*?-->/ で事足りるのかw
スレ汚しスマヌ
0385nobodyさん2005/06/02(木) 19:31:18ID:???
「AAAを含み かつ BBBを含まない」 という正規表現の書き方を教えて下さい。

Perlで試したところ
(?=.*AAA)(?!.*BBB)
でいける感じなのですが、

開発に使用しているのはUNIXのC言語です。

(?=や(?! を使わないで、これと同じことを記述できませんでしょうか。
0386nobodyさん2005/06/02(木) 20:12:51ID:???
/AAA/ and !/BBB/
0387nobodyさん2005/06/02(木) 20:38:20ID:???
>>385
「UNIXのC言語」といってもいろんな正規表現ライブラリがあるわけですが・・・
# ちょうどプログラム板の正規表現スレでそんな話題が。

POSIX regex (re_format(7)) だと簡単には書けそうにないので
>>386 みたく二回正規表現マッチさせるか、
(?= や (?! をサポートした正規表現ライブラリを使うのが良いのでは?
0388nobodyさん2005/06/03(金) 17:12:04ID:kgnGijhB
質問がここでいいのか不明なんですが、
K2Editorというエディターを使用して、ある文章の中にある
「$英数字」という部分を検索したいのですが、
どのように正規表現を記述していいのか分かりません。

$英数字の前後には半角スペースが入っており、それに続いてまた記述があるので、
半角スペース前後まで検索したいと思っています。
例えば、
test $kensaku test
という個所があるとすると、$kensakuのみ検索対象にしたいのです。

K2Editorのヘルプを見る限り、$を使用するためのエスケープが\eと書いていました。
とすると、\e$[a-zA-Z_]+
と思ったのですがうまくいきませんでした。
ご教授下さい。


0389nobodyさん2005/06/03(金) 17:32:00ID:???
>>388
\$[a-zA-Z]+
はどう
03903882005/06/03(金) 18:23:28ID:???
>>389
うまくい検索出来ました。
ありがとうございます。
0391nobodyさん2005/06/03(金) 18:59:45ID:???
うまくいっちゃってから言うのもアレなんだけど $[a-zA-Z]+ ではダメだったの?
0392nobodyさん2005/06/04(土) 22:12:22ID:???
>>391 それはダメなケースけっこう多いと思うw
0393nobodyさん2005/06/05(日) 03:38:41ID:???
>>392
ん?たとえばどんなケース?
0394nobodyさん2005/06/05(日) 13:57:15ID:OswuRoJX
YahooIDと同じ規則の表現の仕方教えていただけますか?
・使えるのは半角英数字アンダーバーのみ
・最初の文字は英字のみ

宜しくお願いします
0395nobodyさん2005/06/05(日) 17:29:54ID:???
^[a-zA-Z]\w+
ってのはだめ?
0396nobodyさんNGNG
^[a-zA-Z]\w*$

文字数制限はない? 1文字以上ならOKの例で書いた
0397nobodyさん2005/06/07(火) 20:45:12ID:???
>>395
>>396
両方無理でした
普通にアンダーバー最初に書いても通っちゃいました
もしかして
if($FORM{'id'} =~ /^[a-zA-Z]\w+/);
じゃなくて
unless($FORM{'id'} =~ /^[a-zA-Z]\w+/);
みたいにしないとダメ?
0398nobodyさん2005/06/07(火) 21:41:12ID:???
>>396 ので良さそうなんだが。ダメだった再現コードを見せてみい。
0399nobodyさん2005/06/09(木) 19:55:53ID:???
漏れも粋な性器表現をしたいな
0400nobodyさん2005/06/09(木) 20:52:22ID:???
私の性器表現はコンパクトです。
0401nobodyさん2005/06/09(木) 20:53:51ID:???
私の性器表現は一言で言えばアワビです。
0402nobodyさん2005/06/09(木) 21:31:28ID:???
私の正規表現はクラス化して隠蔽しております。

        すいません、もうしません…
0403nobodyさん2005/06/10(金) 09:18:36ID:???
俺の正規表現は Perl で拡張されてるよ
0404nobodyさん2005/06/10(金) 21:49:19ID:???
正規表現は漏れの場合、珍出る裸。
0405nobodyさん2005/06/11(土) 18:52:57ID:yQRzdV10
PerlでURL文字列よりホスト名、ポート、パスを取得するような以下の
スクリプトを使っていますが
$url =~ m!(http:)?(//)?([^:/]*)?(:([0-9]+)?)?(/.*)?!;
if ($3) {$host = $3;}
if ($5) {$port = $5;}
if ($6) {$path = $6;}
$path =~ s/#(.)*$//;

http://User:Password@…というBasic認証のURLでユーザー名とパスワードを
抽出するためにはどう改造したらよいですか?
0406nobodyさん2005/06/11(土) 19:39:27ID:???
>>405
なんだか元のがすさまじい正規表現な悪寒。
04074052005/06/11(土) 21:12:07ID:yQRzdV10
>>406
昔、どこかのサイトに掲載されてたのをコピペで使ってます。
改造でなく、書き直しして頂いても、ありがたいです。
0408nobodyさん2005/06/11(土) 21:20:56ID:???
もしかして正規表現全然わからない?
0409nobodyさん2005/06/12(日) 06:55:46ID:???
丸投げスレいけ
0410nobodyさん2005/06/13(月) 09:18:09ID:???
正規表現の利用例を大量に載せてるサイトってない?
0411nobodyさん2005/06/13(月) 10:21:50ID:???
>>410
>>1
0412nobodyさん2005/06/18(土) 01:50:56ID:ioO/WA9K
基本的な質問ですみません。
perlで書かれたソースをphpに移行しようと試みています。
以下のperlのソースをphpで書くとどのようになりますでしょうか。

$data =~ s/"/"/g;

一応、

preg_replace("s/"/"/g", $data);

かなと思ったのですが、マニュアルを読んでみると、
phpの正規表現には修飾子「g」は無い、とあります。
他の関数を使う、関数をいくつか組み合わせるなど、
違う表現の仕方が必要になってくるのでしょうか。

お力添え宜しくお願いします。
0413nobodyさん2005/06/18(土) 04:07:16ID:???
>>412
preg_replaceはグローバルマッチだお!

preg_replace('/"/','&quote;',$data);
0414nobodyさん2005/06/18(土) 04:11:00ID:???
このままだと$dataの中身が代わらないと言われそうなので、一応。

$data = preg_replace('/"/','&quot;',$data);
0415nobodyさん2005/06/18(土) 08:51:00ID:7Fs175F4
perlの\Gはpregではどう書くんですか?
0416nobodyさん2005/06/18(土) 08:57:03ID:ioO/WA9K
<preg_replaceはグローバルマッチだお!
<$data = preg_replace('/"/','"',$data);

ご返答ありがとうございます。
グローバルマッチでしたか、申し訳ありません、勉強不足でした。
マニュアルを確認してみたところ、確かにそのような記述がありますね。

「limitが 省略されるか -1 の場合、マッチするものは全て置換されます。
」

>mixed preg_replace ( mixed pattern, mixed replacement,
>mixed subject [, int limit])

>subjectに関して patternを用いて検索を行い、 replacementに置換します。
>limitを指定した場合、limit 回のマッチまで置換が行なわれます。
>limitが 省略されるか -1 の場合、マッチするものは全て置換されます。

ありがとうございました!
0417nobodyさん2005/06/18(土) 23:16:26ID:???
>>415
そのままつかえるはず
0418nobodyさん2005/06/20(月) 17:29:30ID:???
http://www.powup.jp/jinken/

6・19人権擁護法案に反対する国民集会の音声ファイル(各20-40MB)
http://www.powup.jp/jinken/20050619/1_hiranuma_furukawa.mp3
http://www.powup.jp/jinken/20050619/2_hirata.mp3
http://www.powup.jp/jinken/20050619/3_otsukotsu.mp3
http://www.powup.jp/jinken/20050619/4_chihougiinn.mp3
3番目は特におもしろい
0419nobodyさん2005/06/22(水) 15:46:50ID:e2RB9R1A
PHP環境で入力された文字列に半角記号が含まれている場合、
エラーを表示させるために[:punct:]を使ったところ
「与」などの一部の文字が想定外のマッチをしてしまうのですが
どうやって回避すれば良いのでしょうか…

こんな感じで書いています。

if (preg_match("/[[:punct:]]/", $_GET['word'])) {
echo "記号が含まれています。";
exit;
}
0420nobodyさん2005/06/22(水) 15:58:05ID:???
>>419
文字コードをシフトジス以外にする
0421nobodyさん2005/06/22(水) 16:16:50ID:???
>>419
mbregex をインストールすればあるいは。
04224192005/06/22(水) 16:32:12ID:e2RB9R1A
>>420
既に運用を始めてしまっているので、文字コードを変えるのは厳しいですね…

>>421
間借りレンタルサーバーなのでmbregexのインストールは無理っぽいです…

回答ありがとうございます。
もう少し模索してみます。
0423nobodyさん2005/06/22(水) 17:06:39ID:???
>>422
そっか。じゃあこんなんでどうだろ?

$sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[\xA1-\xDF])';
if (preg_match("/^${sjis}*[[:punct:]]/", $str)) { ... }
04244192005/06/22(水) 18:18:33ID:???
>>423
おお!良い感じで動作してます。
ありがとうございます!
0425nobodyさん2005/06/22(水) 18:38:26ID:???
>>423
スンマソン。その$sjisに入ってるパターンにはどういう効力があるのですか。
0426nobodyさん2005/06/22(水) 19:15:04ID:???
>>422
mb_convert_encodingじゃだめかね?
0427nobodyさん2005/06/22(水) 19:47:10ID:???
>>426
インスコできないという話では?

>>425
Shift_JIS の「与」には "^" が混じっているのでそれがそもそもの問題。
Shift_JIS の文字の一部として "^" が出現した場合には [:punct:] にマッチさせず、
単独に出現した場合のみ [:punct:] にマッチするようにすると良い。

$sjis は ASCII 以外の Shift_JIS にマッチする正規表現で、
先に「与」を $sjis に食べさせて (マッチさせて) おけば、
単独に出現した "^" は [:punct:] に正しくマッチする。


・・・俺、説明下手だな orz
0428nobodyさん2005/06/22(水) 21:21:48ID:???
jcode.phpでEUCに変換する
04294252005/06/23(木) 16:31:57ID:???
>>427
なるほどっ!説明下手なんかじゃないですよ。よく分かりました。
ありがとうございます。
0430nobodyさん2005/06/24(金) 15:01:19ID:???
$sjis に [0-9A-Za-z] とかスペースとかも入れなくて平気なん?

「あいうえおabcde^!?」 とか
0431nobodyさん2005/06/24(金) 15:08:37ID:???
>>430
設問が「文字列に半角記号が含まれている場合、エラーを表示させるために」
だったので敢えて入れなかったんですが、
そういう動作を意図しているんなら入れるべきでしょうね。
0432nobodyさん2005/06/24(金) 19:13:15ID:???
[0-9A-Za-z] は"記号"じゃないだろ。
0433nobodyさん2005/06/25(土) 18:30:15ID:???
$_ = '(abc (def) ghi ( jkl (mno (p) q ) r) s) t (uv(wxy)z)';

こういうカッコがネストされた文字列があるとき、
対応したカッコ (abc 〜 s) までを取り出したいんだけど、何かいい方法はある?
ちなみに、Perl で カッコのネストの深さは 任意 、ってことで。
対応したカッコにあらかじめ番号振っておくくらいしか思い浮かばない・・・orz
0434nobodyさん2005/06/25(土) 19:22:29ID:???
>>433
http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
0435nobodyさん2005/06/25(土) 19:48:07ID:???
>>434
レスありがとう

でも、それ、 2重までなのか、結果が、
(def)
(mno (p) q )
(uv(wxy)z)
って出ちゃうんだよね・・・。 orz
0436nobodyさん2005/06/25(土) 19:57:51ID:???
>>435
最新の perl を使っていないかコードを写し間違えてるに 500 ペリカ。
0437nobodyさん2005/06/25(土) 20:05:08ID:???
・・・・
ああ、そうか、
$openclose = qr/\([^()]*(?:(??{$openclose})[^()]*)*\)/;
の $openclose をグローバルにしたらうまくいったよ!

ってグローバルじゃなきゃだめなのか・・・。
$_ でやったら perl 死ぬなあ。 ふむ。

とりあえずありがトンー。
0438nobodyさん2005/06/25(土) 22:28:47ID:???
>>437
#!/usr/local/bin/perl -w
use strict;
my $str = '(abc (def) ghi ( jkl (mno (p) q ) r) s) t (uv(wxy)z)';

my $openclose;
$openclose = qr/\([^()]*(?:(??{$openclose})[^()]*)*\)/;

while ($str =~ /($openclose)/g) {
  print $1, "\n";
}
__END__
0439nobodyさん2005/06/25(土) 23:17:06ID:???
OH! YES! THANX!!
0440nobodyさん2005/06/26(日) 01:22:38ID:XF0TC+BI
正規表現(grep)でIPアドレスを抽出したいのですが、
([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))
で合ってますか??
0441nobodyさん2005/06/26(日) 01:32:16ID:???
>>440
'.' で 4つにバラして各要素を数値比較した方が見通し良さそうだけどな。
0442nobodyさん2005/06/26(日) 02:08:19ID:XF0TC+BI
(([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.){3}([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))

>>441
こういうことですか?
よくわからないです、、
0443nobodyさん2005/06/26(日) 02:13:05ID:???
無理して全部正規表現じゃなくてもといいんじゃね?
04444402005/06/26(日) 02:58:14ID:???
いや、正規表現使えるようになりたいんです。
とりあえず、初歩の初歩だけは読んで理解したつもりなんですが、、
これでは全部抜けませんか?
0445nobodyさん2005/06/26(日) 03:55:40ID:???
>>440-444
grep と言っても色々あるわけでな…。
http://www.kt.rim.or.jp/~kbk/regex/regex.html

ERE なら

grep -E '((1[0-9]?[0-9]?|2(5[0-5]?|[0-4]?[0-9]?)|[3-9][0-9]?|0)\.){3}(1[0-9]?[0-9]?|2(5[0-5]?|[0-4]?[0-9]?)|[3-9][0-9]?|0)' ip_address.list

但しこれは "516.171.8.192" という文字列があった場合、"16.171.8.192"
にマッチする。GNU grep なら \b が使えるので、前後に \b をつければ
これを回避できる。
0446nobodyさん2005/06/26(日) 05:36:06ID:???
\n\n\s\s\s\s\n\n\n\n\n\n\n\n\nと、
\n\n\s\s\s\s\n\n\n\n\n\n\nという行があるとして、
検索した時に両方ともマッチする表現ってないかな?
0447nobodyさん2005/06/26(日) 06:00:33ID:???
.*
04484462005/06/26(日) 06:22:39ID:???
.*じゃだめっぽいなぁ。俺のやり方が悪いだけかもしらんけど。

<td rowspan=3 align=center>\n\n\s\s\s\s\n\n\n\n\n\n\n\n\n<a href=(.+?)>
と
<td rowspan=3 align=center>\n\n\s\s\s\s\n\n\n\n\n\n\n<a href=(.+?)>

なんだがPHPでRSSを出力してる最中に同じページで条件が違って参ってるんだ。
04494462005/06/26(日) 06:53:48ID:???
自己解決しました。>>447 ありがとう
0450nobodyさん2005/06/26(日) 09:54:32ID:???
真性ですね
0451nobodyさん2005/06/26(日) 11:06:09ID:???
\nという行っていういみがよくわからんのですが
0452nobodyさん2005/06/26(日) 16:40:57ID:???
url文字列へのリンク方法を教えて下さい。
htmlタグ内のurlにもマッチしてしまうので、困ってます。
環境は PHP 4.3系 です。

コードは
$str = preg_replace('/(?:href=["\']){0}((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '<a href="\1">\1</a>', $str);
や
$str = preg_replace('/(?:^href=["\'])((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '<a href="\1">\1</a>', $str);
$str = preg_replace('/([^"]|^)((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '\1<a href="\2">\2</a>', $str);
$str = preg_replace('/([^=^"]|^)((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '\1<a href="\2">\2</a>', $str);
と、色々試して見てますが、
やはりどれもタグ内のURLにもマッチしてしまいます。

良く使われるパターンだろうけども、検索結果や他の人のコードを見ても上記のようなコードしか得られません。
どなたか分かる方いますか?
0453nobodyさん2005/06/26(日) 17:14:29ID:Mzx+46/z
s/(^-^)/~~(-_-).../;
0454nobodyさん2005/06/26(日) 18:55:27ID:Di+cudPS
     .┌━┐    ┌━┐
      ┃┌╋──╋┐┃
      └╋┘    └╋┘
        ┃ ・   ・  ┃        ┌━━┐
    ●━╋┐    ┌╂━━━━╂┐  ┃
    └━┷┴━━╂┘        └╋━
0455nobodyさん2005/06/26(日) 19:03:15ID:???
携帯AAスレ
0456nobodyさん2005/06/26(日) 19:41:04ID:???
>>452
タグのついてないタイミングがあればそこでオートリンクすればいい。
もしくは誤認識をしない区間を一度切り出すとか。
<a href="http略"><b>http略</b></a>
452が考えてる方法だと↑こっちに反応してしまうよ。
0457nobodyさん2005/06/27(月) 02:30:35ID:???
>>452
http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside
Perl の例だが、やり方が理解できれば PHP でも書けるだろう。
0458nobodyさん2005/06/28(火) 18:33:30ID:7mbB9yts
初歩的な質問すみません。
cygwinのperl5.8です。

fuga
hogehoge

のような複数行にわたる文字列にマッチさせたいのですが

if (m!
fuga\r\n
hogehoge\r\n
!mx)

ではマッチしません。どう記述すればよいのでしょうか?
0459nobodyさん2005/06/28(火) 18:46:58ID:???
>>458
まずその文字列の改行コードがスクリプト上で実際にどんなバイト列と
なっているか調べた方がいいかもな。Cygwin は Default Text File Type の
設定も絡んでくるから、素直に ActivePerl 使った方が悩まずに済む。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#using_character_classes
0460nobodyさん2005/06/28(火) 19:48:30ID:7mbB9yts
>>459 返答ありがとうございます。
単一行の hogehoge\n にはマッチせず、 hogehoge\r\n にマッチしますので
改行コードに問題はなさそうです。
正規表現の問題ではなく環境依存の問題ということでしょうか。
もう少し調べてみます。
0461nobodyさん2005/06/28(火) 20:06:42ID:???
m/fuga\s+hogehoge\s+/s
0462nobodyさん2005/06/28(火) 20:16:47ID:nrjgh71k
s/(^-^) (^-^)/(T-T) (-_-+)/g;
04634582005/06/28(火) 20:30:28ID:7mbB9yts
>>461
m/hogehoge\s+/s
これにはマッチするのですが、

m/fuga\s+hogehoge\s+/s
これにはマッチしません。。。
0464nobodyさん2005/06/28(火) 20:33:41ID:???
>>463
基本的な質問で恐縮なのだが、
$_ には確かに "fuga\r\nhogehoge\r\n" という文字列は入っている?
04654582005/06/28(火) 20:52:33ID:7mbB9yts
>>464
while ( <> ){
if(m/fuga\s+hogehoge\s+/s){print "OK\n";}
}

こんなので標準入力から読み込ませているのですが、それを確認する方法がわかりません。
複数行読まれていないとしたら、どうしたらよいのでしょうか。
もうスレ違いな領域に入っているようですが。。。
0466nobodyさんNGNG
('・c_・` )
04674582005/06/28(火) 21:05:12ID:???
わかりました。
undef $/;
でうまくいきました。
お蔭様で、昨日から悩んでいたのが解決できました。
本当にありがとうございます。お騒がせして申し訳ありません。
0468nobodyさん2005/06/28(火) 22:46:19ID:???
s/(^o^) (^o^)/(>_<) (>_<)/g;
0469nobodyさん2005/06/29(水) 16:25:17ID:???
腐女子死ね
0470nobodyさん2005/06/30(木) 22:01:58ID:uEEJE9h2
すいません Perlなんですが、
3文字以内の行(を改行のみに置換)
ってどう書いたらいいでしょうか?
0471nobodyさん2005/06/30(木) 22:15:26ID:FhJSSQPy
>>470
文字と言っても色々ありますが・・・
0472nobodyさん2005/06/30(木) 22:44:30ID:???
常識的にいやぁ、こだろな。
s/^.{0,3}$//;
0473nobodyさん2005/07/01(金) 01:34:23ID:2L+Akkii
Perl使ってます。以下のようなHTMLコードから、番号と指名のハッシュを
取得するにはどうすればよいでしょうか?
-----
<table>
<tr><th>番号</th><th>氏名</th></tr>
<tr><td>01</a></td><td>山田太郎</td></tr>
<tr><td>02</a></td><td>山田次郎</td></tr>
</table>
0474nobodyさん2005/07/01(金) 02:21:26ID:???
行単位のループすれば$1がキー、$2が値になる。
$_ =~ m!^<tr><td>([^<]*)</a></td><td>([^<]*)</td></tr>!;
0475nobodyさん2005/07/01(金) 02:59:52ID:???
どうでもいいけど、その 無意味な </a> は何なんだろうね。
0476nobodyさん2005/07/01(金) 12:53:26ID:???
番号大きくなるとが数字だけじゃなくていずれ<a href="mailto:hage">とか文字列に代わるのかな?
0477nobodyさん2005/07/02(土) 09:11:37ID:???
正規表現で、fooを含みbarを含まない行をヒットさせる方法はないでしょいか?

いまのところ、文字列fooを含まない行は
^(((([^f]*)*(f+[^o][^f]*)*)*)*(f+o[^o][^f]*)*)*$
でヒットすることがわかりました。
この先がどうしてもわからないのです。
お知恵をお貸し下さい。
■ このスレッドは過去ログ倉庫に格納されています