トップページ⇒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/
0320nobodyさん2005/04/15(金) 19:13:10ID:???
ああ、:が半角になってもうた。
0321質問2005/04/15(金) 19:18:57ID:jvrJ4EBi
>>319
ありがとうございました!
0322muro p5172-ipad05okidate.aomori.ocn.ne.jp/2005/04/15(金) 20:01:28ID:???
え     っ     る     ハ     
  ぇ     し     の    ァ ハ  
    け     と     ぉ     ァ 
うはっwww夢がひろがりんぐwwwwww   
0323nobodyさん2005/04/15(金) 20:49:10ID:???
うはwwwデスクトップ、エロゲばっかwwwww
0324nobodyさん2005/04/16(土) 00:12:52ID:???
ワロタW
0325nobodyさん2005/04/20(水) 16:00:48ID:ns2jNcNy
<A HREF="http://www.hogehoge.ne.jp/~nakama/">
<A HREF='http://www.hogehoge.ne.jp/~nakama/'>
<A HREF=http://www.hoge.ne.jp/~nakama/>
<A HREF=http://www.hoge.ne.jp/~nakama/ TARGET=_blank>

上からURLだけを抜き出したいのですがいまいちわかりません。
何となく正規表現はわかっているのですが。
解決になるような事でもなんでもいいので教えてください。よろしくお願いします。
0326nobodyさん2005/04/20(水) 17:11:27ID:???
なんとなくわかってるなら
なんとなく抜き出せるだろうから
なんとなく聞く必要がないんじゃないかと思う
0327nobodyさん2005/04/20(水) 18:20:03ID:???
なんとなくレベルの知識で書いた、いまいちわからない正規表現とやらをまず出してみなよ。
0328nobodyさん2005/04/20(水) 18:30:19ID:???
URLの正規表現なんてすぐ見つかるだろうに。
0329nobodyさん2005/04/20(水) 18:46:23ID:???
ピンキリだけどね
0330nobodyさん2005/04/20(水) 20:05:32ID:y0ltMBju
$hoge = ’
<select name="a">
<option value="A" selected>■</option>
<option value="B">★</option>
<option value="C">▲</option>
</select>

<select name="b">
<option value="A">■</option>
<option value="B">★</option>
<option value="C" selected>▲</option>
</select>
’;



となっている場合、
『selected』が付いているoptionにマッチさせ、
そのvalue値【A】を$hoge1へ代入するしたいのですが、
正規表現はどのようになるのでしょうか?

$hoge =~ /value="?([^"]+)"? selected/g
$hoge1 = $1;
$hoge2 = $2;

↑これでは、ダメでした。
御教授 お願い致しますm( __ __ )m
0331nobodyさん2005/04/20(水) 21:26:49ID:???
そういうhtmlファイルを一行ずつ読むコードなら
その正規表現でもAとCを取り出せるんだけどね。
0332nobodyさん2005/04/21(木) 00:11:41ID:???
>>330
@array = $str =~ /<option\s+(?:\S+\s+)*?(?:value\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)).*?selected|selected\s+(?:\S+\s+)*?value\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)))\s*(?:\S+\s+)*?>/g;
$hoge1 = join"",splice @array,0,6;
$hoge2 = join"",splice @array,0,6;
0333nobodyさん2005/04/21(木) 00:17:28ID:???
ごめん、>>332はやりすぎた。

@array = $str =~ /<option value="([^"]+)" selected>/g;
$hoge1 = shift @array;
$hoge2 = shift @array;
0334nobodyさん2005/04/21(木) 00:53:08ID:???
>>325
@array = $html =~ /<a\s+.*?href\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)).*?>/gi;
push @url, join"", splice @array,0,3 while @array;
0335nobodyさん2005/04/21(木) 09:53:22ID:L6TjsDSV
PHP4.3.11の環境で、PHPプログラムで読み込むhtmlファイルに
以下のように自分で決めたブロック要素的なコメントタグを挟んでいます。
---------------------------
<!--mytag-->
 aaa
 <!--mytag-->
 bbb
 <!--/mytag-->
 ccc
<!--/mytag-->
ddd
<!--mytag-->
eee
<!--/mytag-->
----------------------------

この中で、内側にそれ以上自分で決めた同一コメントタグが
入っていない部分、つまり、
<!--mytag-->
 bbb
 <!--/mytag-->
と、
<!--mytag-->
eee
<!--/mytag-->
の部分のみ取り出したいのですが、どのような式を書けば良いでしょうか。
03363352005/04/21(木) 11:55:55ID:L6TjsDSV
自己解決。

