正規表現道場@2ch Part4
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
05/01/17 11:51:25ID:SH1ygN1Pこのスレは有用そうな正規表現を紹介したり、
どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
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/
0832nobodyさん
2005/11/27(日) 07:14:44ID:???「posixのsed」?
http://www.kt.rim.or.jp/~kbk/regex/regex.html#SED
() のエスケープ忘れはともかく | すら使えんようだが。
0833nobodyさん
2005/11/27(日) 08:06:25ID:???0834nobodyさん
2005/11/27(日) 20:11:19ID:???コメントタグが何個かあって、コメントタグからコメントタグまでの内容をえたい場合どういうふうに書けばいいのでしょうか。
/<!--([^-]*)-->(.*)<!--([^-]*)-->/
コメントタグは<!--hoge-->など色々で、上のように書くと、$2には最初のコメントタグから最後のコメントタグが入ってしまいます。
0835nobodyさん
2005/11/27(日) 20:13:06ID:???$2には最初のコメントタグから最後のコメントタグまでの内容が入ってしまいます。
です。
追記
改行文字は取り払った後なので、含まれていないものとします。
0836nobodyさん
2005/11/27(日) 20:18:49ID:???Perl で良いんだよね?
コメントとコメントの間が (.*) だと最長マッチしちゃうので、 (.*?) とすると良いと思う。
0838nobodyさん
2005/12/04(日) 20:14:17ID:N27X1adxこれを全角数字四桁にもマッチングさせたいんです。
これだけなら出来るのですが、またそのマッチした全角数字を半角に変換して$2に格納したいんです。
どなたかご教授頂けると幸いです。
マッチング対象文字列:([^-#=&\w+>@/×*?])(?!\d000)([1-9]\d{3})([^-\d_*×月日円年時分目→万千億兆人台枚回./@&?=])
変換後文字列:$1http://c.hibi.info/?$2.png
0839nobodyさん
2005/12/05(月) 13:49:29ID:???のように3文字までではヒットせず、
aaaaaaaaaaaaaaa
のように4文字以上だとヒットするにはどのように書けばいいですか?
0840nobodyさん
2005/12/05(月) 13:56:30ID:???0842839
2005/12/05(月) 14:20:07ID:???phpで書いているのですが、>>839の場合に、
「連続した任意のアルファベットと数字を、その連続した文字の1文字にまとめる」場合はどう書けばいいですか?
aaaaaならaに、abcdeeeeeeeefgならabcdefgにしたいです。
if(preg_match("([a-zA-Z0-9]{4})", $str))
{
$str = preg_replace("([a-zA-Z0-9]{4})", "ここの書き方がわからない…", $str);
}
0843nobodyさん
2005/12/05(月) 14:36:45ID:???http://jp.php.net/manual/ja/pcre.pattern.syntax.php
ここの書き方がわからない… は "\$1" か '$1'
0844nobodyさん
2005/12/05(月) 14:44:37ID:FuV10sP7aaaa bbbb AND cccc OR dddd eeee
のような文字列の「aaaa」と「bbbb」の間のスペースと
「dddd」と「eeee」の間のスペースを
「 AND 」に置き換えるにはどうしたらいいですか?
0847839
2005/12/05(月) 14:58:09ID:???ありがとうございます。
後方参照という言葉すら知りませんでしたが、パターンにマッチしたものが一時的にキャッシュされるんですね。
しかし、abcdeeeeeeeefgがfgになってしまいましたorz
abcdにはマッチしてないはずなのになんでだろうなぁ…
0848nobodyさん
2005/12/05(月) 15:01:55ID:???0849839
2005/12/05(月) 15:17:09ID:???ありがとうございます。しかし全然わかりませんでしたorz
察するに、"([a-zA-Z0-9]{4})"の部分が悪いのでしょうか・・・?
0851839
2005/12/05(月) 15:49:46ID:???なるほど・・・
abcdeeeeeeeeeeeeeeeeeeeefgという文字で試していたのですが、
abcd eeee eeee eeee eeee eeee fg
となって、4文字に達していないfgだけが表示されたんですね・・・
(.)\1 なんてしてみましたがうまく動いてくれませんでしたorz
なんとなく理解できてきたのでいろいろ試してみます。
何度もすみませんでした。
0852nobodyさん
2005/12/05(月) 18:36:28ID:xIS9Um0eエラーは出ないのですが、マッチしてくれません。コードは以下です。
my $data = get("http://profile.yahoo.co.jp/biz/fundamental/4302.html");
$data = decode('EUC-JP', $data);
$data =~ tr/【】//d;
print encode('Shift_JIS', $data);
0853nobodyさん
2005/12/05(月) 19:53:04ID:???0854nobodyさん
2005/12/05(月) 20:13:03ID:???([a-zA-Z0-9]{4})
これだと"abcd"でも"0123"でもとにかく4文字続いてたらマッチしちゃう。
$str = "aaaaabbccccccddddeeff";
$str = preg_replace( "/([a-zA-Z0-9])$1{3,}/", "$1", $str );
echo "$str\n";
結果:
abbcdeeff
こうしないと。
>>853
[abc]の方が短い。
0855nobodyさん
2005/12/05(月) 20:21:42ID:???普通にマッチするよ。ソースファイルはEUC?
encodeだかdecodeだかのサブルーチンが悪さしてるんでしょ。
つか、Yahooのhtmlは最初からeucなので、
そのdecodeとかいう処理が要らないのでは?
0861nobodyさん
2005/12/06(火) 16:39:35ID:???0862nobodyさん
2005/12/06(火) 22:55:04ID:???・[]はネストできる。
"xxxx[123[45]6[7]8]xxxxxx" の場合"[123[45]6[7]8]" を得たい。
・\[ とすることでエスケープできる。
"[xx\]" はマッチしない。
"[\\\[]" は全体がマッチする。
正規表現だけに頼らなければ問題ないのですが。。
0863nobodyさん
2005/12/06(火) 23:05:28ID:???0864nobodyさん
2005/12/07(水) 00:04:58ID:???0866nobodyさん
2005/12/07(水) 00:34:22ID:???0867nobodyさん
2005/12/07(水) 00:48:55ID:???\[(?:[^\[]*|\[[^\]\\\\]*(?:\\\\.[^\]\\\\]*)*\])*\]
0868nobodyさん
2005/12/07(水) 00:49:26ID:???0870nobodyさん
2005/12/07(水) 01:08:36ID:???根本的に変遷取れないのはどれ?って話
鬼車の拡張は無しの方向で
0871nobodyさん
2005/12/07(水) 01:12:12ID:???RubyはもうOnigurumaに変更されたんだっけ。
0872nobodyさん
2005/12/07(水) 01:25:15ID:???最近勉強し始めたばっかだし
解がもとまるかどうかすぐ分かるくらいになりてえ
0873862
2005/12/07(水) 01:26:25ID:???[]の数は等しくないとまずいです
等しくなくてもいいのならば
\[.+([^\\](\\\\)*)\]
になりませんか?
0874nobodyさん
2005/12/07(水) 11:18:55ID:???かなわないので、「subjectに2バイト文字が含まれないもの」を振り分けたい
だけど、正規表現でどう書くのかわかりません。
subject で始まる行が1バイト文字だけで構成されている。
にマッチで良いと思うんですが・・・・
0875nobodyさん
2005/12/07(水) 11:36:31ID:???コミュニティは黄泉がえるか メーラー電八スレッド
http://pc7.2ch.net/test/read.cgi/software/1112876529/
0876nobodyさん
2005/12/07(水) 11:58:35ID:???FROM:で始まる行にmag2という文字列が含まれていたら、
magmag.FLDに振りわけてる。
/^Subject:1バイト文字のみの1回以上の繰り返し spam.FLD
どうかくの?
0878nobodyさん
2005/12/07(水) 12:17:30ID:???0879nobodyさん
2005/12/07(水) 12:18:12ID:???もし使えたら[\x20-\x79]+とか
0880nobodyさん
2005/12/07(水) 12:26:13ID:???> アルファベット若しくは半角数字、半角記号が一回以上繰り返される場合、でいいのかな。
そのとおりです。お願いします。お手数お掛けします。
0881874=876=880
2005/12/07(水) 12:27:39ID:???0883nobodyさん
2005/12/07(水) 12:38:58ID:???マニュアル読むのも大嫌いそうだな。
http://denshin8.esprix.net/den8help/V32.1.5.3/html/usage/folder/regular_expression.htm
ソフトの設定方法なんて WebProg と関係無いし、電信八号が
正規表現エンジンに何を使ってるのかも分からんから、ここで
尋ねるより専用スレに行った方が的確な答がもらえると思うが。
0884881
2005/12/07(水) 16:14:28ID:???> マニュアル読むのも大嫌いそうだな。
すいません。ご指摘のとおりです。
助かりました。
おはずかしい。しかし望む動作はだいたい実現しました。
/^subject:[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789!"#$%&'@+]*/i spam.FLD
0885881
2005/12/07(水) 16:17:53ID:???スレ違いを承知で質問させてもらっちゃいました。スレ違いスマソ
0886nobodyさん
2005/12/07(水) 17:19:59ID:???0887nobodyさん
2005/12/07(水) 17:33:04ID:???0888nobodyさん
2005/12/09(金) 00:38:44ID:iCbRbzp1という正規表現を実現したいのですが、何かいい方法ありませんか?
0.000000000(永久につづく) 以上っていう書き方が思いつきません・・・・。
0889nobodyさん
2005/12/09(金) 00:52:32ID:???それが数値にマッチするかを調べて、0以上かの判定はスクリプトなり何なり使えば・・
0890nobodyさん
2005/12/09(金) 01:16:43ID:???0891nobodyさん
2005/12/09(金) 01:23:27ID:???([1-9][0-9]*|0)\.?[0-9]*[1-9]
0892891
2005/12/09(金) 01:24:34ID:???0893891
2005/12/09(金) 09:10:57ID:???([1-9][0-9]*|0)(\.[0-9]*[1-9])?
0894nobodyさん
2005/12/09(金) 10:21:46ID:???0895nobodyさん
2005/12/14(水) 12:30:18ID:3LtPjEbb0896nobodyさん
2005/12/14(水) 12:58:51ID:???([1-9]+[0-9]|[1-9])(\.[0-9]+)?|0+\.0*[1-9]
>>895
( ´_ゝ`)フーン
0897nobodyさん
2005/12/14(水) 13:52:46ID:???0898nobodyさん
2005/12/14(水) 13:54:14ID:???0900nobodyさん
2005/12/14(水) 14:14:29ID:???^([0-9]*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$
つーか>>888で「0以上」って0含んでもいいじゃん
「0を越える」の間違いだな
0901nobodyさん
2005/12/14(水) 14:41:58ID:???0902nobodyさん
2005/12/15(木) 20:55:26ID:???^[^Final].*\r?
と書いた所何もヒットしないんですが
自分では「先頭が」+「Finalでない」+「何でもOK」+「改行」
と書いているつもりなんですが…
どこがおかしいのか教えて下さいまし
0903nobodyさん
2005/12/15(木) 21:00:09ID:???0904nobodyさん
2005/12/15(木) 21:27:27ID:???否定したさに[]にいれてしまった…。
ttp://www.sixnine.net/regexp/
をみながらやってたんですが
{}、/(/)等の中では^は否定にはならないですか?
0905nobodyさん
2005/12/15(木) 23:40:50ID:???一般的な正規表現に文字「列」の否定はありません。Perl には ?! あるいは ?<! といった拡張が存在しますが。
プログラム中で使おうと思っているなら、先頭が Final で始まる行を正規表現で引っかけて、それ以外、とするのが簡単だと思います。
Perl だと↓な感じで。
print "NOT FINAL\n" if $str !~ /^Final/;
むりやり正規表現で表すなら ^([^F]|F[^i]|Fi[^n]|Fin[^a]|Fina[^l]).*\r? になるんじゃないかと。
0906nobodyさん
2005/12/15(木) 23:45:53ID:???丁寧に解説して頂きありがとうございます
今回はJ-editというエディタ内で置換したかったのでプログラムではできなさそうですが
勉強になりました。
0907nobodyさん
2005/12/16(金) 00:10:03ID:???0908nobodyさん
2005/12/16(金) 00:13:11ID:???0909nobodyさん
2005/12/16(金) 05:39:59ID:???エディタがサポートしてないとしたら仕方ないが、その正規表現は泥臭すぎる……
サポートしてるなら「^(?!Final).*$」がいいんじゃないか。
0910nobodyさん
2005/12/16(金) 14:20:34ID:3Jn+fCoS$val = "<TD>1000〜</TD>";
preg_match_all("/<TD>(.*)〜<\/TD>/", $val, $name);
とすると $name[0][1]には1000〜となり〜が入ります。
これをぬこうにも
$name2 = str_replace("〜", "", $name[0][1]);
$name2 = 1000〜となり〜が取れません。
0912nobodyさん
2005/12/16(金) 14:33:08ID:???0913nobodyさん
2005/12/17(土) 23:21:43ID:9ZVQMdkG0914nobodyさん
2005/12/18(日) 02:15:55ID:E4qxneT12バイト文字を全く使っていない書き込みはendにしたいのですが、
どのように表現したらいいのでしょうか?
どうぞよろしくお願いします。
0918nobodyさん
2005/12/20(火) 20:28:35ID:???ttp://ftp.iasi.roedu.net/pub/mirrors/mozdev.org/greasemonkey/linkify.user.js
で,http://〜をttp://〜も対応させたくて
const urlRegex = /\b(https?:\/\/[^\s+\”\<\>]+)/ig;
をさらに日本語対応化させて
const urlRegex = /\b([^h])(ttps?:\/\/[^\s\”\<\>\/]+\w+\/?[!#-;=\?-~]*)/ig;
としてみたんですがうまくいかず...
ttp://〜をマッチさせる方法教えてもらえないでしょうか
0919nobodyさん
2005/12/20(火) 21:23:10ID:???他の文字列とマッチングをさせたいのですが
どうすればいいでしょうか?
対象とする文字列は Mem[0]、Mem[1]…(以下、数字が増加)
になります。
正規表現の "Mem\[[0-9]*\]" で試したのですが、
上手くマッチしてくれませんでした。
何か良い方法があれば教えてください。
0920nobodyさん
2005/12/20(火) 21:43:50ID:???0921919
2005/12/20(火) 21:51:53ID:jBM1u1uW即レスありがとうございます。
ただ、 \\[ という書き方だと、
\[ (バックスラッシュ[) とマッチするような気がするのですが…
[ とマッチさせる場合は特別で、
バックスラッシュが二つ必要になるのでしょうか?
0922nobodyさん
2005/12/20(火) 22:55:56ID:???詳しくは
ttp://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#bs
0923919
2005/12/20(火) 23:45:59ID:???文字列として扱いたいのは\ではなく[と]の方です。
単に[と]を書くと、括弧の中に着目されてしまうので
\[や\]と書けば良いのかと思ったのですが、
この方法だとマッチしたという判定にならず。
他に記述方法があるのかどうかと…
分かりにくい質問でスミマセンでした。
リンク先、参考にしてみます。
0925nobodyさん
2005/12/21(水) 18:13:17ID:???その外部ファイルにどんなものが定義されているかを
htmlのtable要素を使って一覧にしたいと思い、下記のようにしましたがパースエラーと出ました。
XXX {
○○○
}
とあるものを
<table>
<tr>
<td>XXX</td><td>○○○</td>
</tr>
</table>
のように表示させたいのですがこの条件でマッチする表現を教えて頂けますか
0926nobodyさん
2005/12/21(水) 21:38:17ID:???0927925
2005/12/21(水) 23:26:34ID:???ありがとうございます。
下記のコードで試してみたところ
改行以降をひろってくれなかったのでちょっと改造にチャレンジしてきます。
-----------------------------
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<?
$lines = file('./hoge.css');
$file = implode('',$lines);
preg_match_all("/(?:^|\n)([^\s\{]+)\s*\{\s+(\S+)/",$file,$css);
for ($i=0; $i< count($css[0]); $i++) {
?>
<tr bgcolor="#9999cc">
<td><?=$css[1][$i]?></td><td><?=$css[2][$i]?></td><td><?=$css[2][$i]?></td>
</tr>
<?
}
?>
</table>
0928925
2005/12/22(木) 00:02:45ID:???最後の(\S+)を(.*)}?にして
"}が来るまでを最短マッチ"って書いたつもりでしたが.*は改行にマッチしないんですね…。
orz
むつかしいぃぃぃ
0929nobodyさん
2005/12/22(木) 01:04:42ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。