正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/11/19 21:42ID:Kst3Nn4Sこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
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/
0002nobodyさん
03/11/19 21:44ID:???0003nobodyさん
03/11/19 22:56ID:???0004nobodyさん
03/11/20 00:40ID:???0005nobodyさん
03/11/20 01:09ID:???0006nobodyさん
03/11/20 13:42ID:???0007nobodyさん
03/11/20 15:18ID:???0008nobodyさん
03/11/20 20:06ID:???$MyJob =~ s/仕事/労働/;
0009nobodyさん
03/11/20 20:06ID:???0010nobodyさん
03/11/20 20:15ID:???0011nobodyさん
03/11/21 14:29ID:???条文(第一条〜第九百九十九条)をアラビア数字(第1条〜第999条)に置き換える式を教えてください。
0013未承諾広告※ ◆aiY4htt2.2
03/11/21 21:05ID:???$arabic{'第一条'} = 1;
から、
$arabic{'第九百九十九条'} = 999;
まで入れといて、
対象文字列 $joubunn に対して置換してみるとか?
$joubunn =~ /$regexp/$arabic{$regexp}/ foreach my $regexp (keys %arabic);
効率悪そうな悪寒。。。
0014nobodyさん
03/11/21 22:07ID:???そういうハッシュテーブル使っていいなら、これでそんなに効率悪くないかと。
%arabic = ('一' => 1, ..., '九百九十九' => 999,);
$joubunn =~ s/(?<=第)(.+?)(?=条)/(defined($arabic{$1}))?$arabic{$1}:$1/ge;
てゆかそもそもそのハッシュテーブルの初期化が効率悪そうな悪寒。。。
0015nobodyさん
03/11/21 22:43ID:???my %ichi = ("一"=>1, "二"=>2, "三"=>3, "四"=>4,
"五"=>5, "六"=>6, "七"=>7, "八"=>8, "九"=>9);
my %juu = ("十\"=>1, "二十\"=>2, "三十\"=>3, "四十\"=>4,
"五十\"=>5, "六十\"=>6, "七十\"=>7, "八十\"=>8, "九十\"=>9);
my %hyaku = ("百"=>1, "二百"=>2, "三百"=>3, "四百"=>4,
"五百"=>5, "六百"=>6, "七百"=>7, "八百"=>8, "九百"=>9);
$joubunn =~ s/第(.*?百)?(.*?十\)?(.*?)?条/
"第".($hyaku{$1}||"").($hyaku{$1}?$juu{$2}||0:$juu{$2}||"").($ichi{$3}||0)."条"/eg;
# なんかこれって位取りの処理の仕方が肝で、正規表現とはあんまり関係なさそうな予感。
0016nobodyさん
03/11/23 02:27ID:marqbBstマッチさせるにはどうしたらいいのでしょうか?
<img src="オムレツ.jpg" alt="おいしい料理1"><b>料理の解説1</b>
<img src="カツ丼.jpg"><b>料理の解説2</b>
っというタグがあってこれから
1行目では、
\1 → オムレツ.jpg
\2 → おいしい料理
\3 → 料理の解説1
2行目では
\1 → カツ丼.jpg
\2 →
\3 → 料理の解説2
というようにしたいのです。
src="(.*?)".*?alt="(.*?)".*?<b>(.*?)</b>
↑のような正規表現を考えたのですが
これを2行目にも正しくマッチできるように
修正していただけませんか?
0017nobodyさん
03/11/23 03:02ID:???0019nobodyさん
03/11/24 18:36ID:???漢数字<->数値<->アラビア数字 で相互変換できればどういったケースでも使える
ちまり正規表現は数字文字列の抜き出しに使うくらいがいいね
0020nobodyさん
03/11/25 00:30ID:???「改行も含めて全部」はどう表現すればよいのでしょう?
「.*」で「改行以外の任意の文字0個以上=改行含まない全文字列」
ですが
「改行も含めた任意の文字0個以上=改行も含めた全文字列」はどう表現すればよいのでしょう?
一応言語はJavaですが、PERLも同じらしいのですが・・
0021nobodyさん
03/11/25 00:39ID:???Perlなら /s オプション
または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
JavaScriptは知ってるがJava言語は知らん。
0022nobodyさん
03/11/25 00:42ID:???>> または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
>> JavaScriptは知ってるがJava言語は知らん。
Javaでも全部できたみたい!!
今から意味調べます。ありがとうございます!
0023nobodyさん
03/11/25 00:43ID:???http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#DOTALL
0024nobodyさん
03/11/29 00:22ID:???<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" indent="no" />
<xsl:template match="/block">!
<html lang="ja" xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="ja">!
!
<xsl:apply-templates select="block_head"/>!
!
<xsl:apply-templates select="block_body"/>!
!
</html>!
</xsl:template>
</xsl:stylesheet>
というテキストがあって、<xsl:template>で囲まれた範囲の改行
("!"があるところ)だけを<xsl:text>\n</xsl:text>に置き換えるにはどう書けば
いいのでしょう。文字コードはUTF-8です。よろしくお願いします。
PHPのXSLT関数ってXSLファイル内のの改行を全部無視しちゃうので明示的に
改行を置かないと出力されるHTMLファイルが一行になっちゃうんですね。
0025nobodyさん
03/12/01 13:50ID:???もっとスマートな方法があるかもしれないけど、漏れだったらこうするかな。
1. <xsl:template /> の中だけ取り出す
2. 取り出したものを \n を <xsl:text>\n</xsl:text> に置換する
3. 置換したものを <xsl:template /> の中に戻す
0026nobodyさん
03/12/01 14:07ID:???<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:text>
</xsl:text><xsl:text>
</xsl:text><xsl:output omit-xml-declaration="yes" method="xml" indent="no" /><xsl:text>
</xsl:text><xsl:text>
</xsl:text><xsl:template match="/block">!<xsl:text>
</xsl:text><html lang="ja" xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="ja">!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text><xsl:apply-templates select="block_head"/>!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text><xsl:apply-templates select="block_body"/>!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text></html>!<xsl:text>
</xsl:text></xsl:template><xsl:text>
</xsl:text>
0027nobodyさん
03/12/05 18:55ID:???---------------------
あ\n
\n
\n
\n
あ\n
---------------------
\nは改行です。
上のようなテキストファイルから2つ以上の連続した空白行を一つにまとめたいと思い、
$対象文字列 =~ m/^\s*\n$/; (空白文字0個以上だけで構成され改行で終わる)
にマッチしたらフラグをセットし、フラグがオンに間はファイルに出力せず、
フラグがオンかつマッチング対象が空白文字だけで構成されていなければフラグをオフにする。
としようとしたのですが、
対象に空白文字と改行以外の文字が含まれるというのをどうやって表現していいか分かりません。
よろしくお願いします。
002827
03/12/05 19:01ID:???はいどうも
0029nobodyさん
03/12/05 19:03ID:???0030nobodyさん
03/12/06 23:50ID:???0031nobodyさん
03/12/07 03:53ID:ye6hWK3e同じカバン持ってる奴にお前のカバンを持ってかれたのか?
0032nobodyさん
03/12/07 05:21ID:???かもしれん
0036nobodyさん
03/12/09 11:55ID:???・サブドメインがあればそれも
・ドメインに~が続いていたらそのユーザーID(?)まで
↑の条件付でして、思うようにいってくれなくて困ってます。
$siteurl =~ /^https?:\/\/(.*?)\/((.).*)/;
$hoge = $1;
$hoge .= "/$2" if ($3 eq "~");
こんな感じのとこまで考えたんですけどこれだと
http://hoge.hoge/~hoge
http://hoge.hoge/hoge
は意図したとおりなんですが、
ドメインより後ろに何も入ってないときは駄目だし・・
他にも色々調べながら試したんですが
ドメインの後にスラッシュがないと駄目だとか、
とにかく何か色々だめだめなんです。
正規表現からっきし駄目な僕に教えていただけませんでしょうか?
0037nobodyさん
03/12/09 13:43ID:???これでどうかな?
$hoge = $1 if ($siteurl =~ /^https?:\/\/([^\/]+(?:\/~[^\/]+|)).*/);
0038nobodyさん
03/12/09 14:09ID:???http://www.example.com/~username/path/to/file
という http URL の各部名称は、
"http" ... スキーム (scheme)
"www.example.com" ... ホスト名、サーバ名、ドメイン、FQDN etc.
"www" ... 3rd レベルドメイン、ホスト名、所謂「サブドメイン」 etc.
"/~username/path/to/file" ... パス (絶対パス)
"~username" ... 所謂「ホームディレクトリ」
see also: http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt
my($hoge) = $siteurl =~ m{^https?://([^/]+(?:/[^/]*)?)};
$hoge =~ s/~//;
0039nobodyさん
03/12/09 16:14ID:W6bkuxufgooの辞書から関連語句だけを集めて用語辞典を作りたいので、
「説明文から検索」の機能で抽出した後、
左側に出てきた見出しだけをテキストエディタにコピペして、
単語以外は全て削除したいと思っています。
メモ帳とワードの他にVisual C++があるのですが、
これらで何とかできませんか?
例えば・・・
http://dictionary.goo.ne.jp/search.php?MT=%CE%EB%CC%DA&kind=jn&mode=0
すずき 【鈴木】
姓氏の一。...
すずき-あきら 【鈴木朖】
(1764-1837) ...
すずきいせき ―ゐせき 【鈴木遺跡】
東京都小平市にある旧石器...
すずき-うめたろう ―うめたらう 【鈴木梅太郎】
(1874-1943) ...
上記の場合でいうと、
(半角スペース)【鈴木】・・・から行末まで削除、とか
(全角スペース)―ゐせき(半角スペース)【鈴木遺跡】・・・から行末まで削除、というふうに
とにかく最初のひらがな単語だけを残したいのです。
▼などの記号も混ざっているので、段階を踏まなきゃならないのかなとも思いましたが
「正規表現メモ」とか見ても
どうすればいいのかさっぱりなんです(´д`;
よろしくお願いします。
004136
03/12/09 16:36ID:???>>37さんのをちょっとだけテストさせていただいたところ
どうやら期待通りに動いてくれているようです。
それぞれ何をしているのかを調べながら、テストを重ねさせていただきたいと思います
>>38さんの方は返ってくる値が、>>36で質問した
「今回ぼくがやりたいこと」とは期待していたものとは違ったんですが、
最終的にやりたいことが、
「後々入力されたほかのデータが、登録されているサイトのサーバー上にあるか、
というか、
そのサイト上のデータかどうかを調べる」
ということがしたかったので、ユーザーIDの自分の中での定義など、
なにか考え直す必要があるような無いような、そんな感じがしました。
・・何が言いたいのが良くわかりませんし、やたら長文で読みにくいと思いますが、
兎に角何がいいたいかといいますと、
本当に有難うございました。
0042nobodyさん
03/12/09 16:39ID:???下の書き方だとエラーが出てしまいます。どこか間違ってるんでしょうか?
if ($min =~ ^(\d+)(?(?{$1 % 3})(?!))$){
0044
03/12/09 16:45ID:5gjkqVTXそれを言っちゃあおしめえよ。
0046nobodyさん
03/12/11 14:45ID:jBSAkNSo「XXXXX.html」に置き換えるような処理はどうすればよいでしょうか?
XXXXXが可変です。
0047nobodyさん
03/12/11 14:52ID:???004946
03/12/11 15:14ID:jBSAkNSo初心者なんで、最適化も何もない&さっき質問したのと話がちょっと違うけどお願いします。
文字列に含まれる$img[XXXXX]の中身XXXXXを関数に渡して、その処理結果で置き換える、ということです。
$test = 'aaa <a href="test.pl"><img src="$img[test1]"></a><img src="$img[test2]">';
$test =~ s/(\$img\[)(\w+)(\])/func($2)/ge;
print $test;
sub func{
local($id)=@_;
if($id eq "test1"){
return "test1が渡されたよ";
}
return "test2が渡されたよ";
}
0050nobodyさん
03/12/11 15:38ID:???おおう、いいんじゃない。前後はカッコ要らんけど。
$test =~ s/\$img\[(\w+)\]/func($1)/ge;
0051nobodyさん
03/12/11 21:09ID:???if ($min =~ /^(\d+)(?(?{$1 % 3})(?!))$/){
=~の右辺は正規表現だから、m/正規表現/、その省略形、/正規表現/
0052nobodyさん
03/12/11 21:11ID:???0053nobodyさん
03/12/14 11:28ID:9SKP9sfiここの2ページ以降の正規表現おしえてください
0054nobodyさん
03/12/14 12:18ID:???0055nobodyさん
03/12/14 12:19ID:9SKP9sfihttp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・
0056nobodyさん
03/12/14 12:29ID:9SKP9sfihttp://cgupload.dyndns.org/~upuser/up2/imgboard.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・
0058nobodyさん
03/12/14 12:55ID:???0060nobodyさん
03/12/14 12:59ID:???0061nobodyさん
03/12/14 13:01ID:9SKP9sfiしてねーよ妄想野郎
0062nobodyさん
03/12/14 13:02ID:???0063nobodyさん
03/12/14 13:05ID:???◆HTML講座(Web製作板)
http://pc2.2ch.net/test/read.cgi/hp/1010398268/
0064nobodyさん
03/12/14 13:10ID:9SKP9sfiそこでおしえてくれ
0065初心者
03/12/15 04:53ID:llm//hKNが分からないのですが、[@]wordではないし、どうなるのでしょうか。
0067nobodyさん
03/12/15 06:14ID:???0068nobodyさん
03/12/15 09:03ID:???006968
03/12/15 09:05ID:???なんで正規表現でやる必要があるのかよく分からんが。
0070nobodyさん
03/12/15 10:25ID:8LAW+/sT一つの正規表現に拘る必要はないと思うが、、、?
条件分岐だとして例えば
if($key_word=〜/@/ || $key_word=〜/word/){〜以下実行文
では駄目なのかな?
0071nobodyさん
03/12/15 10:31ID:???Read Only Member : 書き込まない利用者。
0074nobodyさん
03/12/15 14:41ID:???0075nobodyさん
03/12/15 23:09ID:8LAW+/sT70は間違ってはいないよ、不充分かも知れんが。
そもそも65の質問がどういうシチュエーションでどういう動作の目的でどういうマ
ッチングをさせたいのかを詳細に述べていないという不充分な訊き方なので、70のよ
うな「充分用を足すかどうかは保証の限りではない」当たり障りのない答えが返って
きても当然だと思うが。
70の記述で取り敢えず「@」「word」が含まれていれば、その含まれている最初
の箇所マッチする。 複数含まれていて、それを全てマッチさせるのか、n回目まで
マッチさせるのかなどでオプション等の補助的記述が必要になって来るし、「含まれ
ている」ではなく「その単語そのもの独立だけに厳密マッチ」させるのならが、また
違う話になってくる、それをイチイチ説明していたら解説書になってしまう、それは
自分で読んでくれってことになる。
0076nobodyさん
03/12/16 09:10ID:???0078nobodyさん
03/12/16 16:12ID:???0080nobodyさん
03/12/18 18:53ID:zzUoxnBBX25.125
X12.1
X78.
でなく
X25
X789
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
0083nobodyさん
03/12/18 19:11ID:zzUoxnBBXは無視してもらっていいです。
0084nobodyさん
03/12/18 19:27ID:???$hoge = "a(b(c))";
の時に、$hoge =~ m/(.*)\((.*)\)/
とすると、$1は"a(b"で、$2は"c)"になりました。
つまり文末から見ていることになるのですが、これを
$1は"a"で、$2は"b(c)"になるようにするにはどうすればいいでしょうか。
よろしくお願いします。
0085nobodyさん
03/12/18 19:36ID:???それは文末から見ているんじゃない。. は ( も含むから
最初の .* が一番長くマッチできるところまで取り込んでいるだけ。
/([^)]*)\((.*)\)/ か /(.*?)\((.*)\)/ かこの辺↓参照。
http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
0087nobodyさん
03/12/18 20:34ID:???0088nobodyさん
03/12/18 21:08ID:zzUoxnBB例えば
10.
10.01
10
のうち、全ての"10"を拾います。 上記3つの数値のうち小数点を含まない
10(3つ目)のみにマッチさせたいんです。
0091nobodyさん
03/12/19 06:15ID:z9mYPuUz0092nobodyさん
03/12/19 08:15ID:tSEWBAlW小数点を含まない数値にマッチさせるパターンを教えて下さい。
X25.125
X12.1
X78.
でなく
##X25##
##X789##
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
009339
03/12/19 10:20ID:???自力で検索したサイトは難しい所ばかりだった気がしたのですが、
>>1のリンク先を一通りち回って、今回は何とかなりました。
たぶん答えるのもアホらしい低レベルな質問だったんでしょうね。
スレ汚し失礼しました。
0094nobodyさん
03/12/19 13:04ID:???0096nobodyさん
03/12/19 23:48ID:???0097nobodyさん
03/12/21 14:45ID:???お前さんのレベルじゃ,
込み入った正規表現に手を出すのはまだ早いんじゃないか?
とりあえずわかりやすい代替手段でも使っておけ。
my $f = 'fs4.5s5d.af56.156asd';
my @res = ();
foreach ( split(/[^\d.]/, $f) ){ push( @res, $_ ) if(/^[\d]+$/); }
if(! scalar(@res) ){ print "no match!\n"; }
elsif( scalar(@res) > 1 ){ print "too much match!\n"; }
else{ print "matched:[$res[0]]\n"; }
0098nobodyさん
03/12/21 23:40ID:qD9UdeKRnyのキー情報(↑みたいなの)を正規表現で表すことできますかね?
ダウソ板のスレを全部取り込んで、
キー情報だけ抜き出してリストを作りたいです。
0099nobodyさん
03/12/22 00:11ID:???0101nobodyさん
03/12/22 02:02ID:???■ このスレッドは過去ログ倉庫に格納されています