$s = "<¥!¥-¥-mytag¥-¥->";
$e = "<¥!¥-¥-¥/mytag¥-¥->";
$rgexp = "/$s(?:(?!($s|$e)).)+$e/s";

で判別できました。
0337nobodyさん2005/04/21(木) 13:58:44ID:???
質問です。
掲示板に書き込まれた本文の行末に改行タグがある場合、
それを除去するという処理を加えたいと思っています。
$textが"test<BR><BR><BR><BR><BR><BR><BR><BR><BR>"などのように、
文末に<BR>がある限り、それを取り除く処理にしたいと思います。
この場合ですと、"test"という文字列だけにしたいと思っています。
$textが"test<BR><BR><BR><BR>test2<BR><BR><BR><BR><BR>"であれば、
"test<BR><BR><BR><BR>test2"にしたいと思っています。

while ($text =~ /<BR>$/) {
 $text =~ s/<BR>$//g;
}

この記述で動かないのですが、どこが原因なのでしょうか。
0338nobodyさん2005/04/21(木) 15:00:35ID:???
>>337
$textの最後に本当の改行コード(\nとか\r\n)がついてるんじゃないの。
0339nobodyさん2005/04/21(木) 15:06:43ID:???
>>337
$text =~ s/(?:<BR>)+$//;
03403302005/04/22(金) 00:10:20ID:???
>>331様
アドバイスありがとうございます。
>>333様
御教授ありがとうございます。
早速試してみましたが、うまく代入されませんでした。。。


$_ = $hoge;
my @hoge = /value="(.+)" selected/g;
$hoge1 = $hoge[0];
・
・
・
・
これで、自己解決いたしました。
0341nobodyさん2005/04/24(日) 04:15:14ID:???
やぶだけど。
>>333がダメってのは、「$str」 を 「$hoge」 にしてないだけだと思うがw

自分的には↓で済む気がする。
my ($hoge1, $hoge2) = $hoge =~ /<option\s*?value="([^">]*?)"\s*?selected>/g;

あと $hoge は、ヒアドキュメントにしる。
0342nobodyさん2005/04/26(火) 15:49:33ID:???
ごめん教えて。

「先頭から最後まで<br>と\s以外の文字が1つもない」

・・・
0343nobodyさん2005/04/26(火) 20:14:20ID:???
>>342
ごめん何を教えてほしいのか教えて。
0344nobodyさん2005/04/26(火) 22:35:00ID:???
[^\s|(<BR>)]
iオプション付けてね
0345nobodyさん2005/05/06(金) 00:14:31ID:???
|゚Д゚)・・・
0346nobodyさん2005/05/10(火) 20:33:44ID:???
$txtから"きゅうり","すいか"2つの単語が含まれていた場合に
マッチさせたいんですけど、うまく動いてくれません。
どうすればいいでしょうか。

