正規表現 Part6
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/05/06(水) 00:36:04質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
【 前スレ 】 正規表現 Part5
http://pc12.2ch.net/test/read.cgi/tech/1212498448/
0002デフォルトの名無しさん
2009/05/06(水) 00:37:38正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
【 初心者 】 正規表現 【 入門 】
http://funcchan.blog16.fc2.com/
0003デフォルトの名無しさん
2009/05/06(水) 00:40:40[UNIX板] 正規表現
http://pc12.2ch.net/test/read.cgi/unix/1039165754/
[WebProg] 正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/
◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] http://pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] http://pc11.2ch.net/test/read.cgi/tech/1186030400/
[5] http://pc12.2ch.net/test/read.cgi/tech/1212498448/
0004デフォルトの名無しさん
2009/05/06(水) 00:42:02●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
0005デフォルトの名無しさん
2009/05/07(木) 22:55:29(a{3}|b{3}|c{3})
と
[abc]{3}
は等しいですか?
0006トーマス
2009/05/07(木) 23:32:33ちょっと違います
前者は aaa、bbb、ccc の3種類の文字列にしかマッチしませんが
後者は abc、cba、aab などにもマッチします
後者は3文字の文字列であれば1文字ごとに文字が変わってもいいのです
0007デフォルトの名無しさん
2009/05/08(金) 01:41:34なるほどぉ
理解できました、ありがとうございました!
0008デフォルトの名無しさん
2009/05/08(金) 19:09:29より誘導されてきました。
X-Finderは内部関連付けに正規表現を使えるのですが
foo.gz や foo.tar.gz その他の *.gz にマッチするが
foo.xcf.gz にマッチしないものはどう書けば良いかわからず困っています。
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ
ここを参考に
*.([^x]|x(c?x)*([^xc]|c[^xf]))*(x(c?x)*x?)?.gz
と書いてみましたが動きませんでした。
希望通りの動作にするにはどう書けば良いのでしょうか?
0009デフォルトの名無しさん
2009/05/08(金) 19:14:17(?<!xcf).gz
0010デフォルトの名無しさん
2009/05/08(金) 19:52:11レスどもです。
でも (?<!xcf).gz と *.(?<!xcf).gz と *(?<!xcf).gz を試してみましたがダメでした。
x-finderがどの正規表現に対応してるかわかれば良かったんですが
検索しても見つからなかったんですよね…。
00118
2009/05/08(金) 20:22:04そちらで希望の動作ができましたので
質問を下げさせていただきます。お騒がせしました。
0012デフォルトの名無しさん
2009/05/08(金) 21:55:38●正規表現の使用環境
PHP4.3
●検索か置換か?
置換
●説明
html内のテキストから特定のタグ(特定のurlへのリンク)のみを削除したい
●対象データ
…テキスト<a href="a.php?id=○○">「aへのリンク」</a>テキスト<a href="b.php?id=△△">「bへのリンク」</a>テキスト<a href="c.php?id=□□">「cへのリンク」</a>テキスト…
●希望する結果
…テキスト<a href="a.php?id=○○">「aへのリンク」</a>テキスト「bへのリンク」テキスト「cへのリンク」テキスト…
このようなことは可能でしょうか?
aへのリンクのみを残して、bとcへのリンクを削除したいのですがタグとタグの間の文字は残したいのです
また動的ファイルのためパラメータがその都度変化します
0013デフォルトの名無しさん
2009/05/08(金) 23:26:26これで$1と$2を空白に置換でどうだろ。
今、出先なんで確認取ってないです。
0014トーマス
2009/05/09(土) 02:15:26PHP4.3 で動くかどうかは分からないのですが、
以下の正規表現チェッカーで動いたものを貼っておきますね。
PHP正規表現チェッカー ver1.0.1
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
検索表現
<a\s[^>]*href\s*=(?!\s*"?\s*a\.php\?id=)[^>]+>(.*?)</a>
置換表現
\1
何故か置換表現を $1 と書いても動かなかったので \1 にしました。
$1 で動くのであればこれを使って下さい。
0015デフォルトの名無しさん
2009/05/09(土) 14:57:39>>14
ありがとうございます
こちらも出先なので戻り次第確認してみようと思います
0016デフォルトの名無しさん
2009/05/10(日) 01:19:30簡単な検証方法
<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*可変*/ N=1000;
document.write('<style>td,th{font-size:10;} </style><table border=1><tr>');
document.write('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果 </th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍 </th> </tr>');
for(i=-N;N>=i;i++){ // 数値を自動代入
x1=0; y1=i;
x2=-1; y2=0;
x3=1; y3=0;
a=Math.abs(x1-x2)*Math.abs(y1-y2); // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3);
c=Math.abs(x3-x1)*Math.abs(y3-y1);
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-(a+b+c)/2; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
document.write('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示
document.write('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>');
document.write('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td> </tr>');
}document.write(' </table>');
</script>
0017デフォルトの名無しさん
2009/05/10(日) 01:24:06/*倍率*/M=100000000;
/*回数*/N=1000;
document.write('<style>td,th{font-size:10;}</style><tableborder=1><tr>');
document.write('<th>x1</th><th>y1</th><th>x2</th><th>y2</th><th>x3</th><th>y3</th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果</th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果</th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍</th></tr>');
for(i=0;N>i;i++){//数値を自動代入
x1=(Math.random()*2-1)*M;y1=(Math.random()*2-1)*M;
x2=(Math.random()*2-1)*M;y2=(Math.random()*2-1)*M;
x3=(Math.random()*2-1)*M;y3=(Math.random()*2-1)*M;
a=Math.abs(x1-x2)*Math.abs(y1-y2)/2;//底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3)/2;
c=Math.abs(x3-x1)*Math.abs(y3-y1)/2;
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3));S=s-a-b-c;S1=S;
a=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//ヘロン公式による√を使った面積の計算
b=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
c=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
s=(a+b+c)/2.0;S=Math.sqrt(s*(s-a)*(s-b)*(s-c));S2=S;
document.write('<tr><td> '+x1+'</td><td> '+y1+'</td>');//計算結果と誤差を表示
document.write('<td> '+x2+'</td><td> '+y2+'</td><td> '+x3+'</td><td> '+y3+'</td>');
document.write('<td> '+S1+'</td><td> '+S2+'</td><td> '+(S1-S2)+'</td></tr>');
}document.write('</table>');
</script>
0018デフォルトの名無しさん
2009/05/10(日) 01:31:29/*倍率*/M=100000000;
/*回数*/N=1000;
document.write('<style>td,th{font-size:10;}</style><table border=1><tr>');
document.write('<th>x1</th><th>y1</th><th>x2</th><th>y2</th><th>x3</th><th>y3</th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果</th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果</th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍</th></tr>');
for(i=0;N>i;i++){//数値を自動代入
x1=(Math.random()*2-1)*M;y1=(Math.random()*2-1)*M;
x2=(Math.random()*2-1)*M;y2=(Math.random()*2-1)*M;
x3=(Math.random()*2-1)*M;y3=(Math.random()*2-1)*M;
a=Math.abs(x1-x2)*Math.abs(y1-y2)/2;//底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3)/2;
c=Math.abs(x3-x1)*Math.abs(y3-y1)/2;
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3));S=s-a-b-c;S1=S;
a=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//ヘロン公式による√を使った面積の計算
b=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
c=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
s=(a+b+c)/2.0;S=Math.sqrt(s*(s-a)*(s-b)*(s-c));S2=S;
document.write('<tr><td> '+x1+'</td><td> '+y1+'</td>');//計算結果と誤差を表示
document.write('<td> '+x2+'</td><td> '+y2+'</td><td> '+x3+'</td><td> '+y3+'</td>');
document.write('<td> '+S1+'</td><td> '+S2+'</td><td> '+(S1-S2)+'</td></tr>');
}document.write('</table>');
</script>
0019デフォルトの名無しさん
2009/05/10(日) 01:40:10ttp://homepage2.nifty.com/tomoarai/java/exper.html
0020デフォルトの名無しさん
2009/05/10(日) 13:46:16<TAG xxxxxxxxxxxxxxxxxxxxx >yyyyyyyyyyyyyyyyyyyyyy</TAG>
上記文字列から、x, y を一つの正規表現で抽出することは可能でしょうか?
0021デフォルトの名無しさん
2009/05/10(日) 13:49:530022デフォルトの名無しさん
2009/05/10(日) 14:07:14残念ながら不可能です。
0023デフォルトの名無しさん
2009/05/12(火) 09:24:09●正規表現の使用環境
XPですFlexible Renamerなどのリネームソフトでファイル名の文字化けした箇所のみ消したいのです
●検索か置換か?
置換
●説明
半角カタカナ ロシア文字 ハングル文字 中国語の漢字 特殊な記号 を全て置き換え
や
英数字以外全ての文字 を全て置き換え
や
日本語以外全ての文字 を全て置き換え
の方法があれば教えてください
●対象データ
File_鱈鯵�D12345_xxハンカクカタカナ゙x�@дЩ鱈賦xxx.jpg
●希望する結果
File_12345_xxxxxx.jpg
0024デフォルトの名無しさん
2009/05/12(火) 21:13:05[^-_.a-zA-Z0-9]
を検索のところに入れて、置換を空白でリネームすればどうだろうか
\Wは\wが全角も拾うっぽくてうまくいかないな
0025デフォルトの名無しさん
2009/05/12(火) 23:09:02必要な文字の方を残して消せば良かったんですね、勘違いしてました・・・
理想的な方法が出来ましたありがとうございました!!!
[^-_.a-zA-Z0-9]
[^-_.a-zA-Z0-9a-zA-Z0-9ァ-ヶぁ-ん〜ー亜-煕一-龠]
[^-_.a-zA-Z0-9a-zA-Z0-9ァ-ヶぁ-ん〜ー亜-腕弌-熙]
0026デフォルトの名無しさん
2009/05/15(金) 08:39:43php5
●検索か置換か?
検索
●説明
画像の中に連続した数字があるか調べたい
●対象データ
F1 00 00 00 00 00 00 00 00 00 EE
DS 00 12 47 36 11 66 00 00 11 FS
●希望する結果
match or not
単純な文字列は扱えるのですが16進数からどう取り出せば良いか分かりません。
まずfile_get_contentsでファイルを読み込んでおり、\x00 == $strなどは分かりますが正規表現でどうすれば良いのかが分かりません。
どなたかご教示願いますm(__)m
0027デフォルトの名無しさん
2009/05/15(金) 09:25:50php知らんけど、「画像の中に連続した数字」と言うのは単純に「バイト列中に特定の値が連続する」と解釈して宜しいか?
だとすれば、\x00\{2,\}でよさそうだが。
0028デフォルトの名無しさん
2009/05/15(金) 09:32:120029デフォルトの名無しさん
2009/05/15(金) 09:33:49(.)\1+
か
0030デフォルトの名無しさん
2009/05/15(金) 15:04:59画像は画像じゃん。
0031デフォルトの名無しさん
2009/05/15(金) 15:46:03一瞬、画像認識かとも思ったけど
0032デフォルトの名無しさん
2009/05/16(土) 20:58:37バイナリの00も連続した数字と言えるし他の解釈の仕方も出来る。
自分の考えていることを相手に正確に伝えられない人はまず
日本語の勉強をするべき。
0033デフォルトの名無しさん
2009/05/16(土) 22:32:48PHPって文字列とバイナリを区別しないんじゃない。
0034デフォルトの名無しさん
2009/05/17(日) 13:34:43対象データと希望する結果がそれじゃわけわからん。
0035デフォルトの名無しさん
2009/05/17(日) 16:12:54もしかしたら 数字 の意味もワカットランと思う。
最近は学校でそゆこと教えないのか?
0036デフォルトの名無しさん
2009/05/18(月) 01:27:32unko784.com
unko962.com
これらを正規表現する時
unko\d\.com と unko\d+\.com どっちが正しい?
0037デフォルトの名無しさん
2009/05/18(月) 01:31:000038デフォルトの名無しさん
2009/05/18(月) 01:46:11unko\d{3}+\.com ってこと?
0039デフォルトの名無しさん
2009/05/18(月) 03:03:120040デフォルトの名無しさん
2009/05/18(月) 09:03:050041デフォルトの名無しさん
2009/05/18(月) 09:17:020042デフォルトの名無しさん
2009/05/18(月) 09:39:060043デフォルトの名無しさん
2009/05/18(月) 09:53:06unko[0-9]{3}\.com
unko[0-9]+\.com
unko.\d\d\d\.com
unko\d{3}\.com
unko\d+\.com
0044デフォルトの名無しさん
2009/05/18(月) 10:08:35unko[179][286][342]\.com
だろう。
0045デフォルトの名無しさん
2009/05/18(月) 10:36:26それなら
unko(123|784|962).com
の方が正しいだろう。
0046デフォルトの名無しさん
2009/05/18(月) 10:45:490047デフォルトの名無しさん
2009/05/18(月) 16:50:19のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、
この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません
妙案ないでしょうか
php5 or 4
0048デフォルトの名無しさん
2009/05/18(月) 18:54:48mb_ereg_replace("(?!aaa\\()’(\\d+);", "\\1", "aaa(’12345;");
0049デフォルトの名無しさん
2009/05/18(月) 22:22:53下2桁が"00"でない文字列をヒットしたい。如何すればよいか?
0050デフォルトの名無しさん
2009/05/18(月) 22:40:030051デフォルトの名無しさん
2009/05/18(月) 22:40:57/\d{6}(\d[1-9]|[1-9]\d)/
0052デフォルトの名無しさん
2009/05/18(月) 22:51:45マルチかよ
005349
2009/05/18(月) 23:29:28ありがとう
0054デフォルトの名無しさん
2009/05/20(水) 06:57:220055デフォルトの名無しさん
2009/05/22(金) 17:03:24文字列:
$:hogeA;
$:hogeB;
これをpattern&matchさせるにはどうすればいいのでしょうか?
005655
2009/05/22(金) 17:23:55文字列:
${hogeA}
${hogeB}
これをpattern&matchさせるための正規表現は \\$\{.*.} でOK?
(Eclipse 3.2 JDK 1.6でエラーが出るorz )
0057デフォルトの名無しさん
2009/05/22(金) 17:25:450058デフォルトの名無しさん
2009/05/22(金) 18:18:220060デフォルトの名無しさん
2009/05/22(金) 18:27:04javaはしらん
0062デフォルトの名無しさん
2009/05/26(火) 17:18:21PHPで上のようなイメージタグからtopimag_に続く4桁の数字とalt=""の中身のテキスト(全半角マチマチ文字列)のみを
それぞれ$gifと$altに抽出したいのですがよい方法はないでしょうか
0063デフォルトの名無しさん
2009/05/27(水) 04:14:060064デフォルトの名無しさん
2009/05/27(水) 18:16:27$(|~\S*)?/\S*
でいいですか?
思いがけないパターンがありそうで怖いんですがどうでしょうか
0065デフォルトの名無しさん
2009/05/28(木) 09:25:400066デフォルトの名無しさん
2009/05/28(木) 10:40:580067デフォルトの名無しさん
2009/05/29(金) 09:42:090068デフォルトの名無しさん
2009/05/29(金) 10:03:330069デフォルトの名無しさん
2009/05/29(金) 18:15:39~\S*だから入るんじゃないのか
0070デフォルトの名無しさん
2009/05/29(金) 18:16:500071デフォルトの名無しさん
2009/05/29(金) 19:35:460072デフォルトの名無しさん
2009/05/29(金) 19:36:520073デフォルトの名無しさん
2009/05/29(金) 19:37:02IMOX じゃなくて UNIX って書きたかった
0074デフォルトの名無しさん
2009/05/29(金) 23:31:420075デフォルトの名無しさん
2009/05/31(日) 17:18:03現在Yahoo!pipes(ttp://pipes.yahoo.com/pipes/)を使っているのですが、
pipesの中でデータをURLエンコードしたいと思っています。
そのような機能はないので、正規表現(マニュアルによるとPerlライク)でやろうと思っているのですが、
Perlの関数を使えないのでunpackを使うやり方ができません。
純粋な正規表現のみでURLエンコードはできるものなのでしょうか。
修飾子として使えるのは「gsmi」のみです。
0076デフォルトの名無しさん
2009/05/31(日) 17:32:16正規表現を利用してなら可能だろうだけど、正規表現のみじゃ無理
なんつーかノリも必要なペーパークラフトをハサミだけで作れって感じだ
URLっていう型紙からデータを切り抜くだけでどうやってURLエンコードを組み立てるよ
0077デフォルトの名無しさん
2009/05/31(日) 17:34:11/\x01/%01/g
…
/\xFF/%FF/g
0078デフォルトの名無しさん
2009/05/31(日) 17:46:46ですよね・・・
>>77
うおっ!
0079デフォルトの名無しさん
2009/05/31(日) 18:05:44それやると % と 0-F の文字が置換されないか?
0080デフォルトの名無しさん
2009/05/31(日) 18:21:310-9A-Fは置換する必要ないし、%を一番頭に持ってくればいい。
0081デフォルトの名無しさん
2009/06/06(土) 19:31:170082デフォルトの名無しさん
2009/06/06(土) 20:29:360083デフォルトの名無しさん
2009/06/06(土) 21:22:45助かりましたありがとうございます
0084デフォルトの名無しさん
2009/06/08(月) 23:24:52文字列中で特定の文字列のみに色付けをしようとしていますが、目的の文字列
以外でも色が付き困っています。
例えば、『名無し』という文字列のみを青色にしようとすると、独立した文字列
名無し
はOKなのですが、「デフォルトの名無しさん」でも『名無し』が青色になってしまい
ます。
A名無しB という場合(前または後ろに不要な文字がある場合、つまり他の文字列
に組み込まれた場合)は対象から外し、単独の場合のみを対象したく思っています。
これに適した正規表現はありますでしょうか?
0085デフォルトの名無しさん
2009/06/08(月) 23:43:220086デフォルトの名無しさん
2009/06/09(火) 00:22:19有難うございます。しかしながら、質問が不十分でした。
確かに独立した文字列は許可したいのすが、それ以外に A名無しB で
AまたはBが
1) 半角のスペースの場合
2) 半角の左括弧 ( の場合
3) 改行の場合
4) ピリオドの場合
に名無しを青色にしたく思っています。
当初、キャラクターコードとif文で分岐しようとしましたが煩雑になったので
正規表現を利用しようと思いました。
こんな場合はどうでしょうか?
0087デフォルトの名無しさん
2009/06/09(火) 12:48:17例)
234hbhkltgfokdlthL+POL+PL>?*|{?('54653');
の中から54653だけを取り出し他を削除
※不特定文字列内において、 (' や ') は取り出す予定の数列を挟む場所以外では現れません
PHP
0088デフォルトの名無しさん
2009/06/09(火) 13:17:17$a = preg_replace('/(?:(?!\(\').)*(?:\(\'(\d+)\'\))?/', '$1', $a);
008987
2009/06/09(火) 13:47:46ありがとうございます
('nnn')は1カ所しか出てきません
自分で応用できないかやってみたんですがムリでしたw
1カ所しかでてこないバージョンを教えてくださいw
0090デフォルトの名無しさん
2009/06/09(火) 15:43:57\('(.+)'\)
で検索して、後方参照で\1だけ残せば良いんじゃない?
0091デフォルトの名無しさん
2009/06/10(水) 10:57:23Vサインしてるクマたんみたいでかわいい
0092デフォルトの名無しさん
2009/06/10(水) 11:32:120093デフォルトの名無しさん
2009/06/10(水) 13:39:540094デフォルトの名無しさん
2009/06/13(土) 08:14:41みたいな文字があって
()の中をそれぞれ取り出したい場合
(.*)ってやると
一番最初の(と最後の)でも一致してしまう
させたくないんだけどどうすればいいの?
環境はVB.NET
0095デフォルトの名無しさん
2009/06/13(土) 09:05:24特殊な意味を持つ文字は\でエスケープする
\([^)]*\) かな
0096デフォルトの名無しさん
2009/06/13(土) 09:14:48VB.NETはよく知らんが、大体「.*」ってやると「よくばり」モードになるぞ。
「よくばり」モードはその例の場合だと途中の括弧も飲み込んじゃって、
目一杯取ってくるから、「.*?」ってやるといい。
「?」をつけると「けちけち」モードになって、必要最小限しか取ってこない。
0097デフォルトの名無しさん
2009/06/13(土) 09:55:28最短一致でググるといいぜ
0098デフォルトの名無しさん
2009/06/13(土) 11:46:170099デフォルトの名無しさん
2009/06/13(土) 11:55:08"最短一致" に一致する日本語のページ 約 2,610 件
"非欲張り" に一致する日本語のページ 約 373 件
0100デフォルトの名無しさん
2009/06/13(土) 14:21:420101デフォルトの名無しさん
2009/06/14(日) 00:00:57ついでにもう1つ
英数字の連続が5文字以上を一致させたい場合はどうすれば?
0102デフォルトの名無しさん
2009/06/14(日) 00:38:390103デフォルトの名無しさん
2009/06/14(日) 08:52:010104デフォルトの名無しさん
2009/06/14(日) 16:57:22連続文字は自己解決した
{}の中身を{10}ってやると10文字以上という意味らしい
サンプルだと{10,20}みたいにしか書いてなかったから
0105デフォルトの名無しさん
2009/06/14(日) 17:11:290106デフォルトの名無しさん
2009/06/14(日) 18:09:05>>103さんが回答出してるのを無視して自己解決も何もなかろう。
0107デフォルトの名無しさん
2009/06/14(日) 21:01:48という混ぜ返しはさておき、
"\w" は(一般的な実装だと)アンダースコアも拾うけどいいのかな。
0108デフォルトの名無しさん
2009/06/15(月) 12:15:03全面採用じゃなかったから自己解決とかぬかしてるだけでは
0109デフォルトの名無しさん
2009/06/15(月) 12:48:38好意的に解釈すれば、>103を見る前に自己解決したのかも知れん。
0110デフォルトの名無しさん
2009/06/22(月) 11:09:00Match match = new Regex("AAA.+?BBB").Match(html);
としてAAAとBBBの間の文字列を抽出したいのですがなぜかできません
Match match = new Regex("AAA").Match(html);
Match match = new Regex("BBB").Match(html);
この二つはうまくいくのですが正規表現の書き方おかしいですか?
ちなみにAAAとBBBはhtmlタグです
0111デフォルトの名無しさん
2009/06/22(月) 11:28:41そういう複合はできない。
0回以上の繰り返し .* でマッチさせる。
0112デフォルトの名無しさん
2009/06/22(月) 12:03:01> .+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思う
じゃなくて最短一致だろ
0113デフォルトの名無しさん
2009/06/22(月) 12:09:27("AAA".+?"BBB")は実際には
(<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こんな感じです
0114デフォルトの名無しさん
2009/06/22(月) 12:09:340115デフォルトの名無しさん
2009/06/22(月) 12:11:26("AAA.+?BBB")
("<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こうです
0116デフォルトの名無しさん
2009/06/22(月) 12:15:40そうなんですか!?
どう書き換えればよいでしょうか
0117デフォルトの名無しさん
2009/06/22(月) 12:17:44111はどういう環境を想定してるんだろうね。
0118デフォルトの名無しさん
2009/06/22(月) 12:25:48できました!ありがとうございました
0119デフォルトの名無しさん
2009/06/24(水) 14:14:00AutoHotkey 1.0.48.03 (Perl 5互換のPCRE)
http://lukewarm.s101.xrea.com/RegEx.html
●検索か置換か?
置換
●説明
""で囲われている箇所以外の行末コメントを除去したい。
●対象データ
key = value ; ccomment
key = "val ;lue" ; comment
●希望する結果
key = value
key = "val ;lue"
m`n)[\t ]+;.*(?=$) で 無差別除去まではできたんですが後方参照とか条件分岐の方法ががわからず。
key value comment 部はそれぞれ日本語の文字が入る可能性もあるんですが
AutoHotkeyのPCRE自体は2バイト文字が考慮されません(なので[:word:]とかは使えない状態です)
よろしくお願いします。
0120デフォルトの名無しさん
2009/06/26(金) 11:50:32●正規表現の使用環境
PHP4
●検索か置換か?
置換
●説明
<del>タグにはさまれた任意の文字列を、文字数ぶん●で伏せ字にしたい。
●対象データ
昨日は<del>上戸さん</del>と飲みに行ったが、<del>17,000</del>円も奢らされてしまった。
●希望する結果
昨日は<del>●●●●</del>と飲みに行ったが、<del>●●●●●●</del>円も奢らされてしまった。
0121デフォルトの名無しさん
2009/06/26(金) 12:04:54preg_replace_callback使え。
0122デフォルトの名無しさん
2009/06/26(金) 13:13:30そんな便利な関数があったとは、、。
ありがとうございました!
function toFuseji($matches) {
return $matches[1] . preg_replace("/./u", '●', $matches[2]) . $matches[3];
}
preg_replace_callback("/(<del>)(.+)(</del>)/", 'toFuseji', $str);
0123デフォルトの名無しさん
2009/06/26(金) 22:30:17C#2008 Regex.IsMatch
●検索か置換か?
一応検索
●説明
特定の文字列以外があるかをチェックしたい
SQLの話も混じりますが、要はSELECT文の後に
更新や変更するような命令があるかをチェックしたい
のです。
UPDATEとかそれぞれを書いていくのは漏れるかも
しれないのでSELECT、FROM、WHEREあたりを除いて
マッチさせるにはどう書いたらいいでしょうか。
試した文
^SELECT (?!.* [A-Z](?!ELECT |ROM |HERE ))
●対象データ と望する結果
マッチさせたい "SELECT * FROM AAA [UPDATE]"
マッチしたくない "SELECT * FROM AAA UPDATE"
0124デフォルトの名無しさん
2009/06/26(金) 22:52:350125デフォルトの名無しさん
2009/06/28(日) 15:21:44念のため聞くけど…
まさかこれってSQLインジェクションの対処のためにやってるんじゃないよね?
0126デフォルトの名無しさん
2009/06/28(日) 19:03:21for文で回ってる途中まれに同一変数に『,,,』のようにカンマが3つ連続して出てくることがあり、その場合は取り除きたくないので
原始的に(",,",",",$変数)のようなことができません
あくまで、固定文字列id、その後に数列、その後にカンマふたつという状況でのみカンマひとつ取り除く方法はないでしょうか
PHP5
0127デフォルトの名無しさん
2009/06/28(日) 19:35:50preg_replace('/(?<!,),,$/', ',', 'id059385,,');
0128デフォルトの名無しさん
2009/06/28(日) 19:43:04これ難しいね。
excelなら、Instrrev使えばすぐだけど、正規表現だとどうやるんだろ。
0129デフォルトの名無しさん
2009/06/29(月) 15:35:58Perlならこれでいけるっぽいけど、どうかな。だめかな
s/((?:[^;]*?".*?")*[^;]*)(?:.*?$)?/$1/mg
0130デフォルトの名無しさん
2009/06/29(月) 18:07:370131デフォルトの名無しさん
2009/06/29(月) 22:27:07対象データ ^AAA(BBB(CCC)(ddd)))(FFF)(GGG)$
文末の、括弧記号を含まず括弧で囲われたものが連続しているもの
を検索したいけど挙動が違います。
1) /(?:\([^(]+?\))+$/ 検索結果→ (CCC)(ddd)))(FFF)(GGG)
2) /(?:\([^)]+?\))+$/ 検索結果→ (FFF)(GGG)
欲しい結果は2の方です。
文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?
0132デフォルトの名無しさん
2009/06/30(火) 11:23:57そりゃ前から読んでもそうなるだろ
>\([^(]+?\)
「括弧の間に開き括弧を含まないもの」だから"(ddd)))"にもマッチする
>「括弧記号を含まず」「括弧で囲われたものが」「連続しているもの」
/(?:\([^()]+?\)){2,}/
0133デフォルトの名無しさん
2009/06/30(火) 11:24:380134デフォルトの名無しさん
2009/06/30(火) 11:51:09そういう動作はしない。
0135デフォルトの名無しさん
2009/06/30(火) 12:48:16は
/unko\r\n/
と同等と考えればわかりやすいだろう
(厳密には違うけど)
0136デフォルトの名無しさん
2009/06/30(火) 23:16:49レスありがとうございます。
お礼が遅くてすみません。週末からリロードし忘れてました。
質問後自分なりに頭捻って、((".*?")|;.*(?=$)) , $2 とか無理やりやってたんですが
>129さんのでいけました。特に (?: )の使い方が参考になります。ありがとうございます。
今回の件とは直接関係ないんですが、除外文字列の表記がよくわからずいつも悩みます。
今回の例でいうと コメント文字列が「;」ではなく「 ;」(半角スペース+セミコロン)だった場合とか
(?:(".*?")|[\t ]+;.*(?=$)) , $1 みたいな方法で弾くしかないのかな。
0137デフォルトの名無しさん
2009/07/01(水) 00:15:50なんであんなに複雑い書いたのかマジ俺イミフ。しにてえ
0138デフォルトの名無しさん
2009/07/01(水) 23:41:47ttp://msdn.microsoft.com/ja-jp/library/bs2twtah(VS.80).aspx#BalancingGroupDefinitionExample
この例の正規表現がどうして <> の入れ子構造にマッチするのか上の解説読んでもよく分からないので誰か分かりやすく説明してください
「name2 グループと現在のグループの間隔をグループ name1 に格納します。」って文があるけど
この「name2 グループと現在のグループの間隔」っていうのはリンク先の例で言うとどこからどこまでなのかとか
格納するっていうのがつまりどういうことなのか、って言うレベルでさっぱり理解できてない・・・
最後の "(?(Open)(?!))$" にいたっては自分の中で暗号と化してるorz
0139デフォルトの名無しさん
2009/07/02(木) 03:33:28Openでカウントが増える。
Close-Open でそのそのカウントが減る。
んで、開きと閉じのアングルブラケットの数がバランスしていれば カウントは0になるので
"(?(Open)(?!))$";
の条件が (?!) ではなくなる。
この(?!) というのは要するに何にもマッチしないもの。
0140123
2009/07/03(金) 21:01:48うまく書けなかったので要素に区切ってチェックすることにしました。
>>125
SQLインジェクションって知らなかったけど、悪意のある入力の
チェックって感じかな?
入力文字はSQL文が前提で、そこまで重い意味合いのチェック
ではありませんでした。
SQLインジェクション対策って普通Regex.Escapeを通すのかな?
0141デフォルトの名無しさん
2009/07/03(金) 21:07:18自作のお手製ライブラリはやめた方がいい。
DBによって攻撃の仕方が違うし、
よく知ってる人が作っていろんな人が使ってるやつの方がやっぱり圧倒的に安全。
詳しくはそれっぽいスレで聞いてくれ。
0142デフォルトの名無しさん
2009/07/03(金) 21:16:14何のためにそんなことをしたいのか分からないが、
ユーザにSQLクエリを入力させて実行させたい、とかいう話なら、
クエリ式に対してチェックをするのではなくて、
データベースの更新が出来ないような権限でクエリを実行すべき。
0143123
2009/07/03(金) 21:16:15そうなんですか。調べてそっちの方向に変えてみます。
よく考えたらSQL文にRegex.Escapeなんて
なんの関係もなかった・・・。
0144123
2009/07/03(金) 21:20:04権限で〜ってのは思ってたんですが、触れない事情がありまして。
普通はそうなんですね。
スレ違いになってきたのでこの辺で終わっときます。
ありがとう。
0145デフォルトの名無しさん
2009/07/04(土) 21:44:21PHP ver 5.2
●検索か置換か?
置換
●説明
カッコ書きのある文章のカッコの中身を取得したい。
たとえば、
カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後
の文章に対して、後方参照で
arr[1] = カッコ書き前()カッコ書き後
arr[2] = カッコ1()カッコ1後
arr[3] = カッコ2()カッコ2後
arr[4] = カッコ3()カッコ3後
と言った感じで取得したい。
試した文
$preTxt = 'カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後';
$match = '/.*(\(.*\)).*/';
preg_match("$match",$preTxt,$arr);
結果
[0]= カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後
[1]= (カッコ3)カッコ2後)カッコ1後)
●対象データ と望する結果
上記記載
すみません。どなたかお願いします。
0146デフォルトの名無しさん
2009/07/04(土) 22:10:12別の自作関数を作っておいて、
arr[1] = \1 & \7
arr[2] = \2 & \6
arr[3] = \3 & \5
arr[4] = \4
なんてのはどうかな。
もっとスマートな方法もあるかもしれないけど、今でもこれ使って動かしてます。
0147デフォルトの名無しさん
2009/07/04(土) 22:43:50でも、多分、俺って、あなたの思っている以上の馬鹿みたい。
全くもって、理解できないんですけど・・・・・・・。
もうちょっとわかりやすくしていただけると助かります。
って、馬鹿がわかりやすい解説って、わかってる人にはかなり難しいんだと思いますけど。
すみません。わがまま言って。
0148デフォルトの名無しさん
2009/07/04(土) 23:28:20function foo($text) {
$kekka = Array();
$match = '/^(.*?)\((.*)\)(.*)/';
while (preg_match($match, $text, $arr) > 0) {
array_push($kekka, $arr[1] . "()" . $arr[3]);
$text = $arr[2];
}
array_push($kekka, $text);
return $kekka;
}
$arr=foo('カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後');
print_r($arr);
0149デフォルトの名無しさん
2009/07/05(日) 12:38:53完璧です。
ほんとにありがとうございました。!!
0150デフォルトの名無しさん
2009/07/05(日) 12:56:110151デフォルトの名無しさん
2009/07/05(日) 14:24:31もうちょっと努力して説明してみるから少し待ってね。
0152デフォルトの名無しさん
2009/07/05(日) 15:21:420153デフォルトの名無しさん
2009/07/05(日) 16:48:27138です、レス遅れてすみません
自分で試しつつなんとか(?<name1>p1)+(.*)(?<name1-name2>p2)+ という表記なら
(p2にマッチした回数 - 1) 個だけ name1とname2のキャプチャを取り出して
(.*)の両端にくっ付けていく(ただし取り出すキャプチャの 最大数は (p1にマッチした回数-1) 個)のかな
という感じで理解し始めてますが・・・
それと?(Open) という書き方は ? と () までも含めて、Openを文字列リテラルとしてではなく
(既に同じパターンのより先頭部分で定義されている)Openという部分パターンの
グループ名だということを示すための表記法なんでしょうか?
こっちは試し方も良く分かりません・・・
0154151
2009/07/06(月) 03:10:01というのは、named caputure でこの場合は < を Open という名前で捕獲するもの。
この場合は捕獲自体には意味はなくて裏で増やしているカウンタが重要。そして
(?'Close-Open'>)
この部分で Open のカウンタを1減らしている。< と > の数が同じであれば、
(?(Open)(?!))
まで来た時点で Openの値は0になっているはず。
で、この表現なんだけど (? (Open) (?!) ) が、? に続く部分正規表現が「真」であれば (?!) を
マッチの条件にするというプログラミング言語の if 〜 then 〜 みたいなもの。
解説は
http://msdn.microsoft.com/ja-jp/library/36xybswe(VS.80).aspx
にある。
そして Open が0でない==バランスが取れていなければ (?!) のチェックを
するのだけど、これは前回も書いたように絶対にマッチに失敗するというパターン
なので、全体を通してみるとバランスが取れていればマッチ成功。
そうでなければ失敗。という次第。
0155デフォルトの名無しさん
2009/07/10(金) 10:33:025章にある「IPアドレスへのマッチ」で、0から255の数字にマッチする正規表現のサンプルがありますが
[01]?\d\d?|2[0-4]\d|25[0-5]
これだと、最初の選択で [01]? がオプションなので、たとえば "999" が "99" に
マッチしてしまうような気がするのですが、問題はないのでしょうか。
よろしくお願いします。
0156デフォルトの名無しさん
2009/07/10(金) 10:43:53^([01]?\d\d?|2[0-4]\d|25[0-5])\. (中略) \.([01]?\d\d?|2[0-4]\d|25[0-5])$
として前後の境界を指定して利用してるから問題ないんじゃないの?
数字だけを取り出したいのであれば、例えば、
\b([01]?\d\d?|2[0-4]\d|25[0-5])\b
みたいに前後を指定する必要があるよね。
って、そういう話ではなくて?
0157デフォルトの名無しさん
2009/07/10(金) 10:49:11あぁ、すみません。
たしかに ^ $ で境界を指定すれば問題ありませんね。
部分式ばかり考えていて見えませんでした。
ありがとうございます。
0158デフォルトの名無しさん
2009/07/22(水) 01:41:17●正規表現の使用環境
VB.NET
●検索か置換か?
検索
●説明
タグの外の文字列を順に取得したい
●対象データ
<html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7>
だったり
<html1>AAA<html2>BBB<html3><html4><html5><html6>CCC<html7>DDD
●希望する結果
r = New Regex("(?<1>.+?)(?<2>.+?)(?<3>.+?)(?<4>.+?)" ←今こんな感じ
Console.WriteLine(m.Groups(1).Value)
で結果 AAA
Console.WriteLine(m.Groups(2).Value)
で結果 BBB
Console.WriteLine(m.Groups(3).Value)
で結果 CCC
Console.WriteLine(m.Groups(4).Value)
で結果 DDD
0159デフォルトの名無しさん
2009/07/22(水) 02:48:28Match()一発じゃなくてMatches()で地道にいっこずつ切り出してみた。もっといい方法はあるかもしれん
Dim r As Regex = New Regex("(?:<.*?>)+(.+?)(?=<|$)")
Dim s As String = "<html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7>"
For Each m As Match In r.Matches(s)
Console.WriteLine("{0}", m.Groups(1).Value)
Next
0160デフォルトの名無しさん
2009/07/26(日) 09:55:51実用上、30〜40文字ぐらいが限界だったように記憶してるのですが
NFAとDFAでの計算量ってO表記でどのぐらいでしたっけ?
wikiにそういう情報のせといて欲しい・・
0161デフォルトの名無しさん
2009/07/26(日) 10:56:30/(?<=<div>)(.*?)(?=<\/div>)/is
はエラーにならなくて
/(?<=<div[^>]*>)(.*?)(?=<\/div>)/is
がエラーになる理由が分からないのですが、
なぜなのでしょうか
0162デフォルトの名無しさん
2009/07/26(日) 10:59:130163デフォルトの名無しさん
2009/07/26(日) 11:01:24固定長の文字列に対してのみ働きます(処理系による。可変長の文字列を許可する処理系もあります
と書いてある。つまりそういうことだ。
0164デフォルトの名無しさん
2009/07/26(日) 11:06:41ありがとうございます。
別のルートから正規表現の方法を探す事にします。
0165デフォルトの名無しさん
2009/07/26(日) 17:28:23/(?<=<div[^>]{0,99}>)(.*?)(?=<\/div>)/is
可変長は無理でもこの書き方({0,99})がOKな処理系もあるから試してみろ
0166デフォルトの名無しさん
2009/07/27(月) 09:08:56DFAの計算量は自明でしょ。
NFAはパターンとテキストによって違うから一概には言えないんじゃないかな。
0167デフォルトの名無しさん
2009/07/27(月) 12:33:410168デフォルトの名無しさん
2009/07/27(月) 13:29:380169デフォルトの名無しさん
2009/07/28(火) 16:26:27正規表現書いたらそれを満たす全ての文字列を生成する
プログラムを書くのは難しいですか?
0170デフォルトの名無しさん
2009/07/28(火) 16:33:470171デフォルトの名無しさん
2009/07/28(火) 16:35:250172デフォルトの名無しさん
2009/07/28(火) 16:37:23それをやると遅延評価的に必要な分だけ垂れ流すんです
0173デフォルトの名無しさん
2009/07/28(火) 16:37:58指定字数の全ての組み合わせの文字列をその正規表現にマッチさせて
成功したものだけをリストアップすればいい
速度的にどれだけ実用になるかは不明
最適化するとなると論文レベル
0174デフォルトの名無しさん
2009/07/28(火) 16:40:11初めから有効な物しか生成しないものとします
0175デフォルトの名無しさん
2009/07/28(火) 16:42:08よし、正規表現をパースすることから始めよう。
0176デフォルトの名無しさん
2009/07/28(火) 16:42:44プログラムを書けばできそうだな。
0177デフォルトの名無しさん
2009/07/28(火) 16:56:58僕が心配してるのは5次以上のn次方程式の一般解
を探そうとしていやしないかという事です
0178デフォルトの名無しさん
2009/07/28(火) 17:00:530179デフォルトの名無しさん
2009/07/28(火) 17:12:42> それをやると遅延評価的に必要な分だけ垂れ流すんです
> 初めから有効な物しか生成しないものとします
> 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい
何をしたいんだよ?お前は。
とりあえず学校の宿題なら自分でやれ。それか自分で調べろ
0180デフォルトの名無しさん
2009/07/28(火) 17:33:480181デフォルトの名無しさん
2009/07/28(火) 17:46:04とりあえずかの有名なこれでいいんじゃねーの?
ttp://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1026-0&YEAR=2003
ttp://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1027-7&YEAR=2003
0182デフォルトの名無しさん
2009/07/28(火) 17:52:14あり^^
0183亀
2009/07/29(水) 13:06:01『正規表現の定義』ってなんですか?
0184デフォルトの名無しさん
2009/07/29(水) 13:11:580185デフォルトの名無しさん
2009/07/29(水) 13:18:500186デフォルトの名無しさん
2009/07/29(水) 13:19:32アルファベットΣ上の正規表現とは、
- 空集合 0
- Σ の要素 c
- r, s が正規表現のとき r + s
- r, s が正規表現のとき rs
- r が正規表現のとき r*
のいずれか。
0187デフォルトの名無しさん
2009/07/29(水) 13:23:42宿題は自分でやらせろよ。
0188末吉
2009/07/29(水) 14:16:10183は定義を聞いてるんだろ??
0189デフォルトの名無しさん
2009/07/29(水) 15:17:020190デフォルトの名無しさん
2009/07/29(水) 15:56:14ここの「形式言語理論における正規表現」を見ろ
ttp://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE
0191デフォルトの名無しさん
2009/07/29(水) 16:05:59http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A8%80%E8%AA%9E
0192デフォルトの名無しさん
2009/07/29(水) 16:46:520193デフォルトの名無しさん
2009/07/29(水) 17:11:51大学のオートマトンのテキストがひどかったので
この本は難しいだろうと思ってずっと敬遠してたが
これはとてもわかりやすかった
予備知識もほとんどいらない
(最初のほうは背理法だとか数学的帰納法のレベルから解説)
厳密な定義がちゃんと書いてあるが
それに先だって具体例をあげて説明がある
ただ、この本を読んでも>>169の実装に直接には役立たないかもしれない
(0+1)*1(0+1)+(0+1)*1(0+1)(0+1)のような正規表現を簡約して
より計算しやすい正規表現に変換する
といった最適化なら正規表現の代数的性質の章でちょろっと学べる
0194169
2009/07/29(水) 19:37:54正規表ゲニスト名乗っててオートマトンも知らんのかと
馬鹿にされるのは嫌なので オートマトニストにもなります><
0195デフォルトの名無しさん
2009/07/29(水) 19:59:040196デフォルトの名無しさん
2009/07/29(水) 23:55:35aaa/bbb/ddd
aaa/ccc/eee
・
・
・
上のような文字列があって正規表現での検索時間(grepとか)を速くしたいと思っていますが、
高速化するために正規表現の合成?みたいなことができるようなライブラリってありますでしょうか?
検索したい文字列のリストはだいたい1行が30〜40文字程度で100行〜200行ほど
検索対象はファイルサイズで400Mbyte〜6Gbyteぐらいです。
0197デフォルトの名無しさん
2009/07/30(木) 00:09:320198デフォルトの名無しさん
2009/07/30(木) 00:10:300199デフォルトの名無しさん
2009/07/30(木) 00:13:490200デフォルトの名無しさん
2009/07/30(木) 00:46:050201デフォルトの名無しさん
2009/07/30(木) 03:14:06せめて -e を並べるか -f だろー。
0202デフォルトの名無しさん
2009/07/30(木) 09:14:170203デフォルトの名無しさん
2009/07/30(木) 12:45:550204デフォルトの名無しさん
2009/07/30(木) 14:47:20Javaで、JavaのDecimalFormat用文字列を
Excelの数値フォーマット定義文字列に変換するフィルターを作ってます。
『他の人にやらせりゃいいのに…まあ調べればわかるやろ…』と思って始めましたが、
案の定、いきなり引っかかりました。www
1)引用符'を引用符"に変換する正規表現(ただし連続''は'自体を表すので"にしない)
2)''に囲まれていない浮動小数点EをE+に ([0#])(E)([0#])を\1E+\3に
なお、変換は単一の正規表現で行う必要はなく、
順序依存のある複数の置換をかけてもOKです。
ただしできれば、各フィルターは常に全文に適用したいと思います。
(不要なフィルターも通過させる)
最悪、一部の変換結果を絶対にユーザが使わない予約語に変換して避けておく…
ということも可能だと思いますが…
正直、いきなり1)で引っかかったのにはガックリきました。
フィルター文字列定義をpropertiesで外出しにして
出荷後もサポートで変更・追加できるようにしないとマズイな…
0205204
2009/07/30(木) 14:56:08これが論理的にダメダメと言うことはわかってます。
//////////////////////////////////
//シングルクォート囲みをダブルクォート囲みに
//'"'→\"
//まず引用符の中の"自体をエスケープする。\"
filter = new RegFilter("'\"'","\\\"");
filterlist.add(filter);
//シングルクォート囲みをダブルクォート囲みにする前に、
//連続''は'1個をあらわすので、"'"に変換してやる。
filter = new RegFilter("''","'");
filterlist.add(filter);
//シングルクォートをダブルクォートに変換してやる。
//ただしさっきのを除く必要がある。
filter = new RegFilter("[^']'","\"");
filterlist.add(filter);
//全フィルターを通す変換実行
sResult = executeFilters(sFormat, filterlist);
0206デフォルトの名無しさん
2009/07/30(木) 15:49:130207204
2009/07/30(木) 15:56:541)は
(')([^']+)(')→\"\2\"
''→'
の2つでいけるかなぁ…
0208204
2009/07/30(木) 16:24:35引用符の中のEだけをEEに退避
([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7
浮動小数点のEをE+に
(*.)([#0])(E)([#0])(*.)→\1\2E\+\4\5
退避したEEをEに戻す
(*.)(EE)(*.)→\1E\3
の3つで97%くらいは出来てるかなあ。
変換対象の最後が引用符のときに落としちゃうけど、まあ…
0209204
2009/07/30(木) 16:27:22引用符の中のEだけをEEに退避
([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7
浮動小数点のEをE+に
(.*)([#0])(E)([#0])(.*)→\1\2E\+\4\5
退避したEEをEに戻す
(.*)(EE)(.*)→\1E\3
0210204
2009/07/30(木) 16:40:36横着せずに引用符の中のEEだけをもどさないとだめだな。
0211デフォルトの名無しさん
2009/07/30(木) 19:06:52正規表現よりは文脈自由言語でパースしたほうが絶対にいい
0212204
2009/07/31(金) 10:43:27(あまり入出力仕様は変わらないと思うが、日付フォーマット変換の追加がありうる)
正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。
また、必ずしも完璧に作る必要はなくて、
ユーザが業務で使うごく一般的なフォーマット文字列を通せれば後は制限事項でもいいし。
それをいえば、想定顧客に、浮動小数点使ってる人なんていないんじゃないかと思うけどね。。。
0213デフォルトの名無しさん
2009/07/31(金) 11:31:23> 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。
いねーだろ。どの口が言ってんだ?あん?
0214デフォルトの名無しさん
2009/07/31(金) 11:58:340215デフォルトの名無しさん
2009/07/31(金) 12:16:24速度は遅いしで、まともなプロジェクトには使わないよ。
0216デフォルトの名無しさん
2009/07/31(金) 12:21:080217デフォルトの名無しさん
2009/07/31(金) 12:24:55>>204 に回答してから言えよ。
0218デフォルトの名無しさん
2009/07/31(金) 12:27:31用途に十分なら別にかまわんしなぁ。
むしろ正規表現使わずにだらだら書かれたほうが
見通しが悪くて遅い場合も多い。適材適所。
0219デフォルトの名無しさん
2009/07/31(金) 12:28:28>>204 に回答してから言えよ。
0220デフォルトの名無しさん
2009/07/31(金) 12:33:32問題がよくわかんないし、javaとexcelだしスルー。
0221デフォルトの名無しさん
2009/07/31(金) 12:37:460222デフォルトの名無しさん
2009/07/31(金) 13:14:57正規表現で書かれたフィルタのバグ取りなんてぞっとする
ちゃんとした技術者なら、RFCにCSVのBNFがそのまま載ってるんだから
BNFの通りにコーディングすりゃ
テスト含めて1日で終わるよ
0223204
2009/07/31(金) 13:15:56おっと確かに! 居ないからこそ、漏れがやる羽目になっとるわけだがwww
(出来る人に空きが無いという理由もある)
しかしま、コトは相対比較で十分なんで。
>>221
まあねえ。ML探して加入して自己紹介して
過去ログ検索して質問投げるってのが本来なんだろうが。
でもhttp://www.rubular.com/とかでちょこちょこやるうちに
何とかなりそうな気がしてきた。
0224デフォルトの名無しさん
2009/07/31(金) 13:26:42'''hoge' みたいなパターンがダメなのでは。
>>205 がよくわからんのだが、正規表現の変換処理のリスト (filterlist) を積んで、
executeFilters() でそれらを順番に逐次処理して適用する、ということ?
そんなん絶対うまくいかんと思うが。
0225デフォルトの名無しさん
2009/07/31(金) 13:43:19で切り抜けるんだろう
0226デフォルトの名無しさん
2009/07/31(金) 13:56:39だよねー。
Java は良く知らないんだが、 JavaCC とか使えばスッキリ書けないのかね?
0227デフォルトの名無しさん
2009/07/31(金) 14:17:270228デフォルトの名無しさん
2009/07/31(金) 16:40:250229デフォルトの名無しさん
2009/07/31(金) 16:50:34お前がそれをさっさと書かないからこのネタが延々と終わらんだろうが。
0230デフォルトの名無しさん
2009/07/31(金) 16:56:530231デフォルトの名無しさん
2009/07/31(金) 16:57:340232デフォルトの名無しさん
2009/07/31(金) 18:02:03期待age
0233デフォルトの名無しさん
2009/08/01(土) 04:17:100234デフォルトの名無しさん
2009/08/01(土) 08:51:210235デフォルトの名無しさん
2009/08/01(土) 10:11:53あんた馬鹿?
0236デフォルトの名無しさん
2009/08/01(土) 12:43:120237デフォルトの名無しさん
2009/08/01(土) 12:45:19あんた馬鹿?
0238デフォルトの名無しさん
2009/08/01(土) 13:24:300239デフォルトの名無しさん
2009/08/01(土) 13:29:080240デフォルトの名無しさん
2009/08/01(土) 13:30:200241デフォルトの名無しさん
2009/08/01(土) 13:33:210242デフォルトの名無しさん
2009/08/01(土) 13:44:540243デフォルトの名無しさん
2009/08/01(土) 14:01:480244デフォルトの名無しさん
2009/08/01(土) 23:44:50Javaでも20行未満で書けるレベルの処理だろうに。
↑
できもしないことを、いい加減に書くのは、質問者に対して失礼。
第三者も見ていて不愉快。
おまいこそ最悪の荒らし!
0245デフォルトの名無しさん
2009/08/02(日) 00:07:19>>228が無知で、何も知らずに発言しちゃっただけかも知れないんだぜ?
くだらないプライドを守っている暇があったら、勉強して技術向上して
人生をエンジョイした方が、オタク(というかハッカー精神)的に
意味のあるものになるんじゃないのかね?
0246デフォルトの名無しさん
2009/08/02(日) 00:26:430247デフォルトの名無しさん
2009/08/02(日) 06:43:38気になってしようがないわけだが。
0248デフォルトの名無しさん
2009/08/02(日) 11:29:020249デフォルトの名無しさん
2009/08/02(日) 11:42:35アドバイスが欲しいらしいのはわかるが、お願いします的なセリフは何も書いてないだろ
ウゼー独り言延々書き込んでるやつがいるなぁ位の認識だったんだが。
0250デフォルトの名無しさん
2009/08/02(日) 16:12:460251デフォルトの名無しさん
2009/08/02(日) 16:38:580252デフォルトの名無しさん
2009/08/02(日) 16:54:39www
苦しい言い訳。
「お願いします」口調なら、「Javaでも20行未満で書けるレベルの処理」になるのかい?
0253デフォルトの名無しさん
2009/08/02(日) 16:59:480254デフォルトの名無しさん
2009/08/02(日) 23:12:00中学生2年生かおまいは
0255デフォルトの名無しさん
2009/08/03(月) 05:00:110256デフォルトの名無しさん
2009/08/03(月) 07:08:27ニヤニヤと見守るのがベター
0257デフォルトの名無しさん
2009/08/03(月) 13:34:29・・・で?20行で書けないの?天才さんw
0258デフォルトの名無しさん
2009/08/03(月) 13:35:100259デフォルトの名無しさん
2009/08/03(月) 19:18:180260デフォルトの名無しさん
2009/08/03(月) 19:21:170261デフォルトの名無しさん
2009/08/03(月) 20:25:05そっちが20行と言ったから20行なわけで。
べつに、40行でも50行でも構わんのだがな。
0262デフォルトの名無しさん
2009/08/03(月) 20:27:150263デフォルトの名無しさん
2009/08/03(月) 20:37:57こいつ、恥ずかしくなって逃げたのか。布団かぶって泣いてるのか?
0264デフォルトの名無しさん
2009/08/03(月) 20:43:090265デフォルトの名無しさん
2009/08/03(月) 23:36:06Javaよくわからんから20行が無茶ぶりなのかどうか知らんけど
一体何が夏厨の琴線に触れちゃったの?
質問者不在で誰も求めてないコード請求してもしょーがなくね?
0266デフォルトの名無しさん
2009/08/03(月) 23:43:390267デフォルトの名無しさん
2009/08/03(月) 23:49:27速いとこコードを晒せ。それですべて解決する話だろ?
0268デフォルトの名無しさん
2009/08/03(月) 23:55:010269デフォルトの名無しさん
2009/08/04(火) 07:15:520270デフォルトの名無しさん
2009/08/04(火) 07:38:060271デフォルトの名無しさん
2009/08/04(火) 08:03:12BNF通りのCSVの定義が19行、呼び出し8行、コンビネータパーサ80行
しかしよ、実はCSVのパースなんか全く関係なくて
問題はDecimalFormatのパースじゃねーか
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/text/DecimalFormat.html
ここにBNFライクな仕様が載ってるから
これをパース後数値にして、コンマ/改行で区切って出力すりゃいい
楽をするならJParsec
0272デフォルトの名無しさん
2009/08/04(火) 08:29:370273デフォルトの名無しさん
2009/08/04(火) 09:08:46pythonだと難しいかもな。
0274デフォルトの名無しさん
2009/08/04(火) 09:17:44世間を知らない井の中の蛙
0275204
2009/08/04(火) 09:41:26エスケープ処理が多重にかかるのでちとわかりにくいかも。
引用符の外側を一撃で取れないので、
内側の退避と復旧手順が入って無駄に複雑になってます。
引用符のパースはjavaでかけるべきだったかな…
/**
* 正規表現パターン文字列と、置換文字列で1セット。上から順に解釈適用する。
*/
public static final String[][] FORMAT_FILTER_ARRAY = {
//////////////////////
//浮動小数点対応
//引用符の中のEだけをEEに退避
{"([^']+)(')([^']+)(E)([^']+)(')([^']+)", "$1$2$3EE$5$6$7"},
//浮動小数点のEをE+に
{"(.*)([#0])(E)([#0])(.*)", "$1$2E\\+$4$5"},
//退避したEEをEに戻す
{"([^']+)(')([^']+)(EE)([^']+)(')([^']+)", "$1$2$3E$5$6$7"},
//////////////////////
// シングルクォート囲みをダブルクォート囲みに
{"(')([^']+)(')", "\"$2\""},
{"''", "'"},
//////////////////////////////
//多重エスケープ対応
//
//多重にエスケープ処理が走るため。\1個でも\を出せるように倍にしておく。
{"\\\\", "\\\\\\\\"}
};
0276204
2009/08/04(火) 09:43:17小数点を最後に残すExcelの仕様のせい。
/**
* 整数値の後ろの余分な小数点を削除する。
* ここでは引用符は"に、浮動小数点はE+に変換後なので注意。
*/
public static final String[][] DOT_FILTER_ARRAY = {
//////////////////////
//整数の場合の余分な小数点対応(浮動小数点で無い場合)
//引用符の中の.#を..#に退避
//{"([^\"]+)(\")([^\"]+)(\\.#+)([^\"]+)(\")([^\"]+)",
{"([^\"]*)(\")([^\"]*)(\\.#+)([^\"]*)(\")([^\"]*)",
"$1$2$3\\.$4$5$6$7"},
//浮動小数点の#.#E#を#..#E#に退避 上の変換とは重ならない。
{"(.*)([0#])(\\.#+E\\+[0#])(.*)", "$1$2\\.$3$4"},
//上記変換対象にならなかった-つまり..#でない.#+を削除
{"(.*)([^\\.])(\\.#+)(.*)", "$1$2$4"},
//浮動小数点の#..#E#を#.#E#に復旧。引用符の中の外し方がわからない。
{"(.*)([0#])(\\.)(\\.#+E\\+[0#])(.*)", "$1$2$4$5"},
//引用符の中の..#を.#に復旧
//引用符の中にもともと..#があっても、...#になって..#に戻るはず。
{"([^\"]*)(\")([^\"]*)(\\.)(\\.#+)([^\"]*)(\")([^\"]*)",
"$1$2$3$5$6$7$8"}
};
0277デフォルトの名無しさん
2009/08/04(火) 09:49:560278204
2009/08/04(火) 09:51:49仕事はともかく、美しいコードには感動があるのでね。
(とはいえ、他人が見てわからないコードはよろしくないので、
無理に圧縮した20行より、読みやすい100行の方がいいけど。)
>>224
n回フィルターすると、フィルター相互の矛盾衝突のチェックがn(n-1)必要になるから、
フィルターが増えるほど加速的に困難になる…という趣旨ですよね。
しかし、3行1セットで1個の処理をするフィルターを作成し、
そのセットが他には絶対に影響を与えない堅固なものであれば、
必ずしもn(n-1)にはならないのではないか…と思って手をつけたわけですが…
しかし実際やってみるとそうはなってませんな…引用符処理が誤算でした。
0279デフォルトの名無しさん
2009/08/04(火) 09:56:000280デフォルトの名無しさん
2009/08/04(火) 09:59:410281204
2009/08/04(火) 10:05:11もう一区切りついたんで書き込みやめとくよ。(何が出来て何が出来ないかはわかったという趣旨)
あと>>224さんの'''hoge' 難問ですわ…ご指摘ありがとうございました。
0282デフォルトの名無しさん
2009/08/04(火) 10:48:270283デフォルトの名無しさん
2009/08/04(火) 11:00:430284デフォルトの名無しさん
2009/08/04(火) 12:21:320285デフォルトの名無しさん
2009/08/04(火) 12:31:48/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0286デフォルトの名無しさん
2009/08/04(火) 21:43:500287デフォルトの名無しさん
2009/08/04(火) 21:52:53丿 ::.__ .::::::::::::: __ ::::ヽ_ ,. 、 / /
/ /。 ヽ_ヽv /: /。ヽ ::::::ヽ ,.〃´ヾ.、 / /
/ / ̄ ̄√___丶  ̄ ̄\ ::::| / |l ', / /
| .:::::::::: / / tーーー|ヽ ..::::: ::|r'´ ||--‐r、 ', javaなら20行で書ける!!
| .:::::. ..: | |ヽ .,..ィ'´ l', '.j '. javaなら20行で書ける!!
| ::: | |⊂ニヽ| | 'r '´ ',.r '´ !| \
| : | | |:::T::::| ! l! ....:.:.:.:.:.:ヽ、 ,l \
\: ト--^^^^^┤ ゝ、.,_ ---‐‐‐----ゝ、ノ
0288デフォルトの名無しさん
2009/08/04(火) 22:34:410289デフォルトの名無しさん
2009/08/05(水) 15:37:17専用スレ立ててやれ
0290デフォルトの名無しさん
2009/08/05(水) 16:35:23/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0291デフォルトの名無しさん
2009/08/05(水) 17:57:53もう終わった話に一人で何言ってんの?
0292デフォルトの名無しさん
2009/08/05(水) 18:09:20/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0293デフォルトの名無しさん
2009/08/05(水) 23:40:590294デフォルトの名無しさん
2009/08/05(水) 23:51:53/ / ヽ ::: \
| (●), 、(●)、 |
0295デフォルトの名無しさん
2009/08/06(木) 09:14:150296デフォルトの名無しさん
2009/08/06(木) 09:36:030297デフォルトの名無しさん
2009/08/06(木) 10:22:390298デフォルトの名無しさん
2009/08/06(木) 10:53:47おい!できるならとっとと書いてみろよ。
逃げんじゃねーぞこの口だけ野郎が!
0299デフォルトの名無しさん
2009/08/06(木) 14:40:55あ?どうしたコラ!
はやくしろよ。
また逃げたのかなw 布団被って泣いているのかな?w
0300デフォルトの名無しさん
2009/08/06(木) 15:07:240301デフォルトの名無しさん
2009/08/06(木) 15:25:36「書ける」 とは言ったが 「書く」 とは言ってない。
書いて欲しかったら頭を下げてお願いしろ。
それが礼儀だろ。
・・・って言いたいのか?中学生か、おまいは!
0302デフォルトの名無しさん
2009/08/06(木) 15:41:380303デフォルトの名無しさん
2009/08/06(木) 17:35:45今なら30行に負けてあげてもいいと言ってるんだし、
そもそも、こっちは行数なんて問題にしてないから
100行だろうが1000行だろうが好きなだけ費やしてもいいんだよ。
早く書いてごらんよ。どうせ書けないんでしょ?
書けもしないのにテキトーなことを言ったんでしょ?
0304デフォルトの名無しさん
2009/08/06(木) 18:28:460305デフォルトの名無しさん
2009/08/06(木) 20:07:09/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0306デフォルトの名無しさん
2009/08/06(木) 20:11:55/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0307デフォルトの名無しさん
2009/08/06(木) 22:54:49/ ドッカン
/ / ,,_ ドッカン
━━━━━'), )= ☆ゴガギーン
∧_∧ヽ\ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ) 〉 〉_ _ ____ ∧_∧ ∠ おらっ!20行で書いてみろ
/ ⌒ ̄ / "'''"'| || (`∀´ ) \___________
| | ̄l | |/ / \
. | | | | || | | /\ヽ
| | .| | | へ//| | | |
( | .| ロ|ロ ゙!l''ヽ/,へ \|_ | | |
| .lヽ \ | | ヽ\/ \_ / ( )
| .| 〉 .〉 | | | |
/ / / / | | 〈| | |
/ / / / | | || | |
/ / / / └──┴──┘ | |
0308デフォルトの名無しさん
2009/08/07(金) 02:26:580309デフォルトの名無しさん
2009/08/07(金) 10:12:050310デフォルトの名無しさん
2009/08/13(木) 17:30:460311デフォルトの名無しさん
2009/08/13(木) 22:48:37[!#-'*-;=?-~]
が一体どういう動きをしているか知りたいです
一応説明では「URL文字にマッチ」となっているのですが、
どこがどのようにしてそれらの文字にマッチするよう働いているのか分かりません
環境は鬼車です
0312311
2009/08/14(金) 00:06:06しばらく調べていたら範囲指定がらみで動いていたということが分かりました
どうもすみません
0313デフォルトの名無しさん
2009/08/17(月) 19:35:58鬼車
●検索か置換か?
置換
●説明
( から ) までの文字列にマッチ
マッチした文字列中に ABC が含まれている場合は
置換時に ABC を \1 で参照できる正規表現
●対象データ
smp("桁数:" + strABC.length);
smp("行数:" + cnt);
●希望する結果
smp(ABC);
smp();
検索文字列
\([^\)]*?(ABC)?[^\)]*?\)
置換文字列
(\1)
で試してみたのですが、ABCがある行も無い行も全て
smp(); になってしまいました。
どのように記述すればABCを取り出せるのか教えてください。
0314デフォルトの名無しさん
2009/08/17(月) 20:48:230315デフォルトの名無しさん
2009/08/17(月) 21:25:22場合分けの部分を親言語に任せる方が、文字列の否定を使うより楽かもしれない。
0316デフォルトの名無しさん
2009/08/17(月) 21:54:46.*?の?は、付けておかないと(ABC)?.*?の部分に入ってくれないかと思い付けました。
結果的にマッチしていないので無意味ですが。。。
何か方法はありませんか?
0317デフォルトの名無しさん
2009/08/17(月) 22:13:33(1) smp\(.*(ABC).*\) → xxxxxxxxxxx(\1)
(2) smp\(.*\) → smp()
(3) xxxxxxxxxxx\((.*)\) → smp(\1)
0318デフォルトの名無しさん
2009/08/17(月) 22:30:300319デフォルトの名無しさん
2009/08/17(月) 22:59:430320デフォルトの名無しさん
2009/08/17(月) 23:02:200321デフォルトの名無しさん
2009/08/17(月) 23:16:18またお前か。
エディタ上で使うって言ってるだろ。
何調子乗ってんだ?
0322デフォルトの名無しさん
2009/08/17(月) 23:18:12と言うかその前に、JavaでCSV処理の話はどうなったんだ?
逃げたと思ったらコレだよ。
とっとと書いてみなよ20行君。
いや30行でも100行でもいいからさ。
0323デフォルトの名無しさん
2009/08/18(火) 07:48:030324デフォルトの名無しさん
2009/08/18(火) 13:13:170325デフォルトの名無しさん
2009/08/18(火) 14:03:04kwsk
0326デフォルトの名無しさん
2009/08/18(火) 14:56:49>>322
おいおい、釣りで書いてるだけだろ
なにヒートアップしてんだ
0327デフォルトの名無しさん
2009/08/18(火) 15:00:43/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0328デフォルトの名無しさん
2009/08/18(火) 21:57:510329デフォルトの名無しさん
2009/08/18(火) 23:01:57●正規表現の使用環境
bash(grepかegrepでお願いします。)
●検索か置換か?
置き換え
●説明
2行を1行にまとめたい。
●対象データ
>
(hogehoge.pampam)
●希望する結果
>(hogehoge.pampam)
ワガママ逝って申し訳ないのですが、
できればgrepだけで出来れば最高です。
0330デフォルトの名無しさん
2009/08/18(火) 23:19:33grepに置換機能はないからムリ。
2行毎につなげるだけだったら、
#!/bin/sh
while read line
do
read line2
echo "$line$line2"
done
でよくない?
0331デフォルトの名無しさん
2009/08/19(水) 00:16:07Javaなら20行未満で書けるレベルの処理だが。
0332デフォルトの名無しさん
2009/08/19(水) 00:35:11は? 置換だけならJavaでも10行未満でいけるだろ。
それより20行未満でCSV処理はどうなったのかな?
布団被って泣いてるのかな?w
0333デフォルトの名無しさん
2009/08/19(水) 04:12:55Javaなら20行未満で書けるレベルの処理で大人気ないな
0334デフォルトの名無しさん
2009/08/19(水) 04:21:09Javaなら20秒未満で書けるレベルの処理で大人気ないと思いますよ
0335デフォルトの名無しさん
2009/08/19(水) 07:14:09Javaなら20%未満のやる気で書けるレベルの処理で大人気ないっていう感想を持つ人もいるだろうし
0336デフォルトの名無しさん
2009/08/19(水) 08:05:540337デフォルトの名無しさん
2009/08/19(水) 08:22:250338デフォルトの名無しさん
2009/08/19(水) 10:51:230339デフォルトの名無しさん
2009/08/19(水) 10:58:450340デフォルトの名無しさん
2009/08/20(木) 08:01:320341デフォルトの名無しさん
2009/08/20(木) 10:41:35どうせ javaで正規表現を書くんだろ?
pattern = Pattern.compile("\\([^\\)]*?(ABC)[^\\)]*?\\)");
みたいな。やたら \ が増えまくって、かえって見にくい。
ディレクトリの区切り文字の \ にマッチさせるのに
pattern = Pattern.compile("\\\\");
って \ を4回も書かなきゃならん。 \ 地獄だ。武○士だ!
0342デフォルトの名無しさん
2009/08/20(木) 12:05:040343デフォルトの名無しさん
2009/08/20(木) 18:33:59ん?
\xがエスケープシーケンスになる言語はみんなそうなんじゃないの?
>>342
うむ。
0344デフォルトの名無しさん
2009/08/20(木) 19:41:20文字列から生成する場合に限ればな
正規表現リテラルが存在する言語ならそれに付き合う必要はない
0345デフォルトの名無しさん
2009/08/20(木) 21:01:570346デフォルトの名無しさん
2009/08/20(木) 21:19:05ワロス
アホすぎるwww
0347デフォルトの名無しさん
2009/08/20(木) 21:43:560348デフォルトの名無しさん
2009/08/21(金) 20:54:3620行係を任ず
0349デフォルトの名無しさん
2009/08/23(日) 19:53:560350デフォルトの名無しさん
2009/08/23(日) 19:57:390351デフォルトの名無しさん
2009/08/23(日) 21:52:560352デフォルトの名無しさん
2009/08/23(日) 23:10:06単語の文字列にハイフンが含まれることを考慮してなかったり
0353デフォルトの名無しさん
2009/08/24(月) 22:19:40すんません、ありがとうございます。
シェルよくわからんのでしたが、すんごい参考になりました。
おかげでなんとか出来ました。
ありがとうございます。
0354デフォルトの名無しさん
2009/08/25(火) 00:05:17Regular Expressions Cookbook
http://oreilly.com/catalog/9780596520687/
http://www.amazon.com/dp/0596520689/
0355デフォルトの名無しさん
2009/08/25(火) 16:48:49●正規表現の使用環境
PHP 5.2.5
●検索か置換か?
検索 & 置換
●説明
絵文字用の文字列変換を考えています。
フォームのテキストエリアに入力された文字列から
##で囲まれた文字列を検索し置換したい。
●対象データ
いい天気ですね##A0F1##!!
(AF01は固定ではないです)
●希望する結果
##AF01##にヒットし、さらにAF01のみに置換したい。
自分が考えた正規表現は /#[2][A-F|0-9]{4}#[2]$/u
ですが、うまく動きません・・どなたかお願いします。
0356デフォルトの名無しさん
2009/08/25(火) 17:16:28s/##([A-F0-9]{4})##/$1/g
じゃないのか?
0357デフォルトの名無しさん
2009/08/26(水) 01:11:44って。
そうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。
0358デフォルトの名無しさん
2009/08/26(水) 01:12:25って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。
0359デフォルトの名無しさん
2009/08/26(水) 10:11:150360デフォルトの名無しさん
2009/08/26(水) 11:21:38「質問を質問で返すな」と言い切る自信はないらしい。
0362デフォルトの名無しさん
2009/08/26(水) 12:28:28ろくに回答もせず、人のレスに難癖付けるだけ、か…
哀れだな
0363355
2009/08/26(水) 14:10:51/#{2}([A-F|0-9]{4}#{2})/
でヒットするところまでは持っていけました。
後はなんとかなりそうなので、がんばってみます。
なんだかスレが荒れてしまったみたいで申し訳ありません。
0364デフォルトの名無しさん
2009/08/26(水) 14:19:430365デフォルトの名無しさん
2009/08/26(水) 14:26:40# s/.../.../g とかは Perl 特有な演算子なのでそこらへんはよしなに
$str = preg_replace('/##([A-F0-9]{4})##/', '$1', $str);
これでどうですか?
0366デフォルトの名無しさん
2009/08/26(水) 14:55:40って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。
0367デフォルトの名無しさん
2009/08/26(水) 15:17:15(?:^|[^#])
##([A-F0-9]{4})##
(?:$|[^#])
0368デフォルトの名無しさん
2009/08/26(水) 15:28:420369367
2009/08/26(水) 15:54:37「####AF01##」のような文字列も置換していいのか。
条件反射してすまなかった。
0370デフォルトの名無しさん
2009/08/26(水) 16:36:03/#{2}([A-F]{2}[0-9]{2})#{2}/
0371デフォルトの名無しさん
2009/08/26(水) 17:08:01「対象データ」の「##A0F1##」にマッチしなさそう、とか。
0372デフォルトの名無しさん
2009/08/26(水) 17:40:08文字クラスの連結のつもりだったとエスパー。
0373デフォルトの名無しさん
2009/08/26(水) 17:46:50>>365
ありがとう!まさにこれが期待した動作です。
Perlに詳しくなかったのでPHP風に直せなかった自分の力不足で
動かなかったなどと言ってすみませんでした。
>>367
####AF01##は##「##AF01##」の部分だけ置換したいと思っています。
##は意味もなく使わせないようにしたいのですが、ユーザーがどういう意図で
使うかはわからない部分もあるのでそうしています。
後は答えていただいた方法をうまく組み込んでみます、ありがとうございました。
0374デフォルトの名無しさん
2009/08/26(水) 17:51:36A-F|0-9はうまい方法が思いつかなかったのでこうしてます。
要するにA-Fまでと0-9までの半角英数字4文字が続いている場合となります。
0CAFの場合もありますし、DA16など4文字は確定で入り乱れている状態です。
これをうまく表現する方法がわからなかったので
調べながら書いてみたら動いたのでとりあえずこれでやってました。
0375デフォルトの名無しさん
2009/08/26(水) 18:01:24[A-F|0-9]は、A-Fか0-9か'|'という意味だ。
つまり[|A-F0-9]や[A-F0-9|]も同じ意味になる。
おまえがやりたいことは[A-F0-9]で出来る。
まだ正規表現に慣れていないみたいだが、
Webアプリ開発では必須のスキルなので
これから勉強していくといい。
まずはフクロウ本を買うところから始めるべし。
0376デフォルトの名無しさん
2009/08/26(水) 19:23:33最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。
0377誤字った
2009/08/26(水) 19:24:20最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。
0378デフォルトの名無しさん
2009/08/26(水) 19:38:26自己紹介?
0379デフォルトの名無しさん
2009/08/26(水) 19:40:230380デフォルトの名無しさん
2009/08/26(水) 20:38:260381デフォルトの名無しさん
2009/08/26(水) 23:33:37ところが「うわぁぁぁぁ」のような表現は日常的に存在しているためにそのたびにハングアップして閉口してます。
正規表現で小さい文字を大きくすることは可能ですか?
0382デフォルトの名無しさん
2009/08/26(水) 23:40:530383デフォルトの名無しさん
2009/08/26(水) 23:54:430384デフォルトの名無しさん
2009/08/26(水) 23:57:310385デフォルトの名無しさん
2009/08/27(木) 00:04:250386デフォルトの名無しさん
2009/08/27(木) 00:18:540387デフォルトの名無しさん
2009/08/27(木) 00:32:52下手糞なツッコミ
もっと激しく!!
0388デフォルトの名無しさん
2009/08/27(木) 10:57:46s/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/g
0389デフォルトの名無しさん
2009/08/27(木) 11:01:290390デフォルトの名無しさん
2009/08/27(木) 11:20:00s/ぁ/あ/g
s/ぃ/い/g
s/ぅ/う/g
s/ぇ/え/g
s/ぉ/お/g
s/ゃ/や/g
s/ゅ/ゆ/g
s/ょ/よ/g
s/ゎ/わ/g
s/ァ/ア/g
s/ィ/イ/g
s/ゥ/ウ/g
s/ェ/エ/g
s/ォ/オ/g
s/ヶ/ケ/g
s/ャ/ヤ/g
s/ュ/ユ/g
s/ョ/ヨ/g
s/ヮ/ワ/g
0391デフォルトの名無しさん
2009/08/27(木) 18:29:070392デフォルトの名無しさん
2009/08/27(木) 19:12:10正規表現を教えて下さい
0393デフォルトの名無しさん
2009/08/27(木) 19:24:33かつルール違反のアドレスが結構ある。
とりあえず使えればいいのであれば、メールアドレス 正規表現 で検索
0394デフォルトの名無しさん
2009/08/27(木) 19:44:38メールアドレスが普通に作れちゃったから困ったもんだ。
0395デフォルトの名無しさん
2009/08/27(木) 19:52:12まずググる、という発想すらできない君にはこれがお似合いだよ
.+@.+
0396デフォルトの名無しさん
2009/08/27(木) 21:16:55「暗いと不平を言うよりも、すすんで明かりをつけましょう」
0397デフォルトの名無しさん
2009/08/27(木) 22:41:53それじゃあ
> マッチするなら電子メールアドレスである事が保証できる
を満たしてないだろ。
これなら条件を満たすだろ。
[a-z]{6,30}@gmail.com
0398デフォルトの名無しさん
2009/08/27(木) 23:53:56[^@][email protected]
0399デフォルトの名無しさん
2009/08/27(木) 23:58:02やりがちだよなぁ、\.comとかのエスケープ忘れ
しかもそうそう異常判定が起きないから潜在的なバグになりやすい
0401デフォルトの名無しさん
2009/08/28(金) 00:57:190402デフォルトの名無しさん
2009/08/28(金) 01:02:24"に囲まれてるなら@も連.もおkとか
イカレてるわ
0403デフォルトの名無しさん
2009/08/28(金) 01:22:040404デフォルトの名無しさん
2009/08/28(金) 09:38:080405デフォルトの名無しさん
2009/08/28(金) 12:21:25そこはこのスレのお題の範疇を超えるんで、気にしなくて良いんじゃないかと思う。
0406デフォルトの名無しさん
2009/08/28(金) 12:30:48/[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/
0407デフォルトの名無しさん
2009/08/28(金) 13:25:520408デフォルトの名無しさん
2009/08/28(金) 13:30:290409デフォルトの名無しさん
2009/08/28(金) 13:39:480410デフォルトの名無しさん
2009/08/28(金) 13:43:16うんざりしたw
これはRFCが悪い。
0411デフォルトの名無しさん
2009/08/28(金) 14:27:48これはひどい。
local-partの記号類をまったく受け付けないじゃん。
Gmailの拡張アドレスが弾かれちゃうね。
0412デフォルトの名無しさん
2009/08/28(金) 14:29:02「マッチするなら電子メールアドレスである事が保証できる 」
を満たせばおkなんじゃないの?
0413デフォルトの名無しさん
2009/08/28(金) 14:37:11>>397はそういうジョークだろう
0414デフォルトの名無しさん
2009/08/28(金) 15:24:14そういう意味ならなおさら >>406 はまるでダメでしょ。
電子メールアドレスでないものも余裕でマッチする。
0415デフォルトの名無しさん
2009/08/28(金) 15:27:38http://search.cpan.org/~rgarcia/perl-5.10.0-RC1/pod/perlfaq9.pod#How_do_I_check_a_valid_mail_address?
0416デフォルトの名無しさん
2009/08/28(金) 15:33:15ああ、俺もそれ使ってるわ。
日本語の解説はこれな。
ttp://blog.livedoor.jp/dankogai/archives/51189905.html
0417デフォルトの名無しさん
2009/08/28(金) 15:40:45そのページにあるリンク先見てて思ったんだが
[.] とか [@] って何の意味があるんだろ。
ときどき目にするんだが。。
0418デフォルトの名無しさん
2009/08/28(金) 16:04:50[@]はあんまり意味がないと思うけど、[.]は\.を使うよりいい(見やすい?)と、Damian Conway先生が
言ってたような気がする。
0419デフォルトの名無しさん
2009/08/28(金) 16:16:48そこに書いてある、このモジュールを使えばいいんかな?
RFC::RFC822::Address -- RFC 822 style address validation. - search.cpan.org
http://search.cpan.org/~abigail/RFC-RFC822-Address-2009040601/lib/RFC/RFC822/Address.pm
0420デフォルトの名無しさん
2009/08/28(金) 16:43:24[@] は配列が展開されるのを防ぐのかな?
0421デフォルトの名無しさん
2009/08/28(金) 16:47:38ジョークか?
0422デフォルトの名無しさん
2009/08/28(金) 21:11:370423デフォルトの名無しさん
2009/08/28(金) 21:23:59それもう面白くないよ。
0424デフォルトの名無しさん
2009/08/28(金) 22:58:46丿 ::.__ .::::::::::::: __ ::::ヽ_ ,. 、 / /
/ /。 ヽ_ヽv /: /。ヽ ::::::ヽ ,.〃´ヾ.、 / /
/ / ̄ ̄√___丶  ̄ ̄\ ::::| / |l ', / /
| .:::::::::: / / tーーー|ヽ ..::::: ::|r'´ ||--‐r、 ', javaなら20行で書ける!!
| .:::::. ..: | |ヽ .,..ィ'´ l', '.j '. javaなら20行で書ける!!
| ::: | |⊂ニヽ| | 'r '´ ',.r '´ !| \
| : | | |:::T::::| ! l! ....:.:.:.:.:.:ヽ、 ,l \
\: ト--^^^^^┤ ゝ、.,_ ---‐‐‐----ゝ、ノ
0425デフォルトの名無しさん
2009/08/29(土) 02:27:040426デフォルトの名無しさん
2009/08/29(土) 07:51:010427名無しさん@そうだ選挙に行こう
2009/08/30(日) 09:40:010428名無しさん@そうだ選挙に行こう
2009/08/30(日) 12:41:160429名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:23:45等もマッチしなくなるよ
0430名無しさん@そうだ選挙に行こう
2009/08/30(日) 14:01:20字面だけで処理しようってんだから、そこまで気にしてやる必要は無いんではないか
0431デフォルトの名無しさん
2009/08/30(日) 22:57:51"全然勝負にならない。" にマッチしちゃうよ。
0432デフォルトの名無しさん
2009/08/31(月) 01:06:53全然なくならない
0433デフォルトの名無しさん
2009/08/31(月) 01:21:30正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html#POSITIVELOOKAHEAD
「よくある勘違い」
0434デフォルトの名無しさん
2009/08/31(月) 01:32:27/全然(?!.*?(?:ない|なく|なかった|ません)).*?。/
これでどうだ
0435デフォルトの名無しさん
2009/08/31(月) 02:32:07魚肉ソーセージを突っ込んで欲しいのか?
0436デフォルトの名無しさん
2009/09/01(火) 10:08:550437デフォルトの名無しさん
2009/09/01(火) 21:27:07検索してみたら「全然参考にならないんだ、悪いけど。」にマッチしてる。
0438デフォルトの名無しさん
2009/09/01(火) 22:13:55Perl と Ruby で試してマッチしないんだけど、どんな正規表現エンジン使ってるの?
0439デフォルトの名無しさん
2009/09/01(火) 22:25:44お前のレス全然参考にならないんだ、悪いけど。
0440デフォルトの名無しさん
2009/09/01(火) 22:30:23これ。内部エンジンがどうなっているのかよく分かんない。
ttp://www.kotonoha.gr.jp/cgi-bin//search_form.cgi?viaTopPage=1
0441デフォルトの名無しさん
2009/09/01(火) 23:00:44>>1 をよく読んで出直せ。
0442441
2009/09/01(火) 23:09:11>>440 のをちょっと試してみたけど、
「前後文脈の指定について」の後文脈の例を見るとわかるように、
「検索文字列」の直後のパターンを指定したい場合は、
文字列先頭のアンカを指定する必要があるみたい。
例えば >>436 のを参考にこんなんでいけるかと。
^((?!ない|なく|なかった|ません).)*。
0443デフォルトの名無しさん
2009/09/01(火) 23:16:52ごめんなさい。
>>442
おおお、できた。ありがとう。
0444デフォルトの名無しさん
2009/09/04(金) 13:45:50●正規表現の使用環境
.NET Framework 2.0
●検索か置換か?
置き換え
●説明
ランダムな文字列内に繰り返す言葉を1つにまとめたい
●対象データ
abcdddddde
こんにちちちちちちわ
!+++**!
●希望する結果
abcde
こんにちわ
!+*!
0445デフォルトの名無しさん
2009/09/04(金) 14:20:02s/(.+?)\1+/$1/g
ドトネトだとこんな感じか
Regex re = new Regex( @"(.+?)\1+" );
Console.WriteLine( re.Replace( "abcdddddde", "$1" ) );
0446デフォルトの名無しさん
2009/09/04(金) 14:23:20でもいいな
0447デフォルトの名無しさん
2009/09/04(金) 23:46:35ありがとうございます、なるほど・・・
PHPだけで他の言語や正規表現はサッパリで、助かりました
0448デフォルトの名無しさん
2009/09/04(金) 23:55:590449デフォルトの名無しさん
2009/09/05(土) 00:56:440450デフォルトの名無しさん
2009/09/05(土) 09:38:250451デフォルトの名無しさん
2009/09/06(日) 15:33:57PCRE7
●検索か置換か?
検索
●説明
HTMLマーク付けされていないURLを探したい
●対象データ
http://example1.com/ <a href="http://example2.com/">http://example2.com/</a> http://example3.com/
●希望する結果
http://example1.com/
http://example3.com/
0452デフォルトの名無しさん
2009/09/12(土) 19:55:220453デフォルトの名無しさん
2009/09/12(土) 20:54:51非欲張りな繰り返しのこと? それとも逆に強欲な繰り返しのこと?
0454デフォルトの名無しさん
2009/09/15(火) 23:24:210455デフォルトの名無しさん
2009/09/17(木) 13:12:34VBScript
●検索か置換か?
置換
●説明
ソースコードの関数を置換したい
●対象データ
1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)
●希望する結果
1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)
とりあえず対になる()の特定方法が知りたいです・・
0456デフォルトの名無しさん
2009/09/17(木) 19:10:430457デフォルトの名無しさん
2009/09/17(木) 19:59:50カッコのネストの深さを限定すればあるいは。
0458デフォルトの名無しさん
2009/09/17(木) 20:26:50ネスト数を限定すれば書けるが汚くなるのは言うまでもない。
0459デフォルトの名無しさん
2009/09/18(金) 09:51:28拡張されたのを使えばなんとかなるけどあれを正規表現と
呼んでいいのか激しく疑問w
さらに全く正規表現じゃなくなるが頭に
#define FuncA(x,y,z) FuncD(z,x,y)
を追加してcppに食わせれば一発なんだけどね。
% cat hoge
#define FuncA(x,y,z) FuncC(z,x,y)
1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)
% cpp hoge
# 1 "hoge"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hoge"
1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1,"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)
0460デフォルトの名無しさん
2009/09/18(金) 13:14:55●正規表現の使用環境
5.10.0
●検索か置換か?
置換
●説明
先頭の<と行末の>を削除したい
●対象データ
<XXXXXX>
XXXXXX>
<XXXXXX
●希望する結果
XXXXXX
0461デフォルトの名無しさん
2009/09/18(金) 13:16:460462デフォルトの名無しさん
2009/09/18(金) 13:24:16な、なぜだ…このテンプレつかてるのに。
あ。パールです…
0463デフォルトの名無しさん
2009/09/18(金) 13:31:32> 5.10.0
言いたいことはわからんでもないが。
0464デフォルトの名無しさん
2009/09/18(金) 13:34:45Linux 2.6.30.5-43.local.fc11.i686.PAE #1 SMP Wed Sep 16
16:46:32 JST 2009 i686 i686 i386 GNU/Linux
あら勘違いしたかな?これでだいじょぶですか?
0465デフォルトの名無しさん
2009/09/18(金) 13:39:08しむらー、一行目
/^<?(.*?)>?$/
Perlでは実行確認してないけど多分大丈夫だろ
0466デフォルトの名無しさん
2009/09/18(金) 13:43:34うわーありがとう。
もーちょっとだったのに汗
助かりました。
0467455
2009/09/18(金) 14:49:49対になる()や[]の一致書式の方はありますか?
これが出来れば結構いろいろ応用がききそうなんですが。
0468デフォルトの名無しさん
2009/09/18(金) 15:32:46最近の拡張ではできるものもあるけど、やりかたがそれぞれなので、
一般的に説明できない。
つーかその例のようなのは>>459の言うようにcpp使うのが楽だな。
0469デフォルトの名無しさん
2009/09/18(金) 18:48:14正規分布 normal distribution
正規表現 regular expression
0470デフォルトの名無しさん
2009/09/18(金) 19:22:31混乱するからどうしてもと言うなら
統計学のnormalを「標準」とでも脳内変換しとけ
0471デフォルトの名無しさん
2009/09/18(金) 20:03:18何が問題なの?
異なる言語で単語が一対一に写像するなんてことは有り得ないんで、
その程度の不整合でいちいち悩んでると人生辛くなるよ。
0472455
2009/09/18(金) 22:35:18それがわかっただけでも満足です。ありがとう。
0473デフォルトの名無しさん
2009/09/18(金) 23:05:45これ読んでみたけど本当に良い本だった。世界的に認められてるだけのことはある。
数学丸出しなのでかなり難しい内容だけど、オライリーのフクロウ本を一通り読んで
DFAとNFAの違いを知りたいというモチベーションがあれば読み進められるかも。
0474デフォルトの名無しさん
2009/09/18(金) 23:16:090475デフォルトの名無しさん
2009/09/20(日) 20:12:290476デフォルトの名無しさん
2009/09/24(木) 21:36:59お時間あればよろしくおねがいします
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
()の文字を取り除きたい
●対象データ
W(ジョーカー)
W(ルナ)
●希望する結果
W
W
string Title = "W(ジョーカー)";
string nobrackets = "<title>(.*)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;
で、nullなんです。アドバイス乞う…。
0477デフォルトの名無しさん
2009/09/24(木) 22:15:26string Title = "W(ジョーカー)";
string nobrackets = @"(?<title>W)\(.*\)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;
(2)ちょっと弄ってみた方
string Title = "W(ジョーカー)";
string nobrackets = @"\(.*\)";
Regex re = new Regex(nobrackets);
Title = re.Replace(Title, "");
>>476
何がしたいのかをもうちょっと良く考えてみるといい
0478デフォルトの名無しさん
2009/09/24(木) 22:15:26Title = Regex.Replace(Title, @"\(.*?\)", "");
0479デフォルトの名無しさん
2009/09/24(木) 22:52:030480デフォルトの名無しさん
2009/09/25(金) 11:17:01●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
ホームページのすべてのタグを取り除きたい
●対象データ
http://www.asahi.com/shopping/pc_camera/special/TKY200909240072.html
●希望する結果
プレーンテキスト
●現状
');
document.write('');
//-->
などいくつかのタグが残る状況です。
●いま書いている正規表現
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
0481デフォルトの名無しさん
2009/09/25(金) 11:35:31「いま書いている正規表現」の処理の前段で <script>...</script> を削除すると良いと思われ。
0482デフォルトの名無しさん
2009/09/25(金) 12:14:56html = Regex.Replace(html, "<script>.*</script>", "");
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
としてみましたが、状況に変化なしです。
0483デフォルトの名無しさん
2009/09/25(金) 12:56:400484デフォルトの名無しさん
2009/09/25(金) 13:02:57何でそうなるかの原因を考えよう。
想定と違う動きをした箇所を比較してみるといい。
document.write('ipt>');
といった、JavaScript内で閉じタグを記述してる箇所に正規表現がひっかかって');が残る。
だから481は<script type= .... </script>を先に除去すればいい、って言ってるのでしょう。
0485デフォルトの名無しさん
2009/09/25(金) 13:44:24なんでこっちだけRegex.Replaceなんだ?
たぶん、これでいいんじゃないかな
Regex regex1 = new Regex("<script>.*?</script>", RegexOptions.Singleline);
Regex regex2 = new Regex("<noscript>.*?</script>", RegexOptions.Singleline);
Regex regex3 = new Regex("<.*?>", RegexOptions.Singleline);
html = regex1.Replace(html,"");
html = regex2.Replace(html,"");
html = regex3.Replace(html,"");
0486デフォルトの名無しさん
2009/09/25(金) 18:34:41>>485
これがいちばんいけそうです。
http://www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html
をやってみたら、まだ下のほうにだいぶタグが残るのですが…。
>>484
考えながらやってみてはいるのですが、のこったタグの原因はほとんど判読不明…。
たとえば、
impAserver = "http://imp.asahi.com";
が残るのですが…。
>>483
実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
0487484
2009/09/25(金) 19:22:18ほんとに考えてるのかなあ……。
<script>だと<script type="text/.... って書いてあるのに引っかからないわけですよ。
var wc = new WebClient() { Encoding = Encoding.GetEncoding("EUC-JP") };
var html = wc.DownloadString("http://www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html ");
var result = Regex.Replace(html, "<script.*?</script>", "",RegexOptions.Singleline);
result = Regex.Replace(result, "<.*?>", "", RegexOptions.Singleline);
Console.WriteLine(result);
0488デフォルトの名無しさん
2009/09/26(土) 02:10:55他人の書いたのをコピーしてるだけ。
0489483
2009/09/26(土) 02:30:20> 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
率とかそんなんじゃなくてさあ、 HTML のソース見て考えてる?
もうめんどくせえなあ。
0490デフォルトの名無しさん
2009/09/29(火) 00:50:56えーと、差分を見る方法を用意してる?
処理前と処理後を比較すれば、どこが除去されたのか
すぐ分かるはずなんだけど。
windiffとかWinMergeでも使え。
0491デフォルトの名無しさん
2009/10/01(木) 07:09:090492デフォルトの名無しさん
2009/10/01(木) 07:11:380493デフォルトの名無しさん
2009/10/01(木) 13:32:47$text =~ s/^\n//s; では削除されませんでした。
0494493
2009/10/01(木) 13:38:112つ改行がありました。
2つの改行を削除するには、/^\n\n//では削除されませんでした。
0495493
2009/10/01(木) 13:42:36これは改行じゃないのかもしれない。
なんかあります。
$textの先頭に改行される何かがあります。
CRLF、CR、LFのいずれもないのに、改行される何かがあるんです。
0496デフォルトの名無しさん
2009/10/01(木) 13:46:000497493
2009/10/01(木) 13:56:53BOMじゃないですが、UTF-8です。
0498デフォルトの名無しさん
2009/10/01(木) 14:02:120499493
2009/10/01(木) 14:03:40しかも、次の文字が消滅しました。
0500493
2009/10/01(木) 14:06:3516進数での開き方を調べます。
0501デフォルトの名無しさん
2009/10/01(木) 14:08:20表現されているのか勉強するといいと思うよ。
0502493
2009/10/01(木) 14:16:26その不気味な改行の部分は、EF BB BF 0D 0A E3でした。
この正体は何なのでしょうか?
>>501
勉強がんばってみます。
0503493
2009/10/01(木) 14:23:57何とかしてみます。
0504493
2009/10/01(木) 14:26:08よく分かりませんね。
0505493
2009/10/01(木) 14:39:43全てはポックンのミスでした。
改行コード消した後に、改行コード付加してました。
BOMとか関係ありませんでした。
BOMはメモ帳で開いたから付加されただけでした。
0D 0AはCRLFの改行コードでした。
本当にありがとうございました。
0506デフォルトの名無しさん
2009/10/02(金) 13:21:12勉強がてら、ActivePerl 5.8.8で作ってみた。
色々調べて、いい勉強になった。
my $re1 = qr/(?:[^(),]+|"(?>(?:(?>[^"\\]+)|\\.)*)")*/;
our $re2 = qr/\w+\((?:(??{$re1}),?|(??{$::re2}))*\)/;
my @s = qw{
FuncA(1,2,3)
FuncA(1,FuncB(2,3),4)
FuncA(1,"string2,3",4)
FuncA(1,2,3):FuncD(1,2,3)
FuncA(1,FuncB(2,FuncC(3,"4),(5"),"\","),6)
};
for (@s) {
print "$_\n";
s/FuncA\(($re1|$re2),($re1|$re2),($re1|$re2)\)/FuncC($3,$1,$2)/;
print "$_\n\n";
}
0507デフォルトの名無しさん
2009/10/11(日) 23:48:11●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
2行以上の連続した空の行(全角、半角スペースのみの行、または改行のみの行)を2行にしたい。
(1行の空の行は1行のまま、2行の空の行は2行のまま)
●対象データ
AAA
BBB
CCC
●希望する結果
AAA
BBB
CCC
●現状
●いま書いている正規表現
Dim r As Regex = New Regex("<.*?>", RegexOptions.Multiline)
よろしくお願いします。
0508デフォルトの名無しさん
2009/10/12(月) 02:31:350509デフォルトの名無しさん
2009/10/12(月) 12:20:24・・・これは・・・。
0510デフォルトの名無しさん
2009/10/12(月) 12:28:14今確認出来る環境じゃないんで、適当に書くけども。
([ ]*/n){3} → /n/n に置換。
こんなイメージでどう?スペース入ってるけど、投稿すると消えるとおもう。
0511デフォルトの名無しさん
2009/10/12(月) 14:32:25((\s| )*\n){2,}
0512デフォルトの名無しさん
2009/10/12(月) 14:51:11半分になるだろ
0513デフォルトの名無しさん
2009/10/12(月) 15:01:200514デフォルトの名無しさん
2009/10/12(月) 16:55:110515デフォルトの名無しさん
2009/10/12(月) 22:03:19([ ]*\n){3,}
((\s| )*\n){3,}
これで出来そうですね。/は自分の環境の場合\に直します。
[ ]と( )の違いも試してみます。
ありがとうございました。
0516デフォルトの名無しさん
2009/10/14(水) 00:43:45.NETの正規表現で"abc"という文字列を一回のreplaseで"b"にする方法はありますか?
0517デフォルトの名無しさん
2009/10/14(水) 01:28:02>>4
つーか例は数個出してくれ
一個だけだと「/abc/を"b"に置換すればいい」とか言われても文句言えないぞ
0518デフォルトの名無しさん
2009/10/14(水) 01:37:17流行っているのでしょうか?
0519デフォルトの名無しさん
2009/10/14(水) 02:02:46環境:
.NET
目的:
置換
説明:
特定の連続しない2つの文字列を取り除く
対象データ:
ACB
ADCB
AECDB
結果:
C
DC
ECD
0520デフォルトの名無しさん
2009/10/14(水) 02:29:11例に倣って、文頭と文末を一文字ずつ省けばいいのか?
それとも説明に則るとして、特定の文字列がAとBならACBCBはどうなるんだ?
0521デフォルトの名無しさん
2009/10/14(水) 03:17:30AとBをそれぞれ取り除くだけじゃん。
正規表現の必要な話か?
0522デフォルトの名無しさん
2009/10/14(水) 13:02:14詳説正規表現の3版を読んでいるのですが
時刻にマッチさせる表現の例として、上のような正規表現が
書かれています。
このJというは、なんですか?誤植かと思って、ネットで正誤表を見てみましたが
誤植ではないみたいです。Jでやると、時刻にマッチしません。やっぱり誤植ですか?
何か意味があるのでしょうか?
0523デフォルトの名無しさん
2009/10/14(水) 14:12:48オライリーにメールすれ。
0524デフォルトの名無しさん
2009/10/14(水) 14:43:050525デフォルトの名無しさん
2009/10/14(水) 14:47:482版の正誤表で確認しました。3版の正誤表はないっぽいですね。
0526デフォルトの名無しさん
2009/10/14(水) 14:49:050527デフォルトの名無しさん
2009/10/14(水) 14:58:21問題の箇所を見てみますと、「J」は書かれていないです。
P20の四角でかこわれた解答の部分で
手元の3版では、+SIZEJ*=と書かれています。
>>522で質問した正規表現はP25にかかれていますが
グーグルブックスでは閲覧出来ないページとなっています。
ありがとうございました。
0528デフォルトの名無しさん
2009/10/14(水) 19:25:53「[0-9]?[0-9]:[0-9][0-9]●(am|pm)」
こんな表現。
●は、60%網点の丸。
0529デフォルトの名無しさん
2009/10/14(水) 21:11:010530デフォルトの名無しさん
2009/10/23(金) 10:12:47ある原稿の
文末から10文字を抽出しろ。と課題がでたのですが
どうしたらできるでのしょうか
0531デフォルトの名無しさん
2009/10/23(金) 10:20:360532デフォルトの名無しさん
2009/10/23(金) 10:21:54宿題は自分でやれ
0533デフォルトの名無しさん
2009/10/23(金) 10:26:17.{10}$
0534デフォルトの名無しさん
2009/10/23(金) 11:01:52申し訳ないのですが本当によくわからないので、
検索する文字列、置換後文字列それぞれにどう入力したらいいのか教えてくれませんか。
0535デフォルトの名無しさん
2009/10/23(金) 11:22:26あれ正規表現じゃなかったような
ヘルプ見るかぐぐれ、それでもわからないならあきらめろマジで
0536デフォルトの名無しさん
2009/10/23(金) 11:35:34課題ってのは自分で考えてやらないと意味ないでしょ?
ここで答え教えて貰ってそれ提出すればそれでいいと思ってるの?
0537デフォルトの名無しさん
2009/10/23(金) 12:02:34「??????????。」
0538デフォルトの名無しさん
2009/10/23(金) 12:05:07>>536みたいな文章の文末が判定できませんやりなおし
0539デフォルトの名無しさん
2009/10/23(金) 12:14:360540デフォルトの名無しさん
2009/10/23(金) 12:38:320541デフォルトの名無しさん
2009/10/23(金) 12:50:48課題は自分で考えさせるべきだ
0542デフォルトの名無しさん
2009/10/23(金) 13:23:100543デフォルトの名無しさん
2009/10/24(土) 08:54:180544デフォルトの名無しさん
2009/10/26(月) 11:37:03うまくいきません。つまり[^\1]がうまく動作しません(構文エラーにはならないのですが)。
おそらく\1は1文字でなく文字列なので文字クラスの中で使えないのだと思いますが、
では\1を否定で使うにはどうしたらいいですか。(!\1)なんてありませんよね。
0545デフォルトの名無しさん
2009/10/26(月) 12:48:08>>1
まず処理系を明示しろ
0546デフォルトの名無しさん
2009/10/26(月) 12:48:500547デフォルトの名無しさん
2009/10/26(月) 13:00:29/(.)(?!\1)./
でいけたよ。
0548デフォルトの名無しさん
2009/10/27(火) 00:09:38VB.NET
●検索か置換か?
検索
●説明
htmlタグの外にある文字を取得したい
●対象データ
<hoge hoge hoge hoge>
<hoge>
<hoge>
<hoge hoge hoge>
あいうえお
<hoge hoge>
<hoge hoge hoge hoge hoge>
●希望する結果
あいうえお
対象のデータの中にはタグの外の文字列は1箇所(1行)しかありません。
何行目にあるかは不明です。
お願い致します。
0549デフォルトの名無しさん
2009/10/27(火) 01:24:47説明からするとサンプルのようにきれいに揃っていそうだし
"<"で始まらない行を抽出(もしくは始まる行を削除)で十分かもしれない
VB.netは知らないから具体例はパス
0550544
2009/10/27(火) 02:03:55否定先読みという機能を勉強したところ、C#の正規表現にも先読みは
あったので、これで実現することができました。ご教授有難うございました
0551デフォルトの名無しさん
2009/11/01(日) 11:23:38抽出
1回では難しそうなので2回に分けてやっているのですが
str=str.match(処理1)
str=str.match(処理2)
とやるとうまくいきません
下がないと処理1はできます
このやり方では何か問題があるのでしょうか?
0552551
2009/11/01(日) 15:39:34過去のスクリプトを見直していたところ
matchで検索してからsubstringで抜き出していて
試したところうまくいきました
どうも失礼しました
0553デフォルトの名無しさん
2009/11/03(火) 13:13:350554デフォルトの名無しさん
2009/11/06(金) 01:43:16秀丸
●検索か置換か?
置換
●説明
文字列Higを含むが、Highでない文字列を置換
●対象データ
Hig123
HigABC
HighScore
●希望する結果
Hig123
^^^
HigABC
^^^
HighScore
お願いします。
0555デフォルトの名無しさん
2009/11/06(金) 01:52:43Hig(?!h)
0556デフォルトの名無しさん
2009/11/06(金) 02:09:08理解できないところがあるので、迷惑でなければ教えてください。
?の効果は、直前のパターンが0回または1回です。
しかし、直前の文字は記号なのでエラーになるように見えます。
現に*や+ではエラーになります。
?はどんな動作をしているのでしょうか?
0557デフォルトの名無しさん
2009/11/06(金) 02:22:40(?!pettern)は否定先読みという構文で、その?とは異なる意味
0558デフォルトの名無しさん
2009/11/06(金) 02:27:13(?!expression) 後方不一致指定でしょ
0559デフォルトの名無しさん
2009/11/06(金) 02:29:26ありがとうございます。
0560デフォルトの名無しさん
2009/11/08(日) 23:04:00全角半角が混ざった文字列の中から、@******という部分を取り出したいと思っています。
・@の前にはどんな文字があってもいい
・******は半角英数とアンダーバー(_)が使える
・******の後ろにスペースか全角文字かアットマーク(@)が付いたら終わり
という条件で取り出したいのですが、うまくいきません。
@\w+[^ ][\x01-\x7E]
では無理でした。
どのような式を書けばいいのでしょうか?
0561560
2009/11/08(日) 23:10:48こんにちは@Abc_123@Def_456 今日はいい天気
を、
こんにちは[hoge][hoge]今日はいい天気
に置換したいって事です
0562デフォルトの名無しさん
2009/11/09(月) 01:21:51@[_\w]+
でいいんじゃない?
0563デフォルトの名無しさん
2009/11/09(月) 02:50:08\w には _ も含まれてるとおも。
0564560
2009/11/09(月) 17:24:29>>563
ありがとうございます。@[\w]+で出来ました。
まだまだ正規表現は初心者ですが、流石にこれが出来ないのは情けない・・・・・・・
0565デフォルトの名無しさん
2009/11/09(月) 17:26:42でおk
0566デフォルトの名無しさん
2009/11/11(水) 23:08:14VB.NET
●検索か置換か?
検索
●説明
拡張子をtxt,jpg,gifなど複数の種類を指定してURLを検索したい
●対象データ
http:****/****/****/12345.jpg
http:****/****/****/12345.exe
http:****/****/****/12345.gif
http:****/****/****/12345.txt
http:****/****/****/12345.bmp
●希望する結果
http:****/****/****/12345.jpg
http:****/****/****/12345.gif
http:****/****/****/12345.txt
現在
http://[\w\d/%#$&?()~_.=+-]+\.jpg
jpgの場合は上記のように書いてありますが、別の拡張子を追加していくにはどうやって書けばよいでしょうか?
http://[\w\d/%#$&?()~_.=+-]+\.jpg|gif
だと、
http:****/****/****/12345.jpg と
g
にヒットするのですが、[jpg|gif] [(jpg)|(gif)]やURLの部分をカッコで囲んだりしてみましたがだめみたいです。
http://[\w\d/%#$&?()~_.=+-]+\.jpg|http://[\w\d/%#$&?()~_.=+-]+\.gif ・・・・・・・
と書けば良いのですが、長くなってしまいます。
拡張子だけを書き足す方法があれば教えていただけないでしょうか。
0567デフォルトの名無しさん
2009/11/11(水) 23:17:110568デフォルトの名無しさん
2009/11/11(水) 23:24:08ありがとう。
でもこれ試した気がしたんだが・・・
0569デフォルトの名無しさん
2009/11/12(木) 07:24:520570デフォルトの名無しさん
2009/11/12(木) 22:18:10$hoge =~ s/.*?([0-9A-F]{16}).*?/$1/i;
print $hoge;
とにかく16進ぽい文字列を16文字で切り出したいので
上みたいに書いたんだけど、切り出せません。
どこが間違ってるかわからないので助けて
0571デフォルトの名無しさん
2009/11/12(木) 22:42:35$hoge =~ /([[:xdigit:]]{16})/;
print $1, "\n";
0572デフォルトの名無しさん
2009/11/12(木) 22:43:43$hoge =~ s/.*?([0-9A-F]{16}).*?//i;
print $hoge;
print $1;
としてみりゃ原因わかるんじゃね?
?外して文頭文末明示すればおk
0573デフォルトの名無しさん
2009/11/14(土) 17:16:59作業内容は、
(1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、
(2)「秀丸エディタ」でそのテキストデータを開き、
^(先頭文字)⇒¥t¥t¥t
に全置換しようとしました。
もともとテキストデータであったファイルを置換するときはうまくいきますが、
Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。
どうすれば、先頭行を置換できるでしょうか。
よろしくお願いいたします。
0574デフォルトの名無しさん
2009/11/15(日) 01:24:50先頭行なのか
どっちかハッキリしろ
0575デフォルトの名無しさん
2009/11/15(日) 10:10:28先頭文字です。
Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
0576デフォルトの名無しさん
2009/11/15(日) 11:33:20マルチライン有効になってる?
0577デフォルトの名無しさん
2009/11/16(月) 00:48:19ありがとうございます。
マルチラインの設定は秀丸側の設定ですか?
それともExcelでしょうか?
初心者ですみません。
早く秀丸を使いこなさないと、ソース書くときに便利なのにもったいないですね。
0578デフォルトの名無しさん
2009/11/16(月) 12:20:02そんなのどんな初心者でも人間なんだから
「マルチライン 秀丸」と「マルチライン Excel」で検索かけたり、設定見れば大体予想は付くと思うが、
少しは自分の手、動かした方がいいぞ、反感買うから
0579デフォルトの名無しさん
2009/11/16(月) 12:27:26それは
検索
だ!
0580デフォルトの名無しさん
2009/11/16(月) 12:28:490581デフォルトの名無しさん
2009/11/19(木) 07:06:23皆さんありがとうございます。
マルチライン、秀丸、excel、テキストなどで検索したのですが、
どこでマルチラインの有効無効をセットできるのか分かりません。
エクセルの各々のセルは、セル内改行を認めていません。
教えていただけないでしょうか。
よろしくお願いいたします。
0582デフォルトの名無しさん
2009/11/19(木) 07:43:49> Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
>>580は?
0583デフォルトの名無しさん
2009/11/19(木) 07:45:52置換の時に出てくるダイアログに>>580のチェックボックスがある
0584デフォルトの名無しさん
2009/11/19(木) 09:31:15「.*」だと文字数制限ないし...
0585デフォルトの名無しさん
2009/11/19(木) 09:43:310586デフォルトの名無しさん
2009/11/19(木) 09:47:170587デフォルトの名無しさん
2009/11/19(木) 10:06:150588デフォルトの名無しさん
2009/11/19(木) 10:42:56改行またはホワイトスペース(半角スペースとTAB含む)以外の1文字
(改行もホワイトスペースだから複数行対象のときは\n不要かもね)
[^\n\s ]+
全角スペースは文字コードにもよると思うので処理系依存かな
0589デフォルトの名無しさん
2009/11/19(木) 18:44:49.?
0590デフォルトの名無しさん
2009/11/20(金) 01:22:54なんで >>1 を読まないかな?
0591デフォルトの名無しさん
2009/11/21(土) 08:57:37そこはチェックを入れています。
別のcsvで試したら、1行目のタイトル行だけ先頭行を認識し、2行目からのデータ行の先頭行は認識しませんでした
(T_T)。
0592デフォルトの名無しさん
2009/11/21(土) 09:31:530593デフォルトの名無しさん
2009/11/21(土) 09:37:180594デフォルトの名無しさん
2009/11/21(土) 09:55:04そういう独自の用語じゃなくて
どういうデータをどうしたいのか具体的に書いて
秀丸スレでもう一度聞いたほうがマシな気がする
0595デフォルトの名無しさん
2009/11/21(土) 10:51:27先頭以外の改行は改行とみなされないんだよ。
だから2行目以降の先頭は、先頭とみなされていない。
改行記号に続く文字列って事。
改行記号を改行記号として認識させるのがマルチライン。
マルチライン問題じゃなかったらお手上げ。
0596デフォルトの名無しさん
2009/11/21(土) 11:08:48Excel、秀丸共に現役バージョンが混在してるソフトなんだし
環境晒しもせず、できませんできません言われてもどうしようもない
WinXPSP3 / Excel 2002(Office XP) SP3 / 秀丸8β25 (HMJRE V2.06)
とりあえず↑の環境では
・Excelコピー→秀丸へペースト
・名前を付けて保存:テキスト(タブ区切り)→秀丸で開く
のどちらでも問題なくできたよ。
0597デフォルトの名無しさん
2009/11/21(土) 12:28:520598デフォルトの名無しさん
2009/11/21(土) 14:49:56Java1.6
●検索か置換か?
検索
●説明
雑多な文字列からスラッシュで終わるURLを抽出したい
●対象データ
今日はhttp://abcd.efgh/abc/でご飯を食べました
そしたらhttp://12345/abc/index.htmlなスープが出てきてビックリ
おまけにhttp://aiueo/test/xxx.imgこんなデザートまで
●希望する結果
http://abcd.efgh/abc/
0599598
2009/11/21(土) 15:27:20(http://|https://){1}[\w\_\.\-/:\#\?\=\&\;\%\~\+]+/[^A-Za-z0-9\_\.\-/:\#\?\=\&\;\%\~]
●結果
http://abcd.efgh/abc/で
最後に一文字付いてしまいます
どうやって付かないようにすれば良いでしょうか
0600デフォルトの名無しさん
2009/11/21(土) 17:14:200601デフォルトの名無しさん
2009/11/24(火) 03:17:06例えば "abcXdXefgXXhij" という文字列の、2番目以降全ての "X" にマッチするようなものです。
基本的そうなのですが、ちっとも思いつきませんでした。
0602デフォルトの名無しさん
2009/11/24(火) 09:13:58その例だとどれにマッチすればいいんだ?
0603601
2009/11/24(火) 09:43:31すいません、いろいろ書き忘れてました。
こんな感じです。
- 使用環境: AutoHotkey 1.0.48
- 使用法: 検索
- 説明: 下記にある文字 X を、最初だけ残して残りを Y に置換したい
"abcXdXefgXXhij" -> "abcXdYefgYYhij"
0604デフォルトの名無しさん
2009/11/24(火) 09:55:19最初のXの次の文字からにすりゃいいんじゃねーの?
0605601
2009/11/24(火) 10:14:23そうでした、ありがとうございます。
こんな感じでできました。
RegExReplace(str, "X", "Y", temp, -1, InStr(str, "X") + 1)
0606デフォルトの名無しさん
2009/11/24(火) 19:44:100607デフォルトの名無しさん
2009/11/24(火) 21:06:460608デフォルトの名無しさん
2009/11/26(木) 00:47:05getaddrinfo(3) を使え。
ってうちのじっちゃんが言ってた。
0609デフォルトの名無しさん
2009/11/26(木) 08:59:16inet_ptonだろ
0610606
2009/11/26(木) 09:39:14JavaScriptとか使って入力段階で一旦弾きたいんですだよ。
サーバ側ではinet_ptonなりなんなり別の手段で再チェックするけど。
0611デフォルトの名無しさん
2009/11/26(木) 09:47:28はやくぐぐれよ
http://www.google.co.jp/codesearch?q=IPv6+regex
0612デフォルトの名無しさん
2009/11/26(木) 10:42:06いのなかのかわず
0613デフォルトの名無しさん
2009/11/26(木) 13:47:570614デフォルトの名無しさん
2009/11/26(木) 23:51:33inet_pton(3) のことは綺麗さっぱり忘れろ。
ってうちの itojun が言ってた。
0615デフォルトの名無しさん
2009/11/27(金) 11:50:16perl5
●検索か置換か?
検索
●説明
クォーテーションに囲まれた(省略可)の文字列を取得したい。
●対象データ
"aaa":'bbb':`ccc`:ddd:eee:666:777:888:999:000:111
●希望する結果
$1:aaa
$2:bbb
$3:ccc
$4:ddd
$5:eee
$6:666
$7:777
$8:888
$9:999
$10:000
$11:111
(["'`]*)([^\1]*)\1):(["'`]*)([^\2]*)\2):(["'`]*)([^\2]*)\2)の形式で、
後方参照が一桁の時はうまく行くんですが、二桁になると不具合がおきます。
(["'`]*)([^\10]*)\10)
\10の下一桁に該当する文字(0)があるとマッチしません。
原因は[^\10]の部分が「\10以外」ではなく「\1と0以外」と解釈される為では
ないかと思いますが、回避する記述方法はありますか?。
0616デフォルトの名無しさん
2009/11/27(金) 12:02:52(["'`]?)([^\1]*)\1:(["'`]?)([^\3]*)\3:(["'`]?)([^\5]*)\5
(["'`]?)([^\11]*)\11)
$2:aaa
$4:bbb
$6:ccc
$8:ddd
$10:eee
$12:666
$14:777
$16:888
$18:999
$20:000
$22:111
でしたm(__)m。
0617デフォルトの名無しさん
2009/11/27(金) 13:26:38[^\1]は文字コードが1の文字以外に解釈されて
いると思われる。
print "match1\n" if 'aa' =~ /(.)[^\1]/;
print "match2\n" if "a\001" =~ /(.)[^\1]/;
print "match3\n" if 'ab' =~ /(.)[^\1]/;
0618デフォルトの名無しさん
2009/11/27(金) 13:49:45解釈される為でも無いということですね。
確かに下一桁が該当する場合に必ず一致しないということでも
なかったので、原因がわからず苦しんでました。ありがとうございます。
^を使用して簡潔に「(二桁で指定する)後方参照の文字を含まない
文字列」は表現できないものでしょうか。
0619デフォルトの名無しさん
2009/11/27(金) 14:47:01表現することも出来ないということですね…。
perl5なんで(?!regexp) が使えるのかな。
0620デフォルトの名無しさん
2009/11/27(金) 15:01:37正規表現では書きにくいので最小マッチ.*?でいいんじゃね?
0621デフォルトの名無しさん
2009/11/27(金) 15:16:04説明不足でした。
●対象データ
"aaa":bbb:"c:c"
●希望する結果
変数1「aaa」
変数2「bbb」
変数3「c:c」
としてマッチさせたいんですが…。
0622デフォルトの名無しさん
2009/11/27(金) 23:19:020623デフォルトの名無しさん
2009/11/28(土) 00:53:45文字列数は固定なのと、クォーテーションは
その文字列内で使わなければ省略できる形が
望ましかったので以下の形にして無事動作しました。
/(?:("?|'|`)(.*?)\1):(?:("?|'|`)(.*?)\3):(?:("?|'|`)(.*?)\5)$/
\Gは始めて知りました。奥深くて理解が追いついてませんが、
勉強したいと思います。
初歩的で恥ずかしいのですが、クォーテーション部分の記述って
「"」または「'」または「`」または「入力なし」を表わすものとして
"?|'|` で正しいのでしょうか
それとも ["'`]? とか他に記述法があるのでしょうか。
0624デフォルトの名無しさん
2009/11/28(土) 01:29:400625デフォルトの名無しさん
2009/11/29(日) 13:29:56p $1
p $2
これで$1に"a1" $2に"a2"になるようには出来ませんか?
"a1a2" =~ /([a-z][0-9])([a-z][0-9])/
コレなら行くんですが・・・
0626デフォルトの名無しさん
2009/11/29(日) 13:36:410627デフォルトの名無しさん
2009/11/29(日) 15:03:100628デフォルトの名無しさん
2009/11/29(日) 18:56:11何か段階的に学習出来るお勧めの書物はないでしょうか?
0629デフォルトの名無しさん
2009/11/29(日) 18:57:280630デフォルトの名無しさん
2009/11/29(日) 19:45:57629さんも言ってる通り、正規表現の本はオライリーのフクロウしか選択肢が無いかも。
あとはネットで勉強すると良いかも。
パターンを何回自分で作ったかによるところが多いから、
PHPチェッカーで作りつつ勉強して、正規表現パズルで息抜きして。
って感じで、フクロウと併用するといいかも。
0631デフォルトの名無しさん
2009/11/29(日) 20:07:32オレみたいに頭の弱いヤツなら。
正規表現検索機能つきのテキストエディタで試行錯誤してれば
すぐに覚えられるよ。
unix の ed とか、まるで「正規表現養成ギブス」だもんな。
0632デフォルトの名無しさん
2009/11/29(日) 20:09:40大丈夫、EDは治療できます。安心してください
0633デフォルトの名無しさん
2009/11/29(日) 20:22:11ダウンロードの方が覚えると思うが。。。
0634628
2009/11/29(日) 21:36:030635デフォルトの名無しさん
2009/11/30(月) 15:26:130636デフォルトの名無しさん
2009/11/30(月) 15:37:50基礎を理解しておくと数学的に無理なことをやろうとしたりとか無駄に
悩まなくてよくなるのでお勧め。
0637デフォルトの名無しさん
2009/11/30(月) 16:21:110638デフォルトの名無しさん
2009/12/02(水) 06:48:07自信がないのでお願いします。たぶん Perl です。
^\w*[a-zA-Z0-9]\w*$
0639デフォルトの名無しさん
2009/12/02(水) 08:20:420640デフォルトの名無しさん
2009/12/02(水) 09:19:26そもそも\wは[a-zA-Z0-9_]じゃないんだが
0641デフォルトの名無しさん
2009/12/02(水) 11:35:49○ 1行内に、1文字以上の、空白を含まない英数単語のみ ^[0-9A-Za-z_]+$ であればマッチする、
○ 但しアンダーラインのみ ^_+$ の連続は単語ではない。
正規表現はPerlの機能の一部として含まれる。すなわち、Perlには正規表現の機能が入っている。
正規表現で出来なくてもPerlなら出来る。
0642デフォルトの名無しさん
2009/12/02(水) 12:35:03$str="aa(bb)cc";
$ptn="aa(bb)cc";
のとき、
$str=~/$ptn/;
みたいな書き方でマッチさせたいんですが括弧が邪魔して無理でした。
$strと$ptnの内容は上記のままで、正規表現でマッチさせるにはどう書けば良いのでしょうか?
0643デフォルトの名無しさん
2009/12/02(水) 12:40:54そういうのはperlのスレで聞けよ。
$quoted_ptn = quotometa($ptn);
$str =~ /$quoted_ptn/
または
$str =~ /\Q$ptn\E/
0644デフォルトの名無しさん
2009/12/02(水) 12:42:56quotemetaが正解
0645デフォルトの名無しさん
2009/12/02(水) 12:51:49いけました。
どうもすいませんでした。
そして、ありがとうございました。
0646427
2009/12/03(木) 21:59:36●正規表現の使用環境
秀丸7.11 HMJRE.DLL1.92
●検索か置換か?
検索
●説明
改行(空行)に挟まれたaだけを検索したい
●対象データ
a
a
a
●希望する結果
a ←これだけマッチしてほしい
a
a
0647デフォルトの名無しさん
2009/12/03(木) 22:00:06(?<=\n\n)a(?=\n\n)
(?<=^$)a(?=\n\n)
バラして試したところ、どうも後方一致で改行は認識してくれるみたいですが、前方一致では改行はダメのようです。
(?<=\n\n)a ←ダメ
(?<=\n)a ←ダメ
a(?=\n\n) ←OK
そこで知りたいのは、
前方一致で改行を使えないのは仕様でそうなっているからでしょうか?そうした記載を見つけることが出来ませんでした。
また改行(空行)に挟まれた文字を検索する方法がありましたらぜひお教えください。
0648デフォルトの名無しさん
2009/12/03(木) 22:22:43前方一致って look-behind のこと指して言ってんの?
それはともかく、秀丸は改行絡みの扱いが弱いから制限事項でない?
0649デフォルトの名無しさん
2009/12/03(木) 22:33:51マッチして欲しいaが空行に挟まれてないじゃん
0650デフォルトの名無しさん
2009/12/03(木) 23:42:48前方一致は秀丸で使われている独自用語。一般用語では648のとおり。
0651デフォルトの名無しさん
2009/12/03(木) 23:50:50こういう文字列を
(a b)と(c d e)に分割する事って出来ませんか? 出来ればrubyでお願いします
0652650
2009/12/03(木) 23:52:40(?#fulllinematch)\n\n(a)\n\n(?\1) だ
0653デフォルトの名無しさん
2009/12/04(金) 00:46:20([^\(]+)
(\)+)
/x
"(a b)(c d e)" .scan(r).map do |m|
puts m.to_s
end
0654デフォルトの名無しさん
2009/12/04(金) 00:51:04追加で悪いんですが・・・
"(a b)(c (d e))" もし、こういうネスト構文になった場合
正規表現での分割は無理でしょうか?
(a b)
(c (d e))
0655デフォルトの名無しさん
2009/12/04(金) 02:39:38全ての場合に対応するのは無理
0656646
2009/12/04(金) 07:03:25ありがとうございました。
なんか最新βからfulllinematchなるものが使えるようになったみたいですね。
実にタイムリーでした。
おまけに (?<=\n\n)a を実行すると「前方一致では改行文字は使えません」なメッセージも表示するようになっていました。
で、「前方一致」って秀丸独自だったんですね。以後注意します。
0657デフォルトの名無しさん
2009/12/04(金) 20:12:15を少し改良してみて
p "(a b)(c d e)test".scan(/(\([^\(]*\))/)
こうなったんですが
何故^\(を[]で囲わなきゃいけないんでしょうか?
↓のようにかいても意味は同じだと思うんですが動かないんです。かき方が違うんでしょうか?
p "(a b)(c d e)test".scan(/(\(^\(*\))/)
p "(a b)(c d e)test".scan(/(\(.*\))/)
0658デフォルトの名無しさん
2009/12/04(金) 20:24:08たとえば [^\(] の場合、( 以外の任意の一文字、という意味になる。
0659デフォルトの名無しさん
2009/12/04(金) 20:34:02^この否定は[]の中でしか使えないんですかね
(a b)と(c d e)に分割するには/(\([^\(]*\))/これが最小コードとなるんでしょうか?
あと>>653さんのかいた//x のxの意味もよくわからず消してしまったんですが、xをつけると何が変わるんでしょう?
0660デフォルトの名無しさん
2009/12/04(金) 21:00:25[]の中の(はエスケープいらんだろう。
>>659
オマエはマニュアル読むって頭を持ってないのか?
0661デフォルトの名無しさん
2009/12/04(金) 21:20:50だって、早く簡単にわかるならそのほうがいいじゃないですか。
0662デフォルトの名無しさん
2009/12/04(金) 23:11:590663デフォルトの名無しさん
2009/12/04(金) 23:52:52//xについての記述はぐぐりにくいので見つけられなかったです
0664デフォルトの名無しさん
2009/12/05(土) 00:03:30| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| |
| |
/  ̄ ̄ ̄ ̄ /
/ ぶち殺すぞ /
/ /
/ /
/ ____ /
/ /
/ /
0665デフォルトの名無しさん
2009/12/05(土) 00:05:302chはいつから喰わず嫌いをはじめたのか、質問したい
次の方どうぞ
0666デフォルトの名無しさん
2009/12/05(土) 11:36:210667デフォルトの名無しさん
2009/12/05(土) 12:02:560668デフォルトの名無しさん
2009/12/11(金) 15:49:190669デフォルトの名無しさん
2009/12/15(火) 18:46:12otbedit(http://www.hi-ho.ne.jp/a_ogawa/otbedit/index.htm)というエディタです。
(emEditorでは行をまたいだ置換がうまくいかずotbeditに変えました。使えればソフトにはこだわりません)
Perl互換の拡張正規表現が使えるとのことですが、詳しい説明が書いておらずわかりませんでした。
●検索か置換か?
置換
●説明
特定の文字列の間にある空でない文字列の最後に任意の文字列を加えること
(例では@Bと@Aの間にある空でない文字列の最後にaを付け加えたい。できればそれから@Aと@Bは除外したい)
【@B(.|[\r\n])*?@A】で全体から特定の範囲を指定した後で
【[^\n]+$】→【$&a】の置換の繰り返しで可能ではありましたが、数が多いのでできれば一括で置換したいです。
●対象データ
@A
あいうえお
@B
かき
っくけこ
さしす
@A
せそたち
つてと
@B
なにぬね
のは
@A
ひふへほ
0670デフォルトの名無しさん
2009/12/15(火) 18:49:00@A
あいうえお
@Ba
かきa
っくけこa
さしすa
@Aa
せそたち
つてと
@Ba
なにぬねa
のはa
@Aa
ひふへほ
↑できれば@Aや@Bにaをつけたくはありません
0671デフォルトの名無しさん
2009/12/16(水) 04:39:290672デフォルトの名無しさん
2009/12/21(月) 01:54:38BOOST使いづらすぎる
0673デフォルトの名無しさん
2009/12/21(月) 02:34:550674デフォルトの名無しさん
2009/12/21(月) 04:07:230675デフォルトの名無しさん
2009/12/21(月) 14:59:110676デフォルトの名無しさん
2009/12/21(月) 15:27:520677デフォルトの名無しさん
2009/12/21(月) 17:04:490678デフォルトの名無しさん
2009/12/22(火) 18:28:130679デフォルトの名無しさん
2009/12/22(火) 19:27:410680デフォルトの名無しさん
2009/12/22(火) 22:41:420681デフォルトの名無しさん
2009/12/22(火) 23:06:52置換を自力で実装するの面倒なんで代わりにbregonig.dllとか使うんだけど
文字コードsjisしか使えなくて勿体無いあああってなる
0682デフォルトの名無しさん
2009/12/25(金) 19:56:08perl5.8.7 CentOS 5.3
文字コードはEUCです。
●検索か置換か?
置換
●説明
全銀テレ為替文字対応のため、数字、大文字英字、半角カナ・濁点、一部半角記号記号のみの文字列に
変換したいのです。
可能文字はこちら
ttp://www.kyodocms.jp/qanda/qa18.htm
これら以外の文字を半角スペースに置き換えたいのです。
●対象データ
任意の文字列です。
1.ひらがな→カタカナ変換
2.全角→半角変換
3.英小文字→英大文字変換
4.ァィゥェォッャュョをアイウエオツヤユヨに変換
ここまで出来てて、入力可能文字以外をスペースに置き換えたいんですが、上手くいきません。
どうすればいいでしょうか?
0683デフォルトの名無しさん
2009/12/25(金) 20:29:25を
に置換
あってるかどうかは試してないけどこういうこと?
0684デフォルトの名無しさん
2009/12/25(金) 22:49:43レスどうもです。そのとおりです。
>>682の条件を変数$regExpに代入し、
$result = 'パ-カ-ヲ買ツタ01234567';
$result =~ s/$regExp/ /g;
とすると、漢字だった部分が文字化けし、「パ-カ-ヲ ・糟・1234567」となってしまいます。
結果は「パ-カ-ヲ ツタ1234567」にしたいのです。
0685デフォルトの名無しさん
2009/12/26(土) 00:05:51文字の正規表現
http://www.din.or.jp/~ohzaki/perl.htm#Character
0686デフォルトの名無しさん
2009/12/26(土) 00:26:46<div id=・・・>←1
<div id=・・・>
</div>←2
<div id=・・・>
</div>←3
</div>←4
抜き出したいのは1から4全体なんですけど
"<div id=・・・(.+?)</div>
で非欲張り系で抜き出すと1から2までヒットします。
1から4全体を抜き出す方法ていうのはないのでしょうか?
XML形式ならいけるぽいのですが・・・
無理なのでしょうか?
0687デフォルトの名無しさん
2009/12/26(土) 01:52:000688デフォルトの名無しさん
2009/12/26(土) 08:16:390689デフォルトの名無しさん
2009/12/26(土) 12:19:49テンプレに入れてもいいレベルのFAQ。
0690デフォルトの名無しさん
2009/12/27(日) 02:55:210691デフォルトの名無しさん
2009/12/28(月) 18:29:47phpなんですけど
preg_splitで例えば
A,B,C,'D,E',F
を
[0]=A
[1]=B
[2]=C
[3]=D,E
[4]=F
上記のように分割できますか?
0692デフォルトの名無しさん
2009/12/28(月) 18:34:350693デフォルトの名無しさん
2009/12/28(月) 19:36:26詳説 正規表現 にCSV処理のサンプルあるよ。オヌヌメ
0694デフォルトの名無しさん
2009/12/30(水) 15:29:52Java1.5(Firefox 3.0.16)
●検索か置換か?
検索
●説明
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jpという文字列を検索したいです。
※検索対象の文字列自体が正規表現のようになっています。
●対象データ
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp
●希望する結果
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
※完全一致
自分なりに\を付けたりして試してみたのですが出来ませんでした。
以上、どうかよろしくお願いします。
0695デフォルトの名無しさん
2009/12/30(水) 17:02:17"\\\\\\.nas\\(3\\|5\\)\\\\d\\+\\\\\\.\\[a\\-z\\\\\\-\\]\\+\\\\\\.nttpc\\.ne\\.jp"
となる
0696デフォルトの名無しさん
2009/12/31(木) 10:01:19694です。
どうもありがとうございました。
すごく長い表現になっちゃうんですね。(汗
0697デフォルトの名無しさん
2009/12/31(木) 15:49:42度々すみませんが、よろしくお願いします。
●正規表現の使用環境
Java1.5(Firefox 3.0.16)
●検索か置換か?
検索
●説明
#ipbf\d+souka.saitama.ocn.ne.jp という文字列を検索したいです。
//マッチする
var body = document.body.innerHTML;
var temp1;
temp1 = new RegExp(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
alert(temp1.test(body));
//マッチしない
var body = document.body.innerHTML;
var word = new Array();
var temp2;
word.push('#ipbf\\d\+souka.saitama.ocn.ne.jp');
for (var i = 0; i < (word.length); i++)
{
temp2 = new RegExp(word[i]);
alert(temp2.test(body));
}
●対象データ
#ipbf\d+souka.saitama.ocn.ne.jp
●希望する結果(※完全一致)
#ipbf\d+souka.saitama.ocn.ne.jp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
「//マッチしない」方の配列内容を変えずに(\を追加せずに)一致させたいです。
以上どうか、よろしくお願いします。
0698デフォルトの名無しさん
2009/12/31(木) 16:25:290699デフォルトの名無しさん
2009/12/31(木) 22:01:43word.push(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
0700デフォルトの名無しさん
2009/12/31(木) 22:38:39JavaじゃなくてJavaScriptでしょ?それなら>>695は正規表現リテラルでこう書ける
/\\\.nas\(3\|5\)\\d\+\\\.\[a\-z\\\-\]\+\\\.nttpc\.ne\.jp/
0701デフォルトの名無しさん
2010/01/02(土) 16:48:00>>699
>>700
返事が遅くなりすみません。
レスありがとうございます。
体調が悪くまだよく試していないのですが、まずはお礼だけで失礼します。
0702デフォルトの名無しさん
2010/01/03(日) 22:07:340703デフォルトの名無しさん
2010/01/03(日) 23:16:48説明するの大変なんだよな・・・。
0704デフォルトの名無しさん
2010/01/03(日) 23:32:15VB触ってるのは底辺だけなんだから
0705デフォルトの名無しさん
2010/01/03(日) 23:55:380706デフォルトの名無しさん
2010/01/04(月) 01:36:20ピコピコのことか?
0707デフォルトの名無しさん
2010/01/04(月) 13:05:34知人が20万円ほど出してPC-98を買ったら
姉に「たっかいファミコンやなぁ」と言われたらしい。
0708デフォルトの名無しさん
2010/01/05(火) 12:45:41Java1.5
●検索か置換か?
検索
●説明
123456700 とか12345678-00など
7桁から10桁の数字にあと2桁の数字がハイフンもしくは連続して付属する数列の検索。
数列の直前にCodeまたはInvoiceがついてたら除外する。
Invoice 12345678-00 はマッチしないけどaccess# 12345678-00 はマッチする。
"On Invoice 123446789, your order was placed. However, please be sure to note that your account number 789456123 is suspended until further notice."
最初の番号Invoice 123446789は無視するけどaccount number 789456123はマッチするようにしたい。
●対象データ
Invoice 123446789
word 454545454
454545454545
Code: 4085432259
passcode 6789012 06
number 8901234 08
word 454545454 word
●希望する結果
マッチしない
Invoice 123446789
Code: 4085432259
passcode 6789012 06
Code 7890123-07
^(?!(Code|Invoice).)([^=\/%(.]\b\d{7,10}((\d?\d?)|(-\d\d))?\b)
自分でここまでやったけどうまく動かないです。
よろしくお願いいたします。
0709デフォルトの名無しさん
2010/01/05(火) 13:09:16忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode,
Invoiceがないことを確認する方がたぶん楽だと思うよ。
0710デフォルトの名無しさん
2010/01/05(火) 13:09:29忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode,
Invoiceがないことを確認する方がたぶん楽だと思うよ。
0711デフォルトの名無しさん
2010/01/05(火) 13:10:130712デフォルトの名無しさん
2010/01/05(火) 14:16:100713デフォルトの名無しさん
2010/01/05(火) 14:30:07そしてlook-behindはたいていある決まった長さのの文字列に
マッチするパターンがしか使えないので、
(?<!Invoice: )(?<!Invoice )(?<!Code: )(?<!Code )
のように並べて使うことになるだろう。
必要な仕様がきちんと書かれてないのでこれだというのは
示せないけどがんばれ。
0714デフォルトの名無しさん
2010/01/05(火) 14:51:49VB.NET
●検索か置換か?
検索
●説明
タブを含む何かの文字列の複数行を表す方法を教えて
●対象データ
AAAA
TAB TAB hogehoge改行
あああああ
TABT ABT AB hogehoge改行
TAB TAB hogehoge改行
ZZZZ
●希望する結果
あああああ
Regex("AAAA\n([\t.]+?\n)+(?<1>.+?\n)([\t.]+?\n)+ZZZZ",MultiLine)
上のように書いてみましたがだめでした。
AAAA改行とZZZZの間の文字列をターゲットにしつつ
その中にタブか何かの文字の組み合わせの文字列が1つ以上あって、行末に改行がある
という行がいくつかある。
ということを書いたつもりなのですが間違っているところを教えて頂きたいです。
0715デフォルトの名無しさん
2010/01/05(火) 15:06:04また、〜+?とは普通書かないね。〜*と同じなので。
\tが少なくとも一つ含まれた行にマッチさせたいなら、
.*\t.*\n
0716デフォルトの名無しさん
2010/01/05(火) 15:09:310717デフォルトの名無しさん
2010/01/05(火) 15:12:27同じになるっていいたいんじゃねーの?
0718デフォルトの名無しさん
2010/01/05(火) 15:48:200719デフォルトの名無しさん
2010/01/05(火) 16:31:59\d? とかの ? と同じものに見えてるのかな。
0720デフォルトの名無しさん
2010/01/05(火) 22:00:58[\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。
0721デフォルトの名無しさん
2010/01/10(日) 22:09:28正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が
使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。
{n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。
どう考えても {n} と {n}? は同じ結果になるように思えるのです。
正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた
{n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。
どなたか解説していただければ幸いです。よろしくお願いします。
記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。
0722デフォルトの名無しさん
2010/01/10(日) 22:36:48ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
>a{n}? = ちょうどn回の繰り返しにマッチします。ちょうどn回なので、a{n}と等価であり、一貫性のためだけに存在します。
要するに/x{1}/の意味を問うているようなもん
0723デフォルトの名無しさん
2010/01/11(月) 12:53:43的確な回答ありがとうございます。
>googleに頼り切ってるヤツの弱点に見えるけどなぁ
検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると
目が節穴になるぞ、というお叱りと理解いたしました。
☆perlretut - Perl の正規表現のチュートリアル
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
これは>>2の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。
答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。
このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。
結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。
やはりPerlだと細かい情報もしっかりあってスゴイです。
これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。
0724デフォルトの名無しさん
2010/01/11(月) 15:57:50それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら
man perlretut を実行すると表示されるよ。
ウェブを見るより先にマニュアルを読めってことで。
0725デフォルトの名無しさん
2010/01/11(月) 16:31:29なんか訳が微妙におかしいけど。
http://msdn.microsoft.com/ja-jp/library/3206d374(VS.80).aspx
0726723
2010/01/12(火) 22:05:22UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。
Javascriptで使える表現かどうかは、以下を見てチェック。
☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center
ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp
出来るだけ大本の公式情報を参照すべし、ですね。
>>725
情報ありがとうございます。間違ってはいませんが、確かに変ですねぇ。
perlretut、面白いですね−。塩基配列のストップコドンのとことか。
自習してみて、チュートリアルと同じ結果になるのを確認したのはいいのですが…
Javascript:var R=/(\w\w\w)*?TGA/g, S='ATCGTTGAATGCAAATGACATGAC', A = [], I = 0; while(R.test(S)) {A[I] = RegExp.lastMatch + ' (' + RegExp.lastParen + ') Pos=' + R.lastIndex; ++I;} alert(A.join('\n\n'));
なぜずれるのか、理解できず…。その後バックトラックの動作を知り、単に「必ず3文字ずつ進む」と
思い込んでただけだと気付きました。。。マッチにトライして失敗したらそこで終わりではなく、
開始位置を1文字進めるんですね。筆者が仕掛けた罠に見事にハマりました。。。
というか、こういう処理は素直に3文字ずつ取り出して判定すべきですよね。
なお、Javascriptには\Gなんてありませんでした。残念!
0727デフォルトの名無しさん
2010/01/13(水) 21:03:05man じゃなくても perldoc perlretut でいけるよ。
0728デフォルトの名無しさん
2010/01/15(金) 16:56:04MSDNライブラリは機械翻訳だからしかたないべ
0729デフォルトの名無しさん
2010/01/18(月) 02:35:24を並び替える所で詰みました。
↓↓↓↓↓
LESSON1 1. water
2. autumn
3. city
4. (Not at all.)
5. This is (what) think.
6. (What if) he's not there?
7. I've never (met him).
8. Look (at her).
9. water
10. matter
LESSON2 以下L10まで続く
と並び替える方法をご教授ください。
(\d{1,2}\.).+(?=\d{1,2})こんな汚いソースでは動きませんでした(;;)
昔よくいじってたんだが、これでは自信なくしてしまいますね。。
0730デフォルトの名無しさん
2010/01/18(月) 02:45:28コレクションか配列にぶち込んで数値扱いでsortするだけじゃないのか
0731デフォルトの名無しさん
2010/01/18(月) 20:34:54Javascript(たぶん1.5?Firefox3.5以降で動かしたいです)
●検索か置換か?
検索
●説明
直前に限らず前方にhugaまたはpiyoがない場合のhogeにマッチさせたいんですが
どうすればいいですか?
〜以外、とか〜が続かない場合、とか
[^xyz]やx(?!y)がありますが
複数の一まとまりの単語が前にない場合
ってどうすればいいのかなと
あと
piyoaaaaahoge
と同じ文字の繰り返しじゃなく
piyoaiueohoge
といろんな文字(数字や記号も)が複数挟まる場合も
どうすればいいのかわからず
0732デフォルトの名無しさん
2010/01/18(月) 21:56:520733デフォルトの名無しさん
2010/01/18(月) 22:17:47自分は勉強中なので演習がてら作ってみました。
/(LESSON\d+ +)?[^ ].*?(?= +(\d+\. |LESSON\d+ |$)|$)/g
一応、区切りと途中のスペースはいくつ入っても可としました。
1行目だけ「LESSON1 1. water 」で、かつ「LESSON2 以下L10まで続く」という文章にもマッチ
させなければならないのが面倒でしたが、x(?=y) 肯定的前方先読みの良い題材になりました。
ところで、、、「LESSON2 以下L10まで続く」という文章はデータ中に必要だったんですか??
以下はついでに試作しました。
■汎用的に「数字. 」で区切る、冒頭保存
/[^ ].*?(?= +(\d+\. |$)|$)/g
■汎用的に「数字. 」で区切る、冒頭は捨てる
/\d+\. .*?(?= +(\d+\. |$)|$)/g
0734731
2010/01/18(月) 22:37:06どうもありがとうございます
.*って
aaaaiiiiuuuueeeeooooってあったら
最初に見つけた文字(この場合a)の繰り返しにマッチするんだと思ってました
つまりaaaaだけにマッチするんだとばかり
hugaまたはpiyoが先頭じゃないかも知れない場合もそのままでマッチしますか?
^.*(?!huga|piyo)〜とかに改変?
0735デフォルトの名無しさん
2010/01/18(月) 22:47:00どうでもいいことですが、Firefox3は、以下によると JavaScript 1.8 のようですよ。
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/About
0736デフォルトの名無しさん
2010/01/19(火) 16:22:27php、ruby、.netなら知ってるんだけど。
0737デフォルトの名無しさん
2010/01/19(火) 16:43:16アドレスバーに直で入れたっていいし
0738デフォルトの名無しさん
2010/01/20(水) 00:46:10http://regexpal.com/
http://www.gethifi.com/tools/regex
http://jsregex.com/
0739デフォルトの名無しさん
2010/01/20(水) 14:29:46/^((?!huga|piyo).)*hoge/
0740デフォルトの名無しさん
2010/01/22(金) 18:00:350741デフォルトの名無しさん
2010/01/22(金) 18:28:160742デフォルトの名無しさん
2010/01/25(月) 20:34:01php 5.3のpreg_replace
●検索か置換か?
置換
●説明
$var['var1'] = "value1";
$str = "%var1%var1%var1%";
$ptn = わからん;
$str = preg_replace($ptn,$var['var1'],$str);
echo $str;
期待する結果
→value1varvalue1
要するに%なんたら%を変数として扱って、
連想配列から引っ張ってきたいんですが、
うまく%の対応を表現することができません。どのような正規表現を使えば良いんでしょうか?
0743デフォルトの名無しさん
2010/01/25(月) 20:50:11$str = preg_replace($ptn,'$var[$1]',$str);
value1var1value1になるけど。
0744デフォルトの名無しさん
2010/01/25(月) 21:16:14'$var[$1]'
これ普通に思いつかなかった。ありがとう。できた。
0745デフォルトの名無しさん
2010/01/28(木) 00:22:28PHP
●検索か置換か?
検索
●説明
大量の文字データの中から「マンコ」という文字列をMATCHさせたい。
ただし、「イマンコ」「マンコア」「ウルトラマンコスモス」「アパマンコーポ」を含む文字列はMATCHさせない。
●テストケース(文字列)と期待する結果(MATCHするかしないか)
マンコ MATCHする
オマンコ MATCHする
マンコー MATCHする
ウルトラマンコ MATCHする
マンコスモス MATCHする
アパマンコ MATCHする
マンコーポ MATCHする
イマンコ MATCHしない
マンコア MATCHしない
イマンコア MATCHしない
ウルトラマンコスモス MATCHしない
アパマンコーポ MATCHしない
●試した正規表現
(?<!イ)((?<!ウルトラ)((?<!アパ)マンコ|マンコ(?!ーポ))|((?<!アパ)マンコ|マンコ(?!ーポ))(?!スモス))(?!ア)
●質問内容
上記の正規表現で、期待する結果は得られたのですが、どうも長ったらしく、スッキリしません。
もし、「ウルトラマンコスモス」や「アパマンコーポ」のように、真ん中に対象文字列ありで除外したい文字列がどんどん増えていったとしたら非常に面倒な気がします。
もっとコンパクトに短く効率的に書けたりするなど、いい案はございますでしょうか?アドバイスをいただけると幸いでございます。
0746デフォルトの名無しさん
2010/01/28(木) 01:04:480747デフォルトの名無しさん
2010/01/28(木) 10:48:44例外を先に弾いてしまうのが一番楽だろうが
そんなのは正規表現スレで言っていい発言ではないしな
0748デフォルトの名無しさん
2010/01/28(木) 10:54:36スレで質問がでるようなのはたいてい不向きな問題w
0749デフォルトの名無しさん
2010/01/28(木) 13:40:43●説明
大量の文字データの中から「新宿」という文字列をMATCHさせたい。
ただし、「西新宿」「新宿駅」「東京都新宿区」「西武新宿線」を含む文字列はMATCHさせない。
●テストケース(文字列)と期待する結果(MATCHするかしないか)
新宿 MATCHする
湘南新宿 MATCHする
新宿御苑 MATCHする
東京都新宿 MATCHする
新宿区 MATCHする
西武新宿 MATCHする
新宿線 MATCHする
西新宿 MATCHしない
新宿駅 MATCHしない
西新宿駅 MATCHしない
東京都新宿区 MATCHしない
西武新宿線 MATCHしない
●試した正規表現
(?<!西)((?<!東京都)((?<!西武)新宿|新宿(?!線))|((?<!西武)新宿|新宿(?!線))(?!区))(?!駅)
●質問内容
上記の正規表現で、期待する結果は得られたのですが、どうも長ったらしく、スッキリしません。
もし、「東京都新宿区」や「西武新宿線」のように、真ん中に対象文字列ありで除外したい文字列がどんどん増えていったとしたら非常に面倒な気がします。
もっとコンパクトに短く効率的に書けたりするなど、いい案はございますでしょうか?アドバイスをいただけると幸いでございます。
●補足
「事前にif文などで、MATCHさせたくないワードを除外する」ということは諸事情によりできません。
たった一つの正規表現で表すことが絶対条件です。
0750デフォルトの名無しさん
2010/01/28(木) 14:16:500751デフォルトの名無しさん
2010/01/28(木) 14:24:46西新宿|新宿駅|西新宿駅|東京都新宿区|西武新宿線|新宿
にマッチさせて、結果が "新宿" 以外の物を弾け
と言えば正規表現スレらしい発言になるぜ。
>>749の条件には合わなさそうだけどな。
0752デフォルトの名無しさん
2010/01/28(木) 14:40:15新宿(?<!西新宿)(?!駅)((?<!東京都新宿)|(?!区))((?<!西武新宿)|(?!線))
俺も>>751の方がいいと思うけどな
何か我々の与り知らぬ事情があるんだろう
0753デフォルトの名無しさん
2010/01/28(木) 17:26:43sを含むがTの要素を含まない文字列にマッチする正規表現を求めるプログラムを
書いてしまうのがいいのではないだろうか。と思ったが結構難しいな...
0754デフォルトの名無しさん
2010/01/28(木) 18:12:02○○を含まない正規表現 を求めるプログラムならあるから
それをベースにすればある程度簡単にいけそうだ。
0755デフォルトの名無しさん
2010/01/28(木) 19:05:50これは目から鱗
MATCHさせたくないワードに「○○新宿△△」を追加したいときは
単純に正規表現に
((?<!○○新宿)|(?!△△))
を追加すればいいわけか
0756デフォルトの名無しさん
2010/01/28(木) 23:29:04その正規表現はどの正規表現エンジンの構文なの?
0757デフォルトの名無しさん
2010/01/28(木) 23:37:07多分 Perl 互換なんで PCRE とかじゃね?
0758デフォルトの名無しさん
2010/01/28(木) 23:46:410759デフォルトの名無しさん
2010/01/29(金) 00:03:04そういうときは>>2の最初のサイトが便利
0760749です
2010/01/29(金) 02:40:15ありがとうございます!
まさに求めていたご回答です。
カスタマイズ性にも優れ、大変勉強になりました。
0761デフォルトの名無しさん
2010/01/29(金) 11:18:44ないし
新宿メソッドと命名しよう
0762デフォルトの名無しさん
2010/01/29(金) 12:55:280763デフォルトの名無しさん
2010/01/29(金) 13:09:030764デフォルトの名無しさん
2010/01/29(金) 17:28:13これは便利だな。新宿パターンとでも呼べばいいのか
0765デフォルトの名無しさん
2010/01/29(金) 23:33:290766デフォルトの名無しさん
2010/01/29(金) 23:46:14だと思う。
0767デフォルトの名無しさん
2010/01/30(土) 09:19:580768デフォルトの名無しさん
2010/01/30(土) 09:23:59トランプもゲームもやったことあるけど、面白さが分からなくて
友達いなくなった。
0769sage
2010/01/30(土) 13:05:58そして悟りを開くのだ...
0770デフォルトの名無しさん
2010/01/30(土) 13:36:33詳説 正規表現
tp://www.oreilly.co.jp/books/4873111307/
0771デフォルトの名無しさん
2010/01/30(土) 15:06:520772デフォルトの名無しさん
2010/01/30(土) 15:46:21"<"にはマッチするが"<<"にはマッチしない、その逆の
">"にはマッチするが">>"にはマッチしないという部分
がうまくいっていないようなんです。
どう記述すればいいですか?
"(!=|==|<[^<]|>[^>]|<=|>=)"
0773デフォルトの名無しさん
2010/01/30(土) 17:01:26[^<]<[^<]|[^>]>[^>]
じゃだめ?
0774デフォルトの名無しさん
2010/01/30(土) 17:16:58否定の文字クラス[^...]は、'...'以外の一文字にマッチするので
'[^<]<[^<]'だと、例えば単独の '<' や '<=' にマッチしないのだが、これはいいのかな。
0775デフォルトの名無しさん
2010/01/30(土) 17:28:180776デフォルトの名無しさん
2010/01/30(土) 17:34:18比較演算子ならかなりの確立で "x>y" みたいな比較をすると思う。
計算が長くなって改行したとしても必ず、
"x
<
y"
という形になるから、改行を文字として考慮していれば問題ないと思う。
単独の文字として"<"にマッチングさせるなら、なら先読み後読みを使う必要があるけども。
0777デフォルトの名無しさん
2010/01/30(土) 17:38:17ああ、比較演算子にマッチさせるのか。忘れてた。
でも必ず題意を満たすかどうかは保証できないけど、何をやりたいかにもよるのかな。
0778デフォルトの名無しさん
2010/01/30(土) 18:17:03いちおう演算子の途中で改行がはいることはないという前提です。
でもシフト演算子はあるので、A << B ではアンマッチで、 A < B や
A <= B はマッチするというのが希望です。
0779デフォルトの名無しさん
2010/01/30(土) 18:19:09>>773 の方法でうまくマッチしてくれるようです。
ありがとうございました。
0780デフォルトの名無しさん
2010/01/30(土) 20:58:250781デフォルトの名無しさん
2010/01/30(土) 21:07:31で、うまくいったような。
0782デフォルトの名無しさん
2010/01/30(土) 21:14:03それを言い始めたら収集がつかなくなると思うんだが。
そもそもそれは先読み後読みを使っても生じる問題。
0783デフォルトの名無しさん
2010/01/30(土) 23:03:24(正規表現でマッチさせるのは手段)
0785デフォルトの名無しさん
2010/01/31(日) 14:42:07順子の表現が思いつかない。
0786デフォルトの名無しさん
2010/02/01(月) 02:02:390787デフォルトの名無しさん
2010/02/01(月) 02:43:300788デフォルトの名無しさん
2010/02/01(月) 10:06:130789デフォルトの名無しさん
2010/02/01(月) 14:11:41どうすればいいでしょうか
語単位で使いたいです
William & John (William と John を両方含む)みたいな感じで
0790デフォルトの名無しさん
2010/02/01(月) 14:23:34\bWilliam\b.*\bJohn\b|\bJohn\b.*\bWilliam\b
こんな感じ?
0791デフォルトの名無しさん
2010/02/01(月) 14:47:050792デフォルトの名無しさん
2010/02/01(月) 14:50:44そうですそんな感じですありがとうございます
でもそれタイプするの大変そうですね
0793デフォルトの名無しさん
2010/02/01(月) 16:04:27タイプが楽になる。
0794デフォルトの名無しさん
2010/02/01(月) 16:15:50それ頂きます
0795デフォルトの名無しさん
2010/02/01(月) 17:56:570796デフォルトの名無しさん
2010/02/02(火) 03:29:120797デフォルトの名無しさん
2010/02/02(火) 07:17:500798デフォルトの名無しさん
2010/02/03(水) 12:17:590
0
1
2
3
0
0
0
4
5
6・・・・
と続く文字列を0を残したまま
0
0
0
1
2
3
0
0
0
456
と抜き出すにはどううればよいでしょうか?
0は最低1桁あり上は5個です
000000 などは存在せず
最低は 01 になります
0799デフォルトの名無しさん
2010/02/03(水) 12:20:36こちらです
000123000456・・・・
と続く文字列を0を残したまま
000123
000456
と抜き出すにはどううればよいでしょうか?
0は最低1桁あり上は5個です
000000 などは存在せず
最低は 01 になります
0800デフォルトの名無しさん
2010/02/03(水) 12:25:40replace ==> $1\n0
about 1024 ?
0801デフォルトの名無しさん
2010/02/03(水) 12:25:570802デフォルトの名無しさん
2010/02/03(水) 12:30:49確かに途中に0を考慮してませんでした
>>801
ありがとうございます
となると
0+[1-9][0-9]+[1-9]
あ、これじゃあ桁数が少ないとだめか・・・
0803デフォルトの名無しさん
2010/02/03(水) 13:19:06802じゃないけど勉強になりました。ありがとうございます
0804デフォルトの名無しさん
2010/02/03(水) 15:00:15●と■だけを抜き出して$aと$bにそれぞれ代入したいのですが、どのようにやればよいでしょうか
PHP5
0805デフォルトの名無しさん
2010/02/03(水) 15:27:10・途中の0: 0103 01と03にするのか、0103にするのか
・末尾の0: 0110021 どこが最初の数字の末尾になるのか
Windows XP, Python 2.6
Windows XP, Boost.Regex
Windows XP, Boost.Xpressive
のうちどれでも可です。
●検索か置換か?
検索
●説明
C++言語のコメントを過不足無く検出できる正規表現
●対象データ
C++ソースコード, ヘッダーファイル
(中身を全て一つの文字列(target_str)として取得しています。
target_strは全ての行を取得し、行間に\nを挿入してつなげた形となっています。)
●希望する結果
コメントを検出できること。
C++言語のコメントに一致するPython正規表現を書いてくださいませんでしょうか?
コメントは // と /* */ とからなりますが、厳密には
C++言語は>>806の様なコメントの扱いをします。
var = 42; // comment
2. /*と*/で囲むと、複数行コメントになります。
/*comment*/
aaaコメントでない
/*comment
comment
comment
*/
3. コメントの入れ子については
C++言語では基本的に前から見ていくので、最初に出現したコメントが優先されます。
(//を無条件で優先するというようなことはありません。)
従って
/* foo // bar */
foobar */
は最初の/*を見た瞬間から*/が出現しない限り全て無視する(コメント扱いする)こととなります。
よってC++言語では//を見ても何とも思わずコメント扱いを続け、
その後最初に */を見た瞬間にコメント扱いを終了します。
よって foobar までコメントになるのでははなく、
/* foo // bar */だけがコメントとなりfoobar */の部分はコメントでないことにとなります。
4. 文字列リテラルの扱い
C++言語では "" で挟まれた物を文字列として扱います。
"コメントでない"//comment
5. コメントと文字列の入れ子について
C++言語では3.と同様に、最初に出現したものを優先します。
0809 ◆Qn5tuAIkhk
2010/02/07(日) 16:32:51// comment /*
foo コメントでない
// comment */
foo /*
comment
// comment */
// comment /*
foo コメントでない
foo */ これはコメントでない
"// foo" コメントでない
// "comment" コメントである
/* "comment" コメントである
comment
// comment */
foo コメントでない
"/*" コメントでない
foo コメントでない
// comment */
0810デフォルトの名無しさん
2010/02/07(日) 16:34:08自己解決しました。
0811デフォルトの名無しさん
2010/02/07(日) 16:35:17死んでしまえばいいのになぁ
0812デフォルトの名無しさん
2010/02/07(日) 17:42:020813810
2010/02/07(日) 18:00:01# そういえば、ふくろう本にサンプルあった気がするけどな。
0814デフォルトの名無しさん
2010/02/07(日) 22:03:00という結論になっている。
>>813
> # そういえば、ふくろう本にサンプルあった気がするけどな。
いや、アレは全然だめ。
複数行コメントに対応してないから。
0815デフォルトの名無しさん
2010/02/07(日) 22:11:410816デフォルトの名無しさん
2010/02/07(日) 23:10:470817デフォルトの名無しさん
2010/02/07(日) 23:33:25C++のコメントってネストできたっけ
0818デフォルトの名無しさん
2010/02/07(日) 23:35:36>>809
0819デフォルトの名無しさん
2010/02/07(日) 23:46:560820デフォルトの名無しさん
2010/02/08(月) 21:33:43>>809
0822デフォルトの名無しさん
2010/02/09(火) 21:47:51そう。/* */と//が互い違いになってても階層が無限に深くなることはないはず
0823デフォルトの名無しさん
2010/02/09(火) 23:18:12括弧の中の「word:○」の○の大文字の英字一文字だけを\1や\2などで取得する正規表現は動書けばいいでしょうか?
例の場合ですと、AとBを取得できるようにしたいです
【例】
word:A
word:C
(
word:A
word:B
)
【補足】
記述は例の通りなんですが、カッコ内のデータは2つとは限りません。3個の場合もあれば100個の場合もあるので決まってないです。
(
word:Z
word:V
word:R
word:F
)
【自分で書いてみたけどダメだった正規表現】
\(.*(word:([A-Z]+?)){1,}.*\)
0824デフォルトの名無しさん
2010/02/09(火) 23:27:42たしか括弧って一番外側に無いと\1とかで取得できないんだよねぇ。
うーむ。。。
0825デフォルトの名無しさん
2010/02/10(水) 00:17:34目次− 検索系コマンド− 正規表現−一般的正規表現互換のタグ付き正規表現
には
"タグの対象となるのはあくまで一番ネストの浅いカッコだけ"
とありますね。
つまりカッコがいくつ出てくるか分からない場合,
番号指定による文字列取得はできません。
まずマクロなどで括弧内の文字列を分離したうえで
word:([A-Z]+)で処理するしかないと思います。
この場合,各々の大文字が\1で得られます。
0826デフォルトの名無しさん
2010/02/10(水) 17:27:32じゃあ何で
(東京都){0}新宿区{0}
が
東京都新宿区
にマッチするんだろう・・・。
試したのは.NetのRegex
0827デフォルトの名無しさん
2010/02/10(水) 17:37:040828デフォルトの名無しさん
2010/02/10(水) 17:41:30なんか間違ってたのかな。
0829デフォルトの名無しさん
2010/02/10(水) 17:51:17この{0}は区にしかかかってない
0830デフォルトの名無しさん
2010/02/10(水) 17:54:30"空文字""新宿""空文字"
ってことか〜。
なるほど。ありがとう。
0831デフォルトの名無しさん
2010/02/10(水) 17:54:410832デフォルトの名無しさん
2010/02/11(木) 14:14:200833デフォルトの名無しさん
2010/02/11(木) 14:36:160834デフォルトの名無しさん
2010/02/11(木) 14:44:040835デフォルトの名無しさん
2010/02/11(木) 14:49:26^ と $ で挟むとか。
0836デフォルトの名無しさん
2010/02/11(木) 18:25:39これが望む回答だとは思えないので、高確率で質問自体が無意味
0837デフォルトの名無しさん
2010/02/11(木) 19:03:100838デフォルトの名無しさん
2010/02/11(木) 20:43:44正規表現エンジンによるな
秀丸(hmjre.dll)なら"単語の検索"にチェックをいれるか,もしくは"\< abc\> "
鬼車なら"\babc\b"
0839デフォルトの名無しさん
2010/02/11(木) 21:14:480840デフォルトの名無しさん
2010/02/11(木) 21:54:320841デフォルトの名無しさん
2010/02/11(木) 21:57:59情報がすくなかったようですみませんでした
参考にさせてきただきます
0842デフォルトの名無しさん
2010/02/12(金) 06:29:48タグが1つだけの場合に消去したいです。
下のような文章があったとして…
あああ<br /><br />いいい<br />ううう<br />えええ
次が希望する結果です。
あああ<br /><br />いいいうううえええ
php.netとか見てると、言明とかなんとか辺りだとおもうんですが…上手くできません。
0843842
2010/02/12(金) 06:31:300844デフォルトの名無しさん
2010/02/12(金) 06:53:030845デフォルトの名無しさん
2010/02/12(金) 06:54:25(?<!<br />)(<br />)(?!<br />)
0846デフォルトの名無しさん
2010/02/12(金) 07:01:09/(?<!<br \/>)(<br \/>)(?!<br \/>)/
0847842
2010/02/12(金) 08:00:08試してみます。
ああ、でもこれだけだと必要な改行まで省いてしまうかも。改行直後の文字を判別して改行するか決めるのも手間だなぁ。自然な文章に整形するのも結構大変だ。
0848デフォルトの名無しさん
2010/02/12(金) 10:45:12yahoo pipes を使っています
<a href="http://www.@@@.co.jp/aaa/bbb/ccc/ddd/">
ではじまるURLの末尾に文字(xxx)を追加したいのですが
URLは http://www.@@@.co.jp の時限定で
/aaa/bbb/ccc/ddd/ のあたりは何文字でも構わない(毎回変わる)場合
Regexボックスの中になんと表記すればよいのでしょうか
<変更前>
<a href="http://www.@@@.co.jp/aaa/bbb/ccc/ddd/">
↓
<こうしたい>
<a href="http://www.@@@.co.jp/aaa/bbb/ccc/ddd/xxx">
<こういう時も>
<a href="http://www.@@@.co.jp/eee/fff/ggg/">
↓
<こうしたい>
<a href="http://www.@@@.co.jp/eee/fff/ggg/xxx">
0849デフォルトの名無しさん
2010/02/12(金) 10:50:38<a href="
URL部分
">
に分けてマッチした場合に
<a href="
URL部分
追加した文字列
">
でいいのでは?
0850デフォルトの名無しさん
2010/02/12(金) 11:10:03yahoo pipes だと すべての文字列を .* で表すのですが
<a href="http://www.@@@.co.jp/.*><タグ><タグ><タグ>
のようにURLのあとにもタグが続いていて
<a href="http://www.@@@.co.jp/.*> を マッチさせようとすると
一番最後の > まで見に行ってしまうので
<a href="http://www.@@@.co.jp/ .*><タグ><タグ><タグ >xxx
↑この部分がごっそり置換されてしまいます…
URL部分だけを切り分ける方法を教えていただけますか?
0851デフォルトの名無しさん
2010/02/12(金) 11:16:46$1$2xxxx#3
yahoo pipesは知らんけどperl5(.netもこれ)だとこんな感じでだめかな?
0852デフォルトの名無しさん
2010/02/12(金) 11:17:29置換側は
$1$2xxxx#3
じゃなくて
$1$2xxxx$3
0853デフォルトの名無しさん
2010/02/12(金) 11:43:32>>852
すごいです!うまく行きました!!!
ありがとうございます!!
0854デフォルトの名無しさん
2010/02/12(金) 11:51:090855デフォルトの名無しさん
2010/02/12(金) 14:37:27度々すみません、これだと
<a href="のすべてが置換されるようです・・・
<a href="http://www.@@@.co.jp/ のリンクだけに有効にさせるには
どうしたらいいでしょう?
0856デフォルトの名無しさん
2010/02/12(金) 15:42:01co.jpも基準につっこんどけばおk
0857デフォルトの名無しさん
2010/02/12(金) 15:53:20でOKですか?
0858デフォルトの名無しさん
2010/02/12(金) 16:13:590859デフォルトの名無しさん
2010/02/12(金) 16:39:37で
$1xxx$2
か
(?<=<a href=\"http://www.@@@.co.jp/.*?)(?=\">)
で
xxx
0860826
2010/02/12(金) 17:04:19^(A{0}){1}$
で
A
にマッチしないのはどういう解釈なんでしょう?
0861デフォルトの名無しさん
2010/02/12(金) 17:25:460862デフォルトの名無しさん
2010/02/12(金) 17:52:40わかりました。ありがとう。
0863デフォルトの名無しさん
2010/02/12(金) 18:06:03パターンを定義する時に便利だよ
0864デフォルトの名無しさん
2010/02/12(金) 18:08:12部分式呼出しのことだったっけね
0865デフォルトの名無しさん
2010/02/12(金) 20:02:59"22分 15秒",
"69時間 30分 08秒"
↑のような文字列にマッチして、数字部分を抜き出したいんですが、今は
((\\d+)時間)?\\s?((\\d+)分)?\\s?((\\d+)秒)
で$2,$4,$6を持ってきてるんですが、
もっとクレバーな方法ってありますか?
Perl 5.10
0866デフォルトの名無しさん
2010/02/12(金) 23:34:28([0-9]{2})(時間|分|秒)
0867デフォルトの名無しさん
2010/02/13(土) 06:23:20クレバーじゃねえwww
>>865
秒と分の\d+を[0-5][0-9]にする
抽出不要なカッコは非捕獲式集合にする
0868865
2010/02/13(土) 14:34:47どうもでした
0869デフォルトの名無しさん
2010/02/13(土) 15:53:33使い方をまったく思いつけなかった俺に具体例をplz
それとa??がaにマッチすることってあり得るの?
0870デフォルトの名無しさん
2010/02/13(土) 19:04:20簡単な例が思い浮かばないが
日付を表す正規表現で使ったことがある(Ruby1.9/鬼車)
RE = /
(?<sep>[\- \/_.]*){0}
(?<year>\g<y_normal>|\g<y_leap>){0}
(?<y_normal>(\d{2})?\d{2}(?!\g<sep>\g<m_feb_leap>)){0}
(?<y_leap>\g<y_leap_mother>?\g<y_leap_child>(?=\g<sep>\g<m_feb_leap>)){0}
(?<y_leap_mother>[02468][048]|[13579][26]){0}
(?<y_leap_child>0[48]|[2468][048]|[13579][26]){0}
(?<month>\g<m_feb_normal>|\g<m_feb_leap>|\g<m_short>|\g<m_long>){0}
(?<m_feb_normal>0?2(?=\k<sep>\g<d_1_28>)){0}
(?<m_feb_leap>0?2(?=\k<sep>\g<d_29>)){0}
(?<m_short>(11|0?[469])(?=\k<sep>(?:\g<d_1_28>|\g<d_29>|\g<d_30>))){0}
(?<m_long>(1[02]|0?[13578])(?=\k<sep>(?:\g<d_1_28>|\g<d_29>|\g<d_30>|\g<d_31>))){0}
(?<day>\g<d_1_28>|\g<d_29>|\g<d_30>|\g<d_31>){0}
(?<d_1_28>(2[0-8]|1[0-9]|0?[1-9])(?!\d)){0}
(?<d_29>29(?!\d)){0}
(?<d_30>30(?!\d)){0}
(?<d_31>31(?!\d)){0}
(?<date>\g<year>\g<sep>\g<month>\k<sep>\g<day>){0}
\A\g<date>\Z/x
0871デフォルトの名無しさん
2010/02/13(土) 19:46:44そうかそうか定義だけするわけね
・・・こんなのよく書いたなw
閏年判定を正規表現でやろうという発想すらなかった
0872デフォルトの名無しさん
2010/02/16(火) 17:19:154桁以上だとスルーするようにはどうしたらよいでしょうか?
(例)
あいうえお 12 かきくけこ→12がマッチ
あいうえお 123 かきくけこ→123がマッチ
あいうえお 1234 かきくけこ→スルー
.NETのRegexです
単純に\d{1,3}で良いのかと思ったら、4桁あっても最初の3桁がマッチしてしまいました・・
0873デフォルトの名無しさん
2010/02/16(火) 17:38:070874デフォルトの名無しさん
2010/02/16(火) 17:53:080875デフォルトの名無しさん
2010/02/16(火) 17:54:19それだと
あいうえお 1234 かきくけこ→234がマッチ
となってしまいませんか?
と思ったんですが [^\d]\d{1,3}[^\d] でやったら思った通り動いてくれてる感じです
ありがとうございました。
0876デフォルトの名無しさん
2010/02/16(火) 18:07:00それだと、
123
にマッチしない。それでいいならいいんだけど。
0877デフォルトの名無しさん
2010/02/16(火) 18:13:53(?<!\d)\d{1,3}(?!\d)
「1〜3桁の数値」ではなく「1〜3個の数字」でいいんだよな?
0878デフォルトの名無しさん
2010/02/16(火) 19:03:490879デフォルトの名無しさん
2010/02/16(火) 19:42:36おっしゃるとおりでした・・
そんで悩んでる最中でした
>>877
ありがとうございます
>「1〜3桁の数値」ではなく「1〜3個の数字」でいいんだよな?
その通りです
教えて頂いたのでうまくいってるようです。
先読み/戻り読みってのはまだ知らないのでとりあえず調べてみます。
0880デフォルトの名無しさん
2010/02/17(水) 14:02:29マッチさせたくないものにマッチさせない条件がつくと複雑になるよな
0881デフォルトの名無しさん
2010/02/17(水) 18:12:07そもそもこれがないと文字列の集合が確定できない => 正規表現じゃない
正規表現はワイルドカードじゃないんよ。
0882デフォルトの名無しさん
2010/02/17(水) 18:19:47有限状態オートマトンをひっくり返せば補集合にマッチ
するのになるけど、いざ正規表現で書こうとすると大変。
結局先読み・戻り読みみたいな飛び道具に頼ることになる。
0883デフォルトの名無しさん
2010/02/17(水) 22:12:56文字列集合の確定をどこまで厳密にしようとするかで
複雑さは変わってくるよね
たとえば>>870に出てるような日付の(拡張)正規表現もあれば
d{4}/\d{1,2}/\d{1,2}
なんて表現もありうる
あまりに複雑になるようならパーサジェネレータを使うべきだとは思う
0884デフォルトの名無しさん
2010/02/18(木) 09:31:2701_1. xxxx
10_10. xxxx
を
01_xxxx
10_xxxx
のように変えたい場合はどう記述すればいいんでしょうか?
0885デフォルトの名無しさん
2010/02/18(木) 13:38:06search: ^(\d+_)\d+\.\
replace: $1
0886デフォルトの名無しさん
2010/02/18(木) 23:23:13VB.NET
●検索か置換か?
置換
●説明
置き換えの正規表現で前後関係を記述する方法があったら教えて頂きたいです。
●対象データ
あいうえお123ABCかきくけこ
さしすせそ123ABCたちつてと
あいうえお123ABCかきくけこ
●希望する結果
あいうえお***かきくけこ
さしすせそ123ABCたちつてと
あいうえお***かきくけこ
0887デフォルトの名無しさん
2010/02/18(木) 23:59:14http://〜ではなく、このような相対URLのみにマッチさせたいときは
/\/search\/value\/num=\d+\/location=add/
をどうなおしたら良いですか?
絶対urlにパターンが含まれる場合はマッチしますが、相対の場合はマッチしません。
0888デフォルトの名無しさん
2010/02/19(金) 11:19:09文字列が下記のようなHTMLタグのAttributeならこれが手っ取り早いかも
<a href="http://www.exapmle.com/search/value/num=1234/location=add">
/(?<=[.'"])\/search\/value\/num=\d+\/location=add/
0889デフォルトの名無しさん
2010/02/20(土) 00:00:45? KEY = "hoge" ?
KEYは固定の文字列です
イコールの左右には0個以上のスペースがはいります。
?は不特定な文字列です
肯定後読みを使うとしたのですが思うように動きません
jdk1.4です
0890デフォルトの名無しさん
2010/02/20(土) 11:14:220891デフォルトの名無しさん
2010/02/20(土) 11:38:250892デフォルトの名無しさん
2010/02/20(土) 12:45:30俺ならば、イコール右のスペースをtrimしてから正規表現に掛ける。
つまり、作業用配列か何かに放り込んで、1クッション挟むね。
0893デフォルトの名無しさん
2010/02/20(土) 12:55:19俺ならば、イコール右のスペースをtrimしてから正規表現に掛ける。
つまり、作業用配列か何かに放り込んで、1クッション挟むね。
0894デフォルトの名無しさん
2010/02/20(土) 12:56:420895デフォルトの名無しさん
2010/02/20(土) 13:08:09KEY *= *"((?:[^"]|(?<=\\)")+)"
みたいな捕獲式集合で妥協してもらえないだろうか
>>892
漢なら正規表現一発でキメるべき
0896デフォルトの名無しさん
2010/02/20(土) 14:10:300897デフォルトの名無しさん
2010/02/21(日) 17:23:37ありがとうございました。
やはり2回に分けてやってみます。
0898デフォルトの名無しさん
2010/02/21(日) 21:16:08質問です
(特定の文字列)+(特定の拡張子or拡張子なし) にマッチにはどのように記述すればいいのでしょうか?
(hoge|foo).*(|\.(txt|html)) と試したのですが、拡張子なしの部分で躓いています
0899デフォルトの名無しさん
2010/02/21(日) 21:30:360900デフォルトの名無しさん
2010/02/21(日) 21:49:54即レス感謝
出来ました。ありがとうございます。
0902デフォルトの名無しさん
2010/02/22(月) 11:28:10<img src="http://
で始まる URL を
<img src="http://www.@@@.jp/
にしたいときの正規表現を教えてください
ただ、画像に属性がついてる時とついていない時があるので
両方に対応できるものだと助かります…
<例>
<img src="http://aaa.com/bbb/ccc/ddd.jpg alt="eee" width="100" height="100"
hspace="5" border="0" align="left"></a>
↓
<img src="http://www.@@@.jp/aaa.com/bbb/ccc/ddd.jpg alt="eee" width="100"
height="100" hspace="5" border="0" align="left"></a>
<例>
<img src="http://fff.jp/ggg/hhh/iii.jpg "></a>
<img src="http://www.@@@.jp/fff.jp/ggg/hhh/iii.jpg "></a>
0903デフォルトの名無しさん
2010/02/22(月) 15:01:560904デフォルトの名無しさん
2010/02/22(月) 15:07:460905デフォルトの名無しさん
2010/02/22(月) 19:33:35如何ともし難い
0906デフォルトの名無しさん
2010/02/22(月) 19:38:45忘れたけど。
0907デフォルトの名無しさん
2010/02/23(火) 07:01:00同じような質問に関わったわ・・・
かなり前のような気がしたが>>848だった
このスレ進むのおせーなw
0908デフォルトの名無しさん
2010/02/24(水) 12:58:56#include <stdio.h>
#include <tchar.h>
typedef struct bregexp { const TCHAR *outp; const TCHAR *outendp; const int splitctr; const TCHAR **splitp; INT_PTR rsv1; TCHAR *parap; TCHAR *paraendp; TCHAR *transtblp; TCHAR **startp; TCHAR **endp; int nparens; } BREGEXP;
typedef int(__stdcall *bregfnc)(TCHAR*, TCHAR*, TCHAR*, BREGEXP**, TCHAR*);
typedef int(__stdcall *bregfnd)(BREGEXP*);
bregfnc BSubst;
bregfnd BRegfree;
void main(){
HINSTANCE hd = LoadLibrary("bregonig.dll");
if(!hd){printf("bregonig.dllを読み込めませんでした\n"); return;}
BSubst = (bregfnc)GetProcAddress(hd, "BSubst");
BRegfree = (bregfnd)GetProcAddress(hd, "BRegfree");
BREGEXP *rxp = NULL;
TCHAR msg[80], str1[] = "s/う//k", str2[] = "あいうえお";
if(BSubst(str1, str2, str2+_tcslen(str2), &rxp, msg)){
int m = int(rxp->outendp - rxp->outp);
printf("置換結果サイズ:%d\n", m);
_tprintf(_T("置換結果:%s\n"), rxp->outp);
} else printf("置換出来ませんでした\n");
if(rxp) BRegfree(rxp), rxp = NULL;
FreeLibrary(hd);
system("pause");
}
上記の様にLoadLibraryでDLLを読み込んで使おうと思ったのですが、
VC++2008で /O2 を入れてコンパイルすると置換結果サイズがおかしくなりました。
/O1 や最適化オプションを入れない場合では正常に動きます。
何か使い方が悪いのでしょうか?
0909デフォルトの名無しさん
2010/02/24(水) 13:23:31もう少し簡潔にまとめてもらいたいものだ。
で、どんな正規表現をご所望で?
0910デフォルトの名無しさん
2010/02/24(水) 13:51:54サクラエディタのソースに呼び出し規約の問題と書いてありました…。
お騒がせして申し訳ありませんでした。
0911デフォルトの名無しさん
2010/02/24(水) 17:56:45A(B偏差値|の試験|Bの試験|の採点|晒し|評価|B試験|うp)
をきれいにしたいんですが、わかりません
A[Bの]?(偏差値|試験|採点|晒し|評価|うp)
だと
ABの
と言うスレタイだけヒットしないんです
0912デフォルトの名無しさん
2010/02/24(水) 18:03:19ごめんなさい解決しました
0913デフォルトの名無しさん
2010/02/24(水) 22:41:05のような感じで数字以外を弾きたいのですが、+-等が弾かれません
どうしたらいいでしょうか?
0914デフォルトの名無しさん
2010/02/25(木) 00:29:26上の文字列(拡張子の数は不定)の拡張子を
参照できるような正規表現はどうするのですか?
0915デフォルトの名無しさん
2010/02/25(木) 06:06:480916デフォルトの名無しさん
2010/02/25(木) 09:02:41タグの後ろにある改行は無視してその他の改行に<br />を入れるという正規表現なんですが、自前で書いた
preg_replace( '/[^>]\r\n/', '<br />', $str)
って奴だとなぜか行末の1文字が文字化けを起こすか削られてしまいます。
何が悪いんでしょうか?
0917デフォルトの名無しさん
2010/02/25(木) 09:07:45なぜか[^>]を消すと症状がなくなりました。
0918デフォルトの名無しさん
2010/02/25(木) 09:19:45消えちゃうだろ。昔はキャプチャして戻したもんだが、今なら戻り読みで
/(?<!>)\r\n/
かな?
0919デフォルトの名無しさん
2010/02/25(木) 11:17:21入力は "*.txt,*.bmp,*.zip" でいいのか?
で、最終的に欲しい出力はどれだ?
{ ".txt", ".bmp", ".zip" } のような配列か?
>>915
ファイル名から拡張子を取る、という正規表現のつもりかな?
その間違いはなんというか
"DENGER.txt .exe"
"DENGER.<RTL>txt.exe"
みたいなのを平気で実行するのに通じるものがあるな
0920デフォルトの名無しさん
2010/02/25(木) 11:44:49>>915じゃないが
validな拡張子付きファイル名がすでに用意されていて
そこからさらに拡張子を分離するための正規表現
と見るなら妥当じゃないか?
文字クラス内のドットにエスケープは必要ないが。
0921デフォルトの名無しさん
2010/02/25(木) 12:30:57(韓国ドラマ)
【韓国ドラマ】
のいずれかにマッチする正規表現を"韓国ドラマ"が一度だけで済むように
記述する方法はないでしょうか?
0922デフォルトの名無しさん
2010/02/25(木) 12:58:39/(?:(\[)|(\()|(\【))
韓国ドラマ
(?(1) \] )
(?(2) \) )
(?(3) \】 )
/x
0923デフォルトの名無しさん
2010/02/25(木) 13:28:57ドットを複数含むファイル名はvalidだし、
拡張子というのは最後のドット以降のことなんだが
0924デフォルトの名無しさん
2010/02/25(木) 13:32:09hoge.tar.gzの拡張子は.gz?それとも.tar.gz?
0925デフォルトの名無しさん
2010/02/25(木) 13:44:06アプリ側が拡張子を見て判断することはあっても
0926デフォルトの名無しさん
2010/02/25(木) 13:49:13そのくらいの意味しかないもな
プログラムからすればファイルの先頭のヘッダーを読み取るとかして初めて
中身が自分で処理できるかどうか判断できるわけだし
その辺をうまくやってるのが偽装gifか
人間はjpgと判断してるんだが中身がgifってやつ
画像表示ソフトはjpgもgifも対応してるのがほとんどなので
拡張子に関係なく中の情報でgifとして再生するから
ああいう結果になる
0927デフォルトの名無しさん
2010/02/25(木) 13:59:090928デフォルトの名無しさん
2010/02/25(木) 14:05:59ほかの要件ももひとつわからないから詳細待ちでいいんじゃないかな。
0929デフォルトの名無しさん
2010/02/25(木) 15:25:31925の言うように規格は存在しないが、大勢としては"最後のドットとそれに続く文字列"
少なくともWindowsではそうなっている。他にはPythonやRubyの標準ライブラリでも同様
あと、Unix系だとそもそもextension(拡張子)と呼ぶ文化がないけど、
.tar.gzをさして単にsuffix(接尾辞)と呼ぶことはある
0930デフォルトの名無しさん
2010/02/25(木) 17:03:430931デフォルトの名無しさん
2010/02/25(木) 17:23:310932デフォルトの名無しさん
2010/02/25(木) 17:53:200933デフォルトの名無しさん
2010/02/25(木) 19:47:40鬼車が使えるなら
/(?<e>韓国ドラマ)??\[\g<e>\]|\(\g<e>\)|【\g<e>】/
でもいい。かな?
0934914
2010/02/25(木) 21:27:36$1:txt,*.bmp,*.zip
こんな結果が得られました、期待してない結果です
>>919
入力はそれ以外の可能性がああります
"*.txt,*.bmp,*.zip"の数が3個と決まってるなら
正規表現"([^,.]+\\.[^,.]+),?([^,.]+\\.[^,.]+),?([^,.]+\\.[^,.]+),?"で取得できたのですが
入力が3個と決まってないのでどうすればいいのかわからないのです
>>928
foo.src.tar.gz.md5 の場合 .md5が欲しいです
ちなみに正規表現のライブラリにはboost使ってます
0935デフォルトの名無しさん
2010/02/25(木) 21:59:18色々突っ込みどころ満載だな。
boost使ったことはないんだけど
boostにはJavaやPerlのsplitメソッドのような関数は無いの?
文字列は本当に"米印dot拡張子"をカンマでつなげたものなの?
実は"foo.txt,bar.bmp,baz.zip,hoge.tar.gz"だったりする?
キャプチャ($1)は部分式の個数の上限が不定の場合には使えないよ。
正規表現一発で解決しなければいけない問題なの?
0936914
2010/02/25(木) 22:14:42Perlのsplit
調べてみたら セパレータによる文字列分割 みたいですね
boostにtokenizerというトークン切り分けがあるのでこれが使えるのかな?
>キャプチャ($1)は部分式の個数の上限が不定の場合には使えないよ。
どうやら自分のしたいことは正規表現では無理みたいですね
自分で文字処理していこうと思います
0937914
2010/02/25(木) 22:20:26>文字列は本当に"米印dot拡張子"をカンマでつなげたものなの?
>>934で書いたように”入力はそれ以外の可能性がああります ”
つまり>実は"foo.txt,bar.bmp,baz.zip,hoge.tar.gz"だったりする?
の可能性もあるわけです
0938デフォルトの名無しさん
2010/02/25(木) 22:26:19my @suffix = $str =~ /(\.[^.,]+)(?:,|$)/g;
print join ' ', @suffix;
.foo .bar .baz .gz
boost のことはよくしらない。
0939デフォルトの名無しさん
2010/02/26(金) 00:46:420940デフォルトの名無しさん
2010/03/01(月) 21:38:470941デフォルトの名無しさん
2010/03/05(金) 14:30:14コメントで挟まれた文章(/*と*/も消します)を消したいのですがうまくできません。
ちなみにここでは文章は3行ですが、文章の量がいつも変わるので10行のときもあれば100行のときもあります。
検索→/\*.*?\*/
置換→
内容↓
/*
さようなら
わたしの
こいびとよ
*/
0942デフォルトの名無しさん
2010/03/05(金) 14:32:030943デフォルトの名無しさん
2010/03/05(金) 15:48:08(/\*[改行コード])([有象無象の文字コード])(*/[改行コード])
[]で囲ったのは自分で対応してね
で引っかかるんじゃないの?
0944デフォルトの名無しさん
2010/03/05(金) 15:50:18(/\*[改行コード])([有象無象の文字コード])(\*/[改行コード])
0945デフォルトの名無しさん
2010/03/05(金) 15:53:25秀丸じゃ無理だよ。
理由はヘルプに書いてある。(\nを使った複数行検索の際の制限について)
0946デフォルトの名無しさん
2010/03/05(金) 16:40:470947デフォルトの名無しさん
2010/03/05(金) 17:02:390948デフォルトの名無しさん
2010/03/05(金) 17:30:370949デフォルトの名無しさん
2010/03/05(金) 23:27:49hmjre.dllの代わりにbregonig.dll(鬼車)を使えばできる
ttp://homepage3.nifty.com/k-takata/
以下の正規表現は詳解3版p.270から引用
/\*[^*]*\*+([^/*][^*]*\*+)*/
0950デフォルトの名無しさん
2010/03/06(土) 09:42:36JSON.pmを使わずに「=>」を「:」に変換し、各項目を「"」で囲みたい
とくに項目を「"」で囲む部分が分かりません
↓変換前
xml.data = {
xmlns => http://aaaa.org/rss/1.0/,
item => [
{
dc:subject => あいうえお,
description => 本日は雨なり。
},
]
}
↓変換後
xml.data = {
"xmlns" : "http://aaaa.org/rss/1.0/",
"item" : [
{
"dc:subject" : "あいうえお",
"description" : "本日は雨なり。"
},
]
}
0951デフォルトの名無しさん
2010/03/06(土) 10:53:38ありがとうございます
0952デフォルトの名無しさん
2010/03/07(日) 13:28:190953デフォルトの名無しさん
2010/03/08(月) 12:37:36入力はCSVで1行ずつ、行中のハイフン1文字をゼロ文字列または
数字のゼロにしたいのですが書き方が判りませぬ。
無い頭で「s/-/$_/」こう書いたらひどいことになりましたw
アドバイス下さい。
0954デフォルトの名無しさん
2010/03/08(月) 13:52:280956953
2010/03/08(月) 16:35:45正規表現は諦めてsplitで分割してチマチマとif分かませることにしました
0957デフォルトの名無しさん
2010/03/08(月) 16:40:25hoge0fuga00boo
0958デフォルトの名無しさん
2010/03/08(月) 16:45:10というタグと
<BR/><A href="http://ddd/eee/fff/ggg/0001.jpg">画像URL</A>
というタグが混在したソースの中から
「.jpg を含まないもの」 をマッチさせたいのですが、どのように書けばいいでしょうか
共通しているのは
・行頭が<BR/>で始まっている
・<BR/><A href="http:// までは どのリンクも同じ
・http:// 以降は、いろんなURLが混在、/の数も不確定
・末尾の "> と </A> の間にはいろんなテキストが入っている
よろしくお願いいたします。。。
0959デフォルトの名無しさん
2010/03/10(水) 18:23:08「.jpg を含まないもの」というのが「URL中のどこにも含まない」という意味であれば
^<BR/><A href="http://((?!\.jpg).)*?">.*?</A>
「拡張子としては含まない」という意味(多分こっちの意味だと思うけど)であれば
^<BR/><A href="http://((?!\.jpg").)*?">.*?</A>
否定先読みを使うから処理系依存だね。
0960デフォルトの名無しさん
2010/03/11(木) 12:40:30質問する前に自分で考えた解を書け
何回目だ
0961デフォルトの名無しさん
2010/03/14(日) 01:53:37Python3.0
●検索か置換か?
検索
●説明
特定の単語を含まないURLを検索したい
●対象データ
http://hoge.net/123/
http://hoge.net/abc/
http://hoge.net/XYZ/
http://hoge.net/bad/
http://hoge.net/OTZ/
●希望する結果
http://hoge.net/123/
http://hoge.net/abc/
http://hoge.net/xyz/
にはマッチするが、
http://hoge.net/bad/
http://hoge.net/OTZ/
にはマッチしない。
今とのところ
^http://hoge.net/([a-zA-Z0-9]+)/$
で抜き出して、後からプログラム側でばbadとOTZを含む結果を除外しています。
正規表現で可能なのでしょうか。
ご教授お願いいたします。
0962デフォルトの名無しさん
2010/03/14(日) 01:58:180963デフォルトの名無しさん
2010/03/14(日) 02:14:47今までどおりプログラム側で処理しようと思います。
0964正規表現 Part7
2010/03/15(月) 08:03:07質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
【 前スレ 】 正規表現 Part6
http://pc12.2ch.net/test/read.cgi/tech/1241537764/
0965デフォルトの名無しさん
2010/03/17(水) 04:10:430966965
2010/03/17(水) 04:18:39すいません
0967デフォルトの名無しさん
2010/03/17(水) 11:44:54$str =~ /[\x80-\xBF] [\xC2-\xFD]/;
でいけると思う。
UTF-8の文字コードで、マルチバイト文字の始まりは必ず0xC2〜0xFDの間で、マルチバイト文字の終わりは必ず0x80〜0xBFだから、
ただ、マルチバイト文字ではなく全角文字という条件であると、半角カタカナの扱いをどうするか、などがあります。
0968デフォルトの名無しさん
2010/03/17(水) 12:56:56先後読み入れた方がいいんじゃないかな
0969デフォルトの名無しさん
2010/03/17(水) 13:16:06でもマッチ結果に半角スペース1個って必要なの?
0970デフォルトの名無しさん
2010/03/17(水) 14:28:040971デフォルトの名無しさん
2010/03/17(水) 14:29:03英単語境界を壊さずに日本語の 間に挟まった スペースを 取り除きたい のかもしれない
0972デフォルトの名無しさん
2010/03/17(水) 14:33:17確かにこのマッチングで>>971のことができるね
0973デフォルトの名無しさん
2010/03/17(水) 14:45:13←半角スペース(xhtmlのソース)</p>
これをレンダリングすると1行目の改行が半角スペースになって"→ ←"になる
というのを想像したが、これの除去が目的だと改行がマッチ対象だな
0974デフォルトの名無しさん
2010/03/17(水) 15:28:49だからそれをブラウザからコピペすると挟まるんだよ
改行を処理すれば済むケースはレンダリングしてないデータ
0975965
2010/03/17(水) 16:12:26まさしくその通りです!エスパーさんありがとう
処理系も書かなきゃダメだったんですね
えと、Vimの置き換えで使おうと思ってました。
0976デフォルトの名無しさん
2010/03/17(水) 18:12:47:%s /\W[ ]\{1}\W/g
0977デフォルトの名無しさん
2010/03/18(木) 12:28:37/[\x80-\xBF][ ]\{1}[\xC2-\xFD]
削除
:%s /[\x80-\xBF][ ]\{1}[\xC2-\xFD]//g
こうかな?
0978デフォルトの名無しさん
2010/03/18(木) 14:46:230979デフォルトの名無しさん
2010/03/18(木) 18:45:330980デフォルトの名無しさん
2010/03/19(金) 13:50:16半角スペースを挿入する処理はどう書けば良いでしょうか。
#############################################################################
●正規表現の使用環境
秀丸エディタ
ttp://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular.html
ttp://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular_PerlTag.html
●検索か置換か?
置換
●説明
<全角文字><半角文字(ただしタブ\tでも半角スペース でも改行\nでもない)>
または
<半角文字(ただしタブ\tでも半角スペース でも改行\nでもない)><全角文字>
となっているところをみつけたら
半角スペースをその間に挿入する置換正規表現を教えてください。
空白文字
●対象データ
秀丸エディタは最初OS/2用に開発され、その後Windowsへ移植された(OS/2版はフリーソフトウェア)。Win
dows 3.1時代より、定番のエディタとして使われてきた。1995年に32bit対応をした後は、Windows を代表するエディタ
として広くその名を知られるようになる。公開当初より本体価格が4000
円(現在では消費税により購入価格4200円になる)のシェアウェアであるにも関わらず、
人気は高く、企業で一括して導入される場合もある。
●希望する結果
秀丸エディタは最初 OS/2 用に開発され、その後 Windows へ移植された( OS/2 版はフリーソフトウェア )。 Win
dows 3.1 時代より、定番のエディタとして使われてきた。 1995 年に 32bit 対応をした後は、 Windows を代表するエディタ
として広くその名を知られるようになる。公開当初より本体価格が 4000
円(現在では消費税により購入価格 4200 円になる)のシェアウェアであるにも関わらず、
人気は高く、企業で一括して導入される場合もある。
#############################################################################
よろしくお願い申し上げます。
0981デフォルトの名無しさん
2010/03/19(金) 14:30:090982デフォルトの名無しさん
2010/03/19(金) 15:26:32正規表現 Part7
http://pc12.2ch.net/test/read.cgi/tech/1268979408/
0983デフォルトの名無しさん
2010/03/19(金) 19:17:43うそつき
0984デフォルトの名無しさん
2010/03/19(金) 21:48:150985デフォルトの名無しさん
2010/03/19(金) 22:20:390986デフォルトの名無しさん
2010/03/20(土) 01:32:160987デフォルトの名無しさん
2010/03/20(土) 01:58:410988デフォルトの名無しさん
2010/03/20(土) 16:07:56秀丸エディタのスレに行っておいでよ
0989デフォルトの名無しさん
2010/03/20(土) 16:56:19分かりました。
ありがとうございました。
0990デフォルトの名無しさん
2010/03/21(日) 12:29:13せっかく答えてくれた人いるのに後だし条件だした上に自分で調べる気もなさそう、ということで秀丸エディタのスレで拒否られてる
で、秀丸エディタのスレであって正規表現を聞くところじゃないんだって言われて、また正規表現スレで聞けとか言われてる
思わずワロタ
0991デフォルトの名無しさん
2010/03/21(日) 18:49:190992デフォルトの名無しさん
2010/03/21(日) 18:58:09このスレなら引き取ってもどうせすぐなくなるからいいんでない?
と言うか何で暴れ出す流れになったの?
0993デフォルトの名無しさん
2010/03/21(日) 21:31:030994デフォルトの名無しさん
2010/03/21(日) 21:34:220995デフォルトの名無しさん
2010/03/21(日) 22:27:49でも次スレまで持ち越したくはないな。
0996デフォルトの名無しさん
2010/03/21(日) 22:47:48お前らに聞いても無駄っぽいから自力で解決したぜ宣言して退場
結果的にスレは荒れたし顰蹙は買ってるが暴れまわってるわけではない
0997デフォルトの名無しさん
2010/03/21(日) 23:02:52見に行ってみようかな
0998997
2010/03/21(日) 23:25:44便乗して荒らすヤツが居て良い荒れっぷりだった。
スレ梅。
0999デフォルトの名無しさん
2010/03/22(月) 00:10:071000デフォルトの名無しさん
2010/03/22(月) 00:11:0210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。