正規表現道場@2ch Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/24 22:57ID:LrbVcl3Yこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
リンクなどは>>2-5のあたりに。
0652nobodyさん
03/06/24 18:51ID:???0655nobodyさん
03/06/27 13:05ID:???$_ = "w439soz980i505";
@a = /^(?:(\w)(\d{3}|[ao]))+$/;
上のような正規表現で、括弧に入った文字列を全て@aに入れたいんですが、
実際にはループの最後の"i"と"505"だけしか入りません。
全てを@aに入れる方法はあるんでしょうか?
0656nobodyさん
03/06/27 14:07ID:???@a = /((\w)(\d{3}|[ao]))+?/g;
@aの中身 w439 w 439 so s o z980 z 980 i505 i 505
0657nobodyさん
03/06/27 23:00ID:???$fn =~ s/\W/\0/g;
$fn =~ s/\0/\|/g;
は、一体どういう処理をしているのか判る方いませんでしょうか
0660nobodyさん
03/06/28 04:40ID:???$fn =~ s/\W/\|/g;
じゃないんだろう
0661nobodyさん
03/06/28 04:59ID:???0664nobodyさん
03/06/28 19:23ID:???0665nobodyさん
03/06/29 09:15ID:???0667nobodyさん
03/06/30 16:44ID:???0669nobodyさん
03/06/30 17:12ID:???0670nobodyさん
03/07/03 21:15ID:???0672nobodyさん
03/07/10 13:41ID:???2,143,184という風に3桁ごとにカンマを入れるにはどうしたらいいですか?
おしりからマッチさせることができれば簡単なんですが。
この桁数だと,
/^([0-9]{,2})([0-9]{3})([0-9]{3})$/
を
\\1\,\\2\\3
としたらできるんですが,もっときれいにできる方法を教えてください
0673672
03/07/10 13:50ID:qpJaCER1○ \\1\,\\2,\\3
0676あぼーん
NGNG0677山崎 渉
03/07/15 11:08ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0678nobodyさん
03/07/15 22:27ID:bkNlTgQn$str =~ s/(^|<br>)>.*?(?=<br>|$)/<blockquote>$&<\/blockquote>/g;
$srt =~ s/<\/blockquote><blockquote>//g;
このような正規表現を書きました。
でもなんかスマートではないので、
上記二つのをまとめて表すにはどうすればいいのでしょうか?
0679nobodyさん
03/07/16 00:28ID:???正規表現してください,お願いします。
0680nobodyさん
03/07/16 00:42ID:???つか何でblockquote?
0683nobodyさん
03/07/16 02:15ID:???0685nobodyさん
03/07/16 22:57ID:???掲示板なんかで、引用符「>」「>」から先の文字の色を変えるにはどうしたらいいですか?
0687679
03/07/17 00:29ID:???0689679
03/07/17 01:28ID:???$line =~ s/^(..)(...)//;を、PHPで使いたいんでどのように正規表現したら、
いいでしょうかということで・・・
0691nobodyさん
03/07/17 02:26ID:???そのperlの文が何をしてるか分かってる?
perl互換の正規表現は preg_* で使えるから、PHPのマニュアルをよく読んでごらん。
0692nobodyさん
03/07/17 09:54ID:???0694679
03/07/17 17:32ID:???0697nobodyさん
03/07/18 10:04ID:qmPObEGpPHP4.2.3-9でタグの外側の文字のみ置換したい
<?
$word = "<a href=\"http://hoge.hoge/bb/\">link Bb</a>";
echo "これを$word<br>\n";
$word2 = "<a href=\"http://hoge.hoge/bb/\">link <b>B</b><b>b</b></a>";
echo "こうしたい$word2<br>\n";
$word = preg_replace("/((?:\G|>)[^<]*?)(b)/i","\\1<b>\\2</b>",$word,-1);
echo $word;
?>
実行結果は
<a href="http://hoge.hoge/<b>b</b>b/">link <b>B</b>b</a>
になりました。
0698697
03/07/18 10:04ID:qmPObEGp#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
$word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
print "これを$word<br>\n";
$word2 = "<B>b</B>ase <B>b</B><B>b</B><a href=\"http://hoge.hoge/bb/\">link <B>B</B><B>b</B></a><B>b</B>g <B>b</B>ig";
print "こうしたい$word2<br>\n";
$word =~ s/((?:\G|>)[^<]*?)(b)/$1<B>$2<\/B>/ig;
print "$word";
実行結果は
<B>b</B>ase <B>b</B><B>b</B><a href=\"http://hoge.hoge/bb/\">link <B>B</B><B>b</B></a><B>b</B>g <B>b</B>ig
で意図したとおりになりました。
PHPのpreg_replaceはPerl互換なのに、実行結果が異なるのでしょうか?
0699nobodyさん
03/07/18 13:23ID:yTICzsYGhttp://jp.php.net/manual/ja/pcre.pattern.syntax.php
6. Perlの\G言明は、一回のパターンマッチに関するものではないため、 サポートされません。
0700nobodyさん
03/07/18 17:43ID:???0701697
03/07/18 17:49ID:qmPObEGpあれれ。そうなんですか。
PHPでどう書けばいいんだろう。
0702nobodyさん
03/07/18 22:35ID:5012QaLa$word = preg_replace("/((?:^|>)[^<]*?)(b)/i","\\1<b>\\2</b>",$word,-1);
0703703 ◆jhDfq/C6oU
03/07/21 06:22ID:vOgKMI0a$q1 =~ s/\b1\b/12番目/;
$q1 =~ s/\b2\b/16番目/;
[$q1]が[1]ならば『12番目』を、
[2]だったら『16番目』と置換えたいのですが、
[$q1]が[1]だった時、『12番目16番目』と置換えられてしまいます。
勘違いかもしれませんが、『\b』で境界をやってみても変わりません。
どのようにすると良いでしょうか?
ご教授お願い致します。。。
p.s 条件分岐のほうがいいのでしょうか?
0704nobodyさん
03/07/21 09:20ID:???漏れのところでは動いているが。
$q1 = '0 1 11 12 2 21 22 3 4 5 9';
$q1 =~ s/\b1\b/12番目/;
$q1 =~ s/\b2\b/16番目/;
printf qq($q1\n);
出力
0 12番目 11 12 16番目 21 22 3 4 5 9
0705nobodyさん
03/07/21 18:05ID:???$a[0] = "HyperTextTransferProtocol = HTTP";
$a[1] = "UniversalResourceLocation = URL";
$a[2] = "DataBase = DB";
これらの=より前の部分を大文字にしてスペースで区切って
HYPER TEXT TRANSFER PROTOCOL
UNIVERSAL RESOURCE LOCATION
DATA BASE
と出力させたい。
どなたかご教授願います。
0706nobodyさん
03/07/21 18:21ID:???$a[0] =~ s/([a-z]+)/\1 /g;
print $a[0] . "\n";
$a[0] =~ tr/a-z/A-Z/;
print $a[0] . "\n";
0707706
03/07/21 18:23ID:???foreach ( @a ) {
s/([a-z]+)/\1 /g;
tr/a-z/A-Z/;
}
0708nobodyさん
03/07/21 18:36ID:???0710697
03/07/22 10:45ID:FAepGeTTすごい! 動きました。
ありがとうございます。
0712697
03/07/22 10:52ID:FAepGeTT$word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
$word = preg_replace("/((?:^|>)[^<]*?)(b)/i","\\1<b>\\2</b>",$word,-1);
結果
<b>b</b>ase bb<a href="http://hoge.hoge/bb/">link <b>B</b>b</a><b>b</b>g big
になりました。
一部置換されないみたいです。。
0714あぼーん
NGNG0715702
03/07/22 15:04ID:+ex6aWifすまん。
$word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
$word = preg_replace('/(?:^|(?<=>))([^<]*)/e', "preg_replace('/(b)/i','<b>\\\\1</b>','\\1')", $word);
echo $word;
で多分OK.
http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside
を参考にした。
>>711
ワラタ.ゴメソ.
0716あぼーん
NGNG0717697
03/07/22 15:36ID:FAepGeTTすごい!
ありがとうございます。
ちゃんと置換されてました!
0718nobodyさん
03/07/24 18:38ID:9bbcZ2D/Perlメモを見ると、長いバージョンと短いバージョンが以下のようにかかれてますが・・・
$http_URL_regex =
q{\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f} .
q{][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.)} .
q{*[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\.} .
q{[0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f]} .
q{[0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-} .
q{Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f} .
q{])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*)} .
q{*)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])} .
q{*)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*} .
q{)?};
s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+
http:// or https:// がないパターンの正規表現っていうのは、
上記から、
長いバージョンは、(?:https?|shttp):// をとりのぞいたもの、
短いバージョンは、s?https?:// をとりのぞいたもの、
っていう認識は、あってますか?
0720あぼーん
NGNG0723nobodyさん
03/07/25 00:18ID:???取り除いて残るのは [-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+ だよな?
[ ] 内の文字が1文字以上ってことだ
1-1=2
(,,-_-)
(~*~)ohhoho(-_-;)
1000Get!!
いろいろマッチするけどいいのか?
まあ使う場所によってはいいのかもしれないが
0725nobodyさん
03/07/25 01:15ID:???その辺考えれば解ると思うが…
0726nobodyさん
03/07/27 03:01ID:2mIqT5H5linuxのコマンドライン上で、カレントディレクトリ以下からabcま
たはdefを含むファイル名を表示させたいのですが、
find|grep (abc|def)とかやってもだめなんです。どうすれば
よいんでしょうか?
0728nobodyさん
03/07/27 09:47ID:???port番号とユーザ名、パスワード、追加情報 が抜けてるぞ。
http://tokyo.cool.ne.jp/masapico/api_InternetCrackUrl.html
0729726
03/07/27 09:52ID:95lYaVNFありがとうございました!
0730あぼーん
NGNG0732732
03/07/27 13:16ID:dJWoBMBZ$a内の『7月27日』を『7/27』に換えたいんですが、
$data =~ s/7月27日/7/27/g;
と、すると区切りのスラッシュがダブってしまいますよね。
こんなときの対処方法がご存知でしたら、
御教授お願い致します。
0734nobodyさん
03/07/27 13:51ID:???0739732
03/07/27 15:07ID:dJWoBMBZ$data =~ s/7月27日/7/\27/g;
[\]位置が逆でした(汗
ありがとうございます。
もう一つ御教授頂きたいのですが、
$data =~ s/ソ/そ/g;
こちらの置換がエラーとなってしまいます。
解決方法はございますか?
0742nobodyさん
03/07/27 17:54ID:???欺(0x8B5C) 圭(0x8C5C) 構(0x8D5C) 蚕(0x8E5C) 十(0x8F5C) 申(0x905C)
曾(0x915C) 箪(0x925C) 貼(0x935C) 能(0x945C) 表(0x955C) 暴(0x965C)
予(0x975C) 禄(0x985C) 兔(0x995C) 喀(0x9A5C) 媾(0x9B5C) 彌(0x9C5C)
拿(0x9D5C) 杤(0x9E5C) 歃(0x9F5C) 濬(0xE05C) 畚(0xE15C) 秉(0xE25C)
綵(0xE35C) 臀(0xE45C) 藹(0xE55C) 觸(0xE65C) 軆(0xE75C) 鐔(0xE85C)
饅(0xE95C) 鷭(0xEA5C) �x(0xED5C) �x(0xEE5C) �\(0xFA5C) �\(0xFB5C)
0743nobodyさん
03/07/27 18:05ID:???0744nobodyさん
03/07/27 21:27ID:???0745nobodyさん
03/07/28 12:23ID:???0746nobodyさん
03/07/28 13:12ID:???曾 よーく見ると絵に見えてくる文字 曾
http://life2.2ch.net/test/read.cgi/kankon/1052576557/
0749nobodyさん
03/07/29 23:53ID:???一桁〜二桁の数字をあぶり出したいのですが、[0-9][0-9]とかだと二桁数字しか見つけられないっす。
if(($_==[0-9])||($_==[0-9][0-9]))みたいな形にするしかないのかな…
0750nobodyさん
03/07/30 00:06ID:???[0-9][0-9]?
[0-9]{1,2}
\d\d?
\d{1,2}
とか?
■ このスレッドは過去ログ倉庫に格納されています