$txt = "トマトきゅうりピーマンなすすいか";
if(mb_eregi("[きゅうりすいか],$txt)){echo "合致";}
0347nobodyさん2005/05/10(火) 20:45:59ID:P1c+fxiD
http://d3079189.tcat.ne.jp/
うぇwwwwwwwwwwwwwwwおkwwwwww
wwwwwwwwwwwwっうぇ

wwwwwおkwww
wwwwwwwwwwwwwwwwwwwwwwwww
0348nobodyさん2005/05/10(火) 21:26:22ID:???
>>346
ダブルクォートが閉じてないのは打ち間違いだろうけど、
文字クラスについて勘違いしてるようだ。
0349nobodyさん2005/05/10(火) 21:56:28ID:???
" きゅうり*すいか*"
こうですか?
0350nobodyさん2005/05/10(火) 22:04:57ID:???
うむ、勉強しなおして来い。
0351nobodyさん2005/05/10(火) 22:14:43ID:???
mb_eregi("/(きゅうり)+(すいか)+/",$test)
師匠これでもだめです。
ヒントください
0352nobodyさん2005/05/10(火) 22:14:42ID:???
>>346
http://www.din.or.jp/%7Eohzaki/regex.htm#And
0353nobodyさん2005/05/10(火) 22:33:57ID:???
師匠ありがとうございました。
mb_eregi("(?=.*きゅうり)(?=.*すいか)",$txt)
これでできました。
0354nobodyさん2005/05/11(水) 14:06:16ID:8aMwQX6h
wordでの話しなのですが、機能というより、正規表現のアルゴリズム?
についてなのでここでお願いしますm(_ _)m

CSV形式のファイルをwordに取り込んだときに、CSV特有の文字列にはダブルクォート、その中のダブルクォートにも
ダブルクォートの部分がそのまま残ってしまって困ってるので、wordの置換機能で削除しようと思ってます。

単純にダブルクォートだけなら
検索:"(*)"
置換:\1
で、できますがこれだと
"19""1238","a9a0","0198"
などでしくじってしまいます。

どういう式にすればいいでしょうか?
Perlの知識はありますので、回答はwordでの式でなくてもPerlでの式でも大丈夫です。

宜しくお願いしますm(_ _)m
03553542005/05/11(水) 14:14:27ID:8aMwQX6h
Perlではいつもtext::CSV_XSでやってるからファイルを見れば分かると思ったのですが、
わかりませんでした・・・・orz

置換演算子でヒットしなかったのはなんでだろ・・・・
0356nobodyさん2005/05/11(水) 18:18:19ID:???
>>354
ワードってPerl形式の正規表現使えたっけ?
それにPerlの知識があるなら、CSVをPerlでいじってからワードに取り込めばいいだけじゃ?

ついでにいえば、Excelで取り込めば、適切なデータになるじゃん。
それをワードに貼り付けるなり埋め込むなりすればいいんじゃ?

なんというか、道具があるのに変に知識だけ持ってるから
逆に面倒にしてるだけだし・・・
03573542005/05/11(水) 20:09:41ID:8aMwQX6h
>>356
wordの置換はperlとはちょっと違いますけど、考え方は同じようなものなので。

データはワードで使いたいんです。
Excelで取り込むと適切なデータになりますが、それをwordにコピペするとちょっと違う
ことになってしまうんです。
wordで普通に「挿入」→「表」で作る表とは違う、オブジェクトとしての表になってしまって
後からいじったりできないんです。

Perlでいじってからというのは確かに、Text::CSV_XS使ってやればできますが、
毎度一旦Perlを通すのもあれですし、仕事場ですので毎度同じPCを使えるわけでは
ないのです。wordなんかの基本ソフトはどのPCにでも入ってますが。

できればwordだけでやりたいので、wordの置換で、と思ったのですが。
CSVのクォート削除正規表現って簡単そうで、結構難しいんですかね?
私が未熟だからだけかと思ったら、このスレの方でもパッはでてこないんですね。

でも、もしもわかるかたいましたらお願いします。1日1回は見に来ますので。
0358nobodyさん2005/05/11(水) 20:25:22ID:???
>>357
>wordで普通に「挿入」→「表」で作る表とは違う、オブジェクトとしての表になってしまって
>後からいじったりできないんです。

悪いことは言わない、MS WORDの入門書なり勉強やり直した方が良いよ。
Perl弄ってるとか置換作業とか変な知識とか作業要らない。
お前さんが言ってる事は、普通に出来る。

聞いてると、ただWORDを使いこなせない工場とかのおじちゃんおばちゃんレベル。
0359nobodyさん2005/05/11(水) 21:16:53ID:???
Google のキャッシュ表示にあるような
ハイライト表示を実現したいと思っています。

HTML ソース内のある単語を置換するときに
タグ内にその単語が含まれる場合は無視する
という表現はどのように書けばよいでしょうか。
言語は Perl です。
0360nobodyさん2005/05/11(水) 21:25:19ID:a0NETEmd
>>354
s/"((?:[^"]|"")*)"/$1/g
s/""/"/g

の2回にわけるのが楽だと思われる。
0361nobodyさん2005/05/11(水) 21:28:57ID:???
なぁ、今、適当に作ったCSVファイルをエクセルで読み込んで、
でもって、そのセルの部分をドラッグドラッグして全部選択して、Ctrl+Cでコピーして
ワードでCtrl+Vで貼り付けしたら、普通にワードで表作った形式になったんだけど・・・

やっぱり、MS Officeの知識が無いって事でFA?
03623592005/05/11(水) 21:32:07ID:???
自己完ですが

$output =~ s#(?<=>)([^<]+)?\b($regexp)\b#$1<B style="color:black;background-color:\#ffff66">$2</b>#gis;

でできました。
0363nobodyさん2005/05/11(水) 21:39:20ID:a0NETEmd
>>359
正規表現だけでなんとかしようと考えないほうがいいと思うよ。

オレならこんな感じにするかねぇ。

$s = <<HTML;
<html>
<a href="foo.html">foo</a>
</html>
HTML


$s = ">$s<";
$s =~ s/>([^<]*)</$_ = $1; s|foo|baa|g; ">$_<"/ge;
$s = substr($s, 1, -1);
print $s;
03643542005/05/12(木) 17:56:56ID:mNlaSBNN
>>358
普通にできるというのは、エクセルからのコピペや、ワードでの置換作業なしに
既存のword文書にCSVをworr形式の表化して取り込めるということでしょうか?

ヘルプでは見つけられませんでしたが、もしかしたら私のword2000ではできないのかな。
何年版のwordでしょうか?

>>361
あれ、できましたね;
XLSの取り込みと勘違いしたのかもしれません。
03653542005/05/12(木) 17:58:39ID:mNlaSBNN
>>360
ありがとうございます!
一旦外枠だけはずしてやるんですね^^
さすがですm(_ _)m
0366nobodyさん2005/05/12(木) 18:04:52ID:???
>>364
俺もやってみた。

拡張子CSVはExcelと関連付けられているので、CSVファイルをダブルクリックして開く。
CSVは正常な形に各セルに表示されているのを確認。
先に、Excelで開いたCSVのデータを格子状に罫線を引き、
ドラッグして貼り付けたい範囲を選択してCtrl+Cでクリップボードにコピー。

その後、Wordを新規に開き、そこへ、Ctrl+Vで貼り付けてみた。

普通にWordで表を作った見たいな形式に張り付いた。

使用したのはMS Office2000。
03678202005/05/13(金) 16:57:34ID:JEsyMCCs
Greplaceというソフトを使って、txtファイルの置換処理をしているところなのですが

「httpで始まって--で終わる文字列」を正規表現で表現すると
http*-- でいいだろうと思って検索かけたところひっかかりません。
しょうがないので、 http.-- に表現を変えてみたのですが、これもヒットせず。

どなたか、こうやって書けばいいんだよと教えていただけると助かります。
0368nobodyさん2005/05/13(金) 17:39:23ID:???
http.*--
だろうなぁ。
03693672005/05/13(金) 17:54:22ID:JEsyMCCs
>>368
回答ありがとうございます。うまくいきました。
0370nobodyさん2005/05/14(土) 16:27:37ID:???
PHPでDoCoMo絵文字をbin2hex()したいのですが

$string = 'あ表示テスト';
               ↑↓この部分が絵文字です
$s1 = mb_ereg_replace('([--])',
bin2hex("\\0"), $string);

こうすると$s1が あ表示テスト5c305c305c305c305c305c305c30 になってしまいます
ttp://www.nttdocomo.co.jp/p_s/imode/make/emoji/index.html ここのSJIS16進数にしたいのですが、どこがおかしいですか?
0371nobodyさん2005/05/14(土) 16:55:30ID:???
書き忘れていました
正規表現を使わず$stringに絵文字に入れを$string全体をbin2hexするとうまくできました
0372nobodyさん2005/05/15(日) 16:05:51ID:???
mbregex を使って preg_replace_callback と同じようなことをするには
どうすればよいでしょうか?PHPです。
0373nobodyさん2005/05/16(月) 18:24:07ID:???
>>372
普通にできますよ。
0374nobodyさん2005/05/17(火) 13:35:15ID:9ytTXCmS
1-9,A-Z,a-zのうちの1文字が連続する場合に一致するパターンはどうかけばいいのでしょう?
つまりaaaaaaとか55555555とか ZZZZZとか。入力値に対してチェックを
かけたいのでどの文字かは入力されるまで分かりません。
PHPでかくと ereg('^([a-zA-Z0-9]*)$', $str)
みたいなスカっとおさまる書き方はないのでしょうか?
配列に文字を入れてループで回してチェックするしかないのでしょうか?
0375nobodyさん2005/05/17(火) 14:44:14ID:???
>>374
PCRE が使えるなら preg_match('/^([a-zA-Z0-9])\1+$/', $str) でしょうか。


どうも ereg() ではパターン内での後方参照が使えないっぽいんですが、
そういうものなのでしょうかね?
man 7 re_format 見る限りは POSIX 1003.2 の拡張正規表現でも使えそうなんですが。
0376nobodyさん2005/05/17(火) 15:18:00ID:9ytTXCmS
>375
ためしてみたところうまく機能しました!
有り難うございます!
やっぱereg()では後方参照つかえないんですかねぇ
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;
}
■ このスレッドは過去ログ倉庫に格納されています