正規表現 Part6at TECH
正規表現 Part6 - 暇つぶし2ch2:デフォルトの名無しさん
09/05/06 00:37:38
◆関連サイト
正規表現メモ
URLリンク(www.kt.rim.or.jp)
Perl正規表現雑技
URLリンク(www.din.or.jp)
Regular Expression(Riue ちゃんの正規表現講座)
URLリンク(www.sixnine.net)
正規表現パズル
URLリンク(oraclesqlpuzzle.hp.infoseek.co.jp)
詳説 正規表現
URLリンク(www.oreilly.co.jp)
正規表現プログラミングFAQ
URLリンク(capslockabcjp.kitunebi.com)
JScript 正規表現の概説
URLリンク(msdn.microsoft.com)
.NET Framework 正規表現言語要素
URLリンク(msdn.microsoft.com)
【 初心者 】 正規表現 【 入門 】
URLリンク(funcchan.blog16.fc2.com)

3:デフォルトの名無しさん
09/05/06 00:40:40
◆関連スレ
[UNIX板] 正規表現
スレリンク(unix板)
[WebProg] 正規表現道場
スレリンク(php板)

◆前スレ
[1] スレリンク(tech板)
[2] スレリンク(tech板)
[3] スレリンク(tech板)
[4] スレリンク(tech板)
[5] スレリンク(tech板)

4:デフォルトの名無しさん
09/05/06 00:42:02
スルーされにくい質問のテンプレと例

●正規表現の使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

5:デフォルトの名無しさん
09/05/07 22:55:29
すいません、質問です。
(a{3}|b{3}|c{3})

[abc]{3}
は等しいですか?

6:トーマス
09/05/07 23:32:33
>>5
ちょっと違います

前者は aaa、bbb、ccc の3種類の文字列にしかマッチしませんが
後者は abc、cba、aab などにもマッチします

後者は3文字の文字列であれば1文字ごとに文字が変わってもいいのです


7:デフォルトの名無しさん
09/05/08 01:41:34
>>6
なるほどぉ
理解できました、ありがとうございました!

8:デフォルトの名無しさん
09/05/08 19:09:29
スレリンク(software板:396-397番)n
より誘導されてきました。

X-Finderは内部関連付けに正規表現を使えるのですが

foo.gz や foo.tar.gz その他の *.gz にマッチするが
foo.xcf.gz にマッチしないものはどう書けば良いかわからず困っています。

URLリンク(www.din.or.jp)
ここを参考に

*.([^x]|x(c?x)*([^xc]|c[^xf]))*(x(c?x)*x?)?.gz

と書いてみましたが動きませんでした。
希望通りの動作にするにはどう書けば良いのでしょうか?

9:デフォルトの名無しさん
09/05/08 19:14:17
>>8
(?<!xcf).gz

10:デフォルトの名無しさん
09/05/08 19:52:11
>>9
レスどもです。
でも (?<!xcf).gz と *.(?<!xcf).gz と *(?<!xcf).gz を試してみましたがダメでした。

x-finderがどの正規表現に対応してるかわかれば良かったんですが
検索しても見つからなかったんですよね…。

11:8
09/05/08 20:22:04
x-finderの機能で別の指定方法があり
そちらで希望の動作ができましたので
質問を下げさせていただきます。お騒がせしました。

12:デフォルトの名無しさん
09/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へのリンクを削除したいのですがタグとタグの間の文字は残したいのです
また動的ファイルのためパラメータがその都度変化します

13:デフォルトの名無しさん
09/05/08 23:26:26
(\<a href="[^a].+\>)「.+?」(\<\/a\>)
これで$1と$2を空白に置換でどうだろ。
今、出先なんで確認取ってないです。

14:トーマス
09/05/09 02:15:26
>>12
PHP4.3 で動くかどうかは分からないのですが、
以下の正規表現チェッカーで動いたものを貼っておきますね。

PHP正規表現チェッカー ver1.0.1
URLリンク(www.rider-n.sakura.ne.jp)

検索表現
<a\s[^>]*href\s*=(?!\s*"?\s*a\.php\?id=)[^>]+>(.*?)</a>

置換表現
\1

何故か置換表現を $1 と書いても動かなかったので \1 にしました。
$1 で動くのであればこれを使って下さい。

15:デフォルトの名無しさん
09/05/09 14:57:39
>>13
>>14
ありがとうございます
こちらも出先なので戻り次第確認してみようと思います

16:デフォルトの名無しさん
09/05/10 01:19:30
909 :デフォルトの名無しさん:2009/04/17(金) 00:22:26
簡単な検証方法
<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>

17:デフォルトの名無しさん
09/05/10 01:24:06
<center><script>varx1,y1,x2,y2,x3,y3;vara,b,c,s,S;varS1,S2,M,N;
/*倍率*/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>

18:デフォルトの名無しさん
09/05/10 01:31:29
<center><script>var x1,y1,x2,y2,x3,y3;var a,b,c,s,S;var S1,S2,M,N;
/*倍率*/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>

19:デフォルトの名無しさん
09/05/10 01:40:10
JavaScriptが動く HTML実験部屋
URLリンク(homepage2.nifty.com)


20:デフォルトの名無しさん
09/05/10 13:46:16
<TAG xxxxxxxxxxxxxxxxxxxxx />
<TAG xxxxxxxxxxxxxxxxxxxxx >yyyyyyyyyyyyyyyyyyyyyy</TAG>

上記文字列から、x, y を一つの正規表現で抽出することは可能でしょうか?



21:デフォルトの名無しさん
09/05/10 13:49:53
>>20 >>4

22:デフォルトの名無しさん
09/05/10 14:07:14
>>20

残念ながら不可能です。


23:デフォルトの名無しさん
09/05/12 09:24:09
質問お願いしいたます。

●正規表現の使用環境
XPですFlexible Renamerなどのリネームソフトでファイル名の文字化けした箇所のみ消したいのです

●検索か置換か?
置換

●説明
半角カタカナ ロシア文字 ハングル文字 中国語の漢字 特殊な記号 を全て置き換え

英数字以外全ての文字 を全て置き換え

日本語以外全ての文字 を全て置き換え

の方法があれば教えてください

●対象データ
File_鱈鯵⑤12345_xxハンカクカタカナ゙x①дЩ鱈賦xxx.jpg

●希望する結果
File_12345_xxxxxx.jpg

24:デフォルトの名無しさん
09/05/12 21:13:05
半角英数と[-_.]ぐらいを残すとして、Flexible Renamerを使うなら
[^-_.a-zA-Z0-9]
を検索のところに入れて、置換を空白でリネームすればどうだろうか
\Wは\wが全角も拾うっぽくてうまくいかないな

25:デフォルトの名無しさん
09/05/12 23:09:02
>>24
必要な文字の方を残して消せば良かったんですね、勘違いしてました・・・
理想的な方法が出来ましたありがとうございました!!!

[^-_.a-zA-Z0-9]
[^-_.a-zA-Z0-9a-zA-Z0-9ァ-ヶぁ-ん~ー亜-煕一-龠]
[^-_.a-zA-Z0-9a-zA-Z0-9ァ-ヶぁ-ん~ー亜-腕弌-熙]

26:デフォルトの名無しさん
09/05/15 08:39:43
●正規表現の使用環境
php5

●検索か置換か?
検索

●説明
画像の中に連続した数字があるか調べたい

●対象データ
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

27:デフォルトの名無しさん
09/05/15 09:25:50
>>26
php知らんけど、「画像の中に連続した数字」と言うのは単純に「バイト列中に特定の値が連続する」と解釈して宜しいか?
だとすれば、\x00\{2,\}でよさそうだが。

28:デフォルトの名無しさん
09/05/15 09:32:12
(.)\1*


29:デフォルトの名無しさん
09/05/15 09:33:49
同一文字の2個以上の連続は

(.)\1+



30:デフォルトの名無しさん
09/05/15 15:04:59
画像が16進数ってどういうこと?>>26
画像は画像じゃん。

31:デフォルトの名無しさん
09/05/15 15:46:03
画像「データ」つまりバイナリに対してマッチさせたいという話でしょ
一瞬、画像認識かとも思ったけど

32:デフォルトの名無しさん
09/05/16 20:58:37
"連続した数字" とは何を指すんだろう。
バイナリの00も連続した数字と言えるし他の解釈の仕方も出来る。

自分の考えていることを相手に正確に伝えられない人はまず
日本語の勉強をするべき。

33:デフォルトの名無しさん
09/05/16 22:32:48
連続した数字というと1,2,3,4,5を連想してしまう。
PHPって文字列とバイナリを区別しないんじゃない。

34:デフォルトの名無しさん
09/05/17 13:34:43
テンプレの意味わかってんのかな
対象データと希望する結果がそれじゃわけわからん。

35:デフォルトの名無しさん
09/05/17 16:12:54
質問主は 16進数 の意味がワカットランと思う。
もしかしたら 数字 の意味もワカットランと思う。
最近は学校でそゆこと教えないのか?

36:デフォルトの名無しさん
09/05/18 01:27:32
unko123.com
unko784.com
unko962.com

これらを正規表現する時
unko\d\.com と unko\d+\.com どっちが正しい?

37:デフォルトの名無しさん
09/05/18 01:31:00
\d{3}と迷うならともかく前者はありえん

38:デフォルトの名無しさん
09/05/18 01:46:11
>>37
unko\d{3}+\.com ってこと?

39:デフォルトの名無しさん
09/05/18 03:03:12
+余計だろ

40:デフォルトの名無しさん
09/05/18 09:03:05
ん、+のない\dが複数桁の数字にマッチする実装があるって事?

41:デフォルトの名無しさん
09/05/18 09:17:02
{n} で n 個の一致。 \d{3} は \d\d\d と等価。


42:デフォルトの名無しさん
09/05/18 09:39:06
ああ、39は38に宛ててか。

43:デフォルトの名無しさん
09/05/18 09:53:06
unko[0-9][0-9][0-9]\.com
unko[0-9]{3}\.com
unko[0-9]+\.com

unko.\d\d\d\.com
unko\d{3}\.com
unko\d+\.com

44:デフォルトの名無しさん
09/05/18 10:08:35
いやいや、正しくは
unko[179][286][342]\.com
だろう。

45:デフォルトの名無しさん
09/05/18 10:36:26
>>44
それなら
unko(123|784|962).com
の方が正しいだろう。

46:デフォルトの名無しさん
09/05/18 10:45:49
おまいら楽しそうだなw

47:デフォルトの名無しさん
09/05/18 16:50:19
$txt = aaa(’12165;

のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、
この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません
妙案ないでしょうか

php5 or 4

48:デフォルトの名無しさん
09/05/18 18:54:48
PHPってこんなんだっけ?
mb_ereg_replace("(?!aaa\\()’(\\d+);", "\\1", "aaa(’12345;");

49:デフォルトの名無しさん
09/05/18 22:22:53
8桁の10進数を文字列とみなしたとき、
下2桁が"00"でない文字列をヒットしたい。如何すればよいか?

50:デフォルトの名無しさん
09/05/18 22:40:03
/\d{6}[1-9]{2}/

51:デフォルトの名無しさん
09/05/18 22:40:57
いや、違うな。
/\d{6}(\d[1-9]|[1-9]\d)/

52:デフォルトの名無しさん
09/05/18 22:51:45
>>47
マルチかよ

53:49
09/05/18 23:29:28
>>51
ありがとう

54:デフォルトの名無しさん
09/05/20 06:57:22
/\d{6}(?!00)\d\d/

55:デフォルトの名無しさん
09/05/22 17:03:24
言語:Java

文字列:
$:hogeA;
$:hogeB;

これをpattern&matchさせるにはどうすればいいのでしょうか?

56:55
09/05/22 17:23:55
質問内容を間違えました。

文字列:
${hogeA}
${hogeB}

これをpattern&matchさせるための正規表現は \\$\{.*.} でOK?
(Eclipse 3.2 JDK 1.6でエラーが出るorz )

57:デフォルトの名無しさん
09/05/22 17:25:45
なんなのそのバックスラッシュ

58:デフォルトの名無しさん
09/05/22 18:18:22
「pettern&match」とは何ぞや? アンド?

59:55
09/05/22 18:23:06
>>58

Patternオブジェで正規表現コンパイルして、
Matcherのfindメソッドで一致を確認したいのです。

60:デフォルトの名無しさん
09/05/22 18:27:04
$\{.+\}
javaはしらん

61:55
09/05/22 18:56:03
自己解決しました。
Matcher#groupで取得するため
(\\$\\{.*.\\})でうまくいきました。
>>60 つ旦 ありがとう。

62:デフォルトの名無しさん
09/05/26 17:18:21
<img src="./topimg_0905.gif" alt="テキスト" border="0" />

PHPで上のようなイメージタグからtopimag_に続く4桁の数字とalt=""の中身のテキスト(全半角マチマチ文字列)のみを
それぞれ$gifと$altに抽出したいのですがよい方法はないでしょうか

63:デフォルトの名無しさん
09/05/27 04:14:06
そういうのはHTMLパーサ使った方がいいって言ってるだろうが。


64:デフォルトの名無しさん
09/05/27 18:16:27
UNIXで、与えられたパスが絶対パスである条件って
$(|~\S*)?/\S*
でいいですか?
思いがけないパターンがありそうで怖いんですがどうでしょうか

65:デフォルトの名無しさん
09/05/28 09:25:40
「先頭がスラッシュか」だけじゃ駄目?

66:デフォルトの名無しさん
09/05/28 10:40:58
~ユーザ名/も絶対パスとみなしたいんだろ

67:デフォルトの名無しさん
09/05/29 09:42:09
それだったら~/も含める必要がありそうな。

68:デフォルトの名無しさん
09/05/29 10:03:33
知らないならレスしないでください

69:デフォルトの名無しさん
09/05/29 18:15:39
>>67
~\S*だから入るんじゃないのか


70:デフォルトの名無しさん
09/05/29 18:16:50
^[~/]でもよさそうな気もするな

71:デフォルトの名無しさん
09/05/29 19:35:46
IMOX って空白を含むディレクトリ名ってだめだっけ?

72:デフォルトの名無しさん
09/05/29 19:36:52
困ったことに、使えるねぇ。

73:デフォルトの名無しさん
09/05/29 19:37:02
キーボードが1列ずれた。すまんw
IMOX じゃなくて UNIX って書きたかった

74:デフォルトの名無しさん
09/05/29 23:31:42
何事もなく返答する>>72に萌えた

75:デフォルトの名無しさん
09/05/31 17:18:03
よろしくお願いします。

現在Yahoo!pipes(URLリンク(pipes.yahoo.com))を使っているのですが、
pipesの中でデータをURLエンコードしたいと思っています。
そのような機能はないので、正規表現(マニュアルによるとPerlライク)でやろうと思っているのですが、
Perlの関数を使えないのでunpackを使うやり方ができません。

純粋な正規表現のみでURLエンコードはできるものなのでしょうか。
修飾子として使えるのは「gsmi」のみです。


76:デフォルトの名無しさん
09/05/31 17:32:16
>純粋な正規表現のみでURLエンコード
正規表現を利用してなら可能だろうだけど、正規表現のみじゃ無理
なんつーかノリも必要なペーパークラフトをハサミだけで作れって感じだ
URLっていう型紙からデータを切り抜くだけでどうやってURLエンコードを組み立てるよ

77:デフォルトの名無しさん
09/05/31 17:34:11
/\x00/%00/g
/\x01/%01/g

/\xFF/%FF/g

78:デフォルトの名無しさん
09/05/31 17:46:46
>>76
ですよね・・・

>>77
うおっ!

79:デフォルトの名無しさん
09/05/31 18:05:44
>>77
それやると % と 0-F の文字が置換されないか?

80:デフォルトの名無しさん
09/05/31 18:21:31
深く考えずに書いたネタにマジレスされても困るんだが、本気でこのアプローチを採用するなら、
0-9A-Fは置換する必要ないし、%を一番頭に持ってくればいい。

81:デフォルトの名無しさん
09/06/06 19:31:17
行頭から6文字目までをマッチさせるにはどう記述したらよいでしょうか?

82:デフォルトの名無しさん
09/06/06 20:29:36
^.{6}

83:デフォルトの名無しさん
09/06/06 21:22:45
>>82
助かりましたありがとうございます

84:デフォルトの名無しさん
09/06/08 23:24:52
FlashのActionScript3.0(WinXP-Pro)です。

文字列中で特定の文字列のみに色付けをしようとしていますが、目的の文字列
以外でも色が付き困っています。

例えば、『名無し』という文字列のみを青色にしようとすると、独立した文字列
 名無し
はOKなのですが、「デフォルトの名無しさん」でも『名無し』が青色になってしまい
ます。

A名無しB という場合(前または後ろに不要な文字がある場合、つまり他の文字列
に組み込まれた場合)は対象から外し、単独の場合のみを対象したく思っています。

これに適した正規表現はありますでしょうか?


85:デフォルトの名無しさん
09/06/08 23:43:22
^名無し$

86:デフォルトの名無しさん
09/06/09 00:22:19
>>85
有難うございます。しかしながら、質問が不十分でした。
確かに独立した文字列は許可したいのすが、それ以外に A名無しB で
AまたはBが
1) 半角のスペースの場合
2) 半角の左括弧 ( の場合
3) 改行の場合
4) ピリオドの場合

に名無しを青色にしたく思っています。
当初、キャラクターコードとif文で分岐しようとしましたが煩雑になったので
正規表現を利用しようと思いました。

こんな場合はどうでしょうか?


87:デフォルトの名無しさん
09/06/09 12:48:17
不特定の半角英数字と半角記号でできている半角文字列の中から (' ') に挟まれた数列だけを残して他を削除したいのですが方法はないでしょうか

例)
234hbhkltgfokdlthL+POL+PL>?*|{?('54653');
の中から54653だけを取り出し他を削除

※不特定文字列内において、 (' や ') は取り出す予定の数列を挟む場所以外では現れません

PHP

88:デフォルトの名無しさん
09/06/09 13:17:17
('...') は複数出現するのかな?一応それを考慮して

$a = preg_replace('/(?:(?!\(\').)*(?:\(\'(\d+)\'\))?/', '$1', $a);

89:87
09/06/09 13:47:46
>>88
ありがとうございます
('nnn')は1カ所しか出てきません
自分で応用できないかやってみたんですがムリでしたw
1カ所しかでてこないバージョンを教えてくださいw

90:デフォルトの名無しさん
09/06/09 15:43:57
PHPの書式は分からないけど、
\('(.+)'\)
で検索して、後方参照で\1だけ残せば良いんじゃない?

91:デフォルトの名無しさん
09/06/10 10:57:23
>  \('(.+)'\)
Vサインしてるクマたんみたいでかわいい

92:デフォルトの名無しさん
09/06/10 11:32:12
submatchでグループ化したものを抜き出せば良いんでない?

93:デフォルトの名無しさん
09/06/10 13:39:54
(V)o¥o(V) フォッフォッフォ

94:デフォルトの名無しさん
09/06/13 08:14:41
(a+b) - (b - c)

みたいな文字があって
()の中をそれぞれ取り出したい場合

(.*)ってやると
一番最初の(と最後の)でも一致してしまう
させたくないんだけどどうすればいいの?

環境はVB.NET

95:デフォルトの名無しさん
09/06/13 09:05:24
>>94
特殊な意味を持つ文字は\でエスケープする

\([^)]*\) かな

96:デフォルトの名無しさん
09/06/13 09:14:48
>>94
VB.NETはよく知らんが、大体「.*」ってやると「よくばり」モードになるぞ。
「よくばり」モードはその例の場合だと途中の括弧も飲み込んじゃって、
目一杯取ってくるから、「.*?」ってやるといい。
「?」をつけると「けちけち」モードになって、必要最小限しか取ってこない。

97:デフォルトの名無しさん
09/06/13 09:55:28
>>94
最短一致でググるといいぜ

98:デフォルトの名無しさん
09/06/13 11:46:17
非欲張り、という表現が一般的じゃないかと思うのだが。

99:デフォルトの名無しさん
09/06/13 11:55:08
正しさはともかく一般的なのは「最短一致」

"最短一致" に一致する日本語のページ 約 2,610 件
"非欲張り" に一致する日本語のページ 約 373 件

100:デフォルトの名無しさん
09/06/13 14:21:42
欲張りマッチの事、貪欲マッチと呼ばない?

101:デフォルトの名無しさん
09/06/14 00:00:57
>>95で出来た
ついでにもう1つ
英数字の連続が5文字以上を一致させたい場合はどうすれば?

102:デフォルトの名無しさん
09/06/14 00:38:39
礼の一つも言えんのか

103:デフォルトの名無しさん
09/06/14 08:52:01
\w{5,}

104:デフォルトの名無しさん
09/06/14 16:57:22
>>95さんありがとう
連続文字は自己解決した
{}の中身を{10}ってやると10文字以上という意味らしい
サンプルだと{10,20}みたいにしか書いてなかったから

105:デフォルトの名無しさん
09/06/14 17:11:29
カンマ忘れてるぞ

106:デフォルトの名無しさん
09/06/14 18:09:05
>>104
>>103さんが回答出してるのを無視して自己解決も何もなかろう。

107:デフォルトの名無しさん
09/06/14 21:01:48
無視したからこそ自己解決なのではないかと。

という混ぜ返しはさておき、
"\w" は(一般的な実装だと)アンダースコアも拾うけどいいのかな。

108:デフォルトの名無しさん
09/06/15 12:15:03
アンカ間違ってるだけで>>103を参考に解決したけど
全面採用じゃなかったから自己解決とかぬかしてるだけでは

109:デフォルトの名無しさん
09/06/15 12:48:38
ちがうな、恐らくは>102を受けて、「ありがとう」と書いたのだろう。
好意的に解釈すれば、>103を見る前に自己解決したのかも知れん。

110:デフォルトの名無しさん
09/06/22 11:09:00
C#です
Match 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タグです

111:デフォルトの名無しさん
09/06/22 11:28:41
.+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思うんだけど、
そういう複合はできない。
0回以上の繰り返し .* でマッチさせる。

112:デフォルトの名無しさん
09/06/22 12:03:01
>>111
> .+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思う
じゃなくて最短一致だろ

113:デフォルトの名無しさん
09/06/22 12:09:27
最短一致です
("AAA".+?"BBB")は実際には
(<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こんな感じです

114:デフォルトの名無しさん
09/06/22 12:09:34
それだと、 . が改行にマッチしない事は理解してる?

115:デフォルトの名無しさん
09/06/22 12:11:26
>>113訂正

("AAA.+?BBB")
("<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こうです

116:デフォルトの名無しさん
09/06/22 12:15:40
>>114
そうなんですか!?
どう書き換えればよいでしょうか

117:デフォルトの名無しさん
09/06/22 12:17:44
RegexOptions.Singleline

111はどういう環境を想定してるんだろうね。

118:デフォルトの名無しさん
09/06/22 12:25:48
>>117
できました!ありがとうございました

119:デフォルトの名無しさん
09/06/24 14:14:00
●正規表現の使用環境
AutoHotkey 1.0.48.03 (Perl 5互換のPCRE)
URLリンク(lukewarm.s101.xrea.com)

●検索か置換か?
置換

●説明
""で囲われている箇所以外の行末コメントを除去したい。

●対象データ
key = value ; ccomment
key = "val ;lue" ; comment

●希望する結果
key = value
key = "val ;lue"

m`n)[\t ]+;.*(?=$) で 無差別除去まではできたんですが後方参照とか条件分岐の方法ががわからず。
key value comment 部はそれぞれ日本語の文字が入る可能性もあるんですが
AutoHotkeyのPCRE自体は2バイト文字が考慮されません(なので[:word:]とかは使えない状態です)
よろしくお願いします。

120:デフォルトの名無しさん
09/06/26 11:50:32
単純な正規表現は分かるのですが、これはどうすればよいでしょうか?

●正規表現の使用環境
PHP4

●検索か置換か?
置換

●説明
<del>タグにはさまれた任意の文字列を、文字数ぶん●で伏せ字にしたい。

●対象データ
昨日は<del>上戸さん</del>と飲みに行ったが、<del>17,000</del>円も奢らされてしまった。

●希望する結果
昨日は<del>●●●●</del>と飲みに行ったが、<del>●●●●●●</del>円も奢らされてしまった。

121:デフォルトの名無しさん
09/06/26 12:04:54
>>120
preg_replace_callback使え。

122:デフォルトの名無しさん
09/06/26 13:13:30
>>121
そんな便利な関数があったとは、、。
ありがとうございました!

function toFuseji($matches) {
return $matches[1] . preg_replace("/./u", '●', $matches[2]) . $matches[3];
}

preg_replace_callback("/(<del>)(.+)(</del>)/", 'toFuseji', $str);

123:デフォルトの名無しさん
09/06/26 22:30:17
●正規表現の使用環境
C#2008 Regex.IsMatch

●検索か置換か?
一応検索

●説明
特定の文字列以外があるかをチェックしたい
SQLの話も混じりますが、要はSELECT文の後に
更新や変更するような命令があるかをチェックしたい
のです。
UPDATEとかそれぞれを書いていくのは漏れるかも
しれないのでSELECT、FROM、WHEREあたりを除いて
マッチさせるにはどう書いたらいいでしょうか。
試した文
^SELECT (?!.* [A-Z](?!ELECT |ROM |HERE ))

●対象データ と望する結果
マッチさせたい "SELECT * FROM AAA [UPDATE]"
マッチしたくない "SELECT * FROM AAA UPDATE"




124:デフォルトの名無しさん
09/06/26 22:52:35
何らかの処理系なら、else節で処理しちゃう手もある。

125:デフォルトの名無しさん
09/06/28 15:21:44
>>123
念のため聞くけど…
まさかこれってSQLインジェクションの対処のためにやってるんじゃないよね?



126:デフォルトの名無しさん
09/06/28 19:03:21
『id059385,,』のように、固定文字列idの後にランダムな数列、その後ろにカンマがふたつ格納された変数から、最後のカンマをひとつだけ取り除きたいのですが、
for文で回ってる途中まれに同一変数に『,,,』のようにカンマが3つ連続して出てくることがあり、その場合は取り除きたくないので
原始的に(",,",",",$変数)のようなことができません
あくまで、固定文字列id、その後に数列、その後にカンマふたつという状況でのみカンマひとつ取り除く方法はないでしょうか

PHP5

127:デフォルトの名無しさん
09/06/28 19:35:50
最後に2つある時だけ取りたいならこうするかな
preg_replace('/(?<!,),,$/', ',', 'id059385,,');

128:デフォルトの名無しさん
09/06/28 19:43:04
>>119
これ難しいね。
excelなら、Instrrev使えばすぐだけど、正規表現だとどうやるんだろ。

129:デフォルトの名無しさん
09/06/29 15:35:58
>>119
Perlならこれでいけるっぽいけど、どうかな。だめかな

s/((?:[^;]*?".*?")*[^;]*)(?:.*?$)?/$1/mg

130:デフォルトの名無しさん
09/06/29 18:07:37
'"' 自体のエスケープはどうなっているのかと、 Shift_JIS への対応が気になるかな。

131:デフォルトの名無しさん
09/06/29 22:27:07
使用環境 WSH 検索
対象データ ^AAA(BBB(CCC)(ddd)))(FFF)(GGG)$

文末の、括弧記号を含まず括弧で囲われたものが連続しているもの
を検索したいけど挙動が違います。

1) /(?:\([^(]+?\))+$/ 検索結果→ (CCC)(ddd)))(FFF)(GGG)
2) /(?:\([^)]+?\))+$/ 検索結果→ (FFF)(GGG)

欲しい結果は2の方です。
文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?

132:デフォルトの名無しさん
09/06/30 11:23:57
>>131
そりゃ前から読んでもそうなるだろ

>\([^(]+?\)
「括弧の間に開き括弧を含まないもの」だから"(ddd)))"にもマッチする

>「括弧記号を含まず」「括弧で囲われたものが」「連続しているもの」
/(?:\([^()]+?\)){2,}/

133:デフォルトの名無しさん
09/06/30 11:24:38
「文末の」を見落としたスマン

134:デフォルトの名無しさん
09/06/30 11:51:09
> 文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?

そういう動作はしない。


135:デフォルトの名無しさん
09/06/30 12:48:16
/unko$/

/unko\r\n/
と同等と考えればわかりやすいだろう
(厳密には違うけど)

136:デフォルトの名無しさん
09/06/30 23:16:49
>>128-129
レスありがとうございます。
お礼が遅くてすみません。週末からリロードし忘れてました。

質問後自分なりに頭捻って、((".*?")|;.*(?=$)) , $2 とか無理やりやってたんですが
>129さんのでいけました。特に (?: )の使い方が参考になります。ありがとうございます。

今回の件とは直接関係ないんですが、除外文字列の表記がよくわからずいつも悩みます。
今回の例でいうと コメント文字列が「;」ではなく「 ;」(半角スペース+セミコロン)だった場合とか
(?:(".*?")|[\t ]+;.*(?=$)) , $1 みたいな方法で弾くしかないのかな。

137:デフォルトの名無しさん
09/07/01 00:15:50
いや、普通にそっちのほうがシンプルでいいよ
なんであんなに複雑い書いたのかマジ俺イミフ。しにてえ

138:デフォルトの名無しさん
09/07/01 23:41:47
.NETの話なんだけど
URLリンク(msdn.microsoft.com)(VS.80).aspx#BalancingGroupDefinitionExample
この例の正規表現がどうして <> の入れ子構造にマッチするのか上の解説読んでもよく分からないので誰か分かりやすく説明してください
「name2 グループと現在のグループの間隔をグループ name1 に格納します。」って文があるけど
この「name2 グループと現在のグループの間隔」っていうのはリンク先の例で言うとどこからどこまでなのかとか
格納するっていうのがつまりどういうことなのか、って言うレベルでさっぱり理解できてない・・・
最後の "(?(Open)(?!))$" にいたっては自分の中で暗号と化してるorz

139:デフォルトの名無しさん
09/07/02 03:33:28
わかりやすくは多分無理だな。

Openでカウントが増える。
Close-Open でそのそのカウントが減る。

んで、開きと閉じのアングルブラケットの数がバランスしていれば カウントは0になるので

"(?(Open)(?!))$";

の条件が (?!) ではなくなる。
この(?!) というのは要するに何にもマッチしないもの。


140:123
09/07/03 21:01:48
>>124
うまく書けなかったので要素に区切ってチェックすることにしました。
>>125
SQLインジェクションって知らなかったけど、悪意のある入力の
チェックって感じかな?
入力文字はSQL文が前提で、そこまで重い意味合いのチェック
ではありませんでした。
SQLインジェクション対策って普通Regex.Escapeを通すのかな?



141:デフォルトの名無しさん
09/07/03 21:07:18
言語によるが、DB系のライブラリにバインディング機能があれば普通はそれを使う。
自作のお手製ライブラリはやめた方がいい。
DBによって攻撃の仕方が違うし、
よく知ってる人が作っていろんな人が使ってるやつの方がやっぱり圧倒的に安全。
詳しくはそれっぽいスレで聞いてくれ。

142:デフォルトの名無しさん
09/07/03 21:16:14
>>140
何のためにそんなことをしたいのか分からないが、
ユーザにSQLクエリを入力させて実行させたい、とかいう話なら、
クエリ式に対してチェックをするのではなくて、
データベースの更新が出来ないような権限でクエリを実行すべき。

143:123
09/07/03 21:16:15
>>141
そうなんですか。調べてそっちの方向に変えてみます。
よく考えたらSQL文にRegex.Escapeなんて
なんの関係もなかった・・・。

144:123
09/07/03 21:20:04
>>143
権限で~ってのは思ってたんですが、触れない事情がありまして。
普通はそうなんですね。
スレ違いになってきたのでこの辺で終わっときます。
ありがとう。


145:デフォルトの名無しさん
09/07/04 21:44:21
●正規表現の使用環境
PHP 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後)

●対象データ と望する結果
上記記載

すみません。どなたかお願いします。

146:デフォルトの名無しさん
09/07/04 22:10:12
HTMLタグの中身を抜き出すのに近いね。
別の自作関数を作っておいて、

arr[1] = \1 & \7
arr[2] = \2 & \6
arr[3] = \3 & \5
arr[4] = \4

なんてのはどうかな。
もっとスマートな方法もあるかもしれないけど、今でもこれ使って動かしてます。


147:デフォルトの名無しさん
09/07/04 22:43:50
回答ありがとうございます。
でも、多分、俺って、あなたの思っている以上の馬鹿みたい。
全くもって、理解できないんですけど・・・・・・・。
もうちょっとわかりやすくしていただけると助かります。
って、馬鹿がわかりやすい解説って、わかってる人にはかなり難しいんだと思いますけど。
すみません。わがまま言って。

148:デフォルトの名無しさん
09/07/04 23:28:20
外側から攻めていって、カッコがなくなるまでループするとか
function 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);

149:デフォルトの名無しさん
09/07/05 12:38:53
ありがとうございます。
完璧です。
ほんとにありがとうございました。!!

150:デフォルトの名無しさん
09/07/05 12:56:11
なるほど、賢いなぁ

151:デフォルトの名無しさん
09/07/05 14:24:31
147は138かな?

もうちょっと努力して説明してみるから少し待ってね。


152:デフォルトの名無しさん
09/07/05 15:21:42
147は145 で PHP5、.NET の138とは別の人、だと思うけど。

153:デフォルトの名無しさん
09/07/05 16:48:27
>>139,151
138です、レス遅れてすみません
自分で試しつつなんとか(?<name1>p1)+(.*)(?<name1-name2>p2)+ という表記なら
(p2にマッチした回数 - 1) 個だけ name1とname2のキャプチャを取り出して
(.*)の両端にくっ付けていく(ただし取り出すキャプチャの 最大数は (p1にマッチした回数-1) 個)のかな
という感じで理解し始めてますが・・・

それと?(Open) という書き方は ? と () までも含めて、Openを文字列リテラルとしてではなく
(既に同じパターンのより先頭部分で定義されている)Openという部分パターンの
グループ名だということを示すための表記法なんでしょうか?
こっちは試し方も良く分かりません・・・

154:151
09/07/06 03:10:01
(?'Open'<)
というのは、named caputure でこの場合は < を Open という名前で捕獲するもの。
この場合は捕獲自体には意味はなくて裏で増やしているカウンタが重要。そして
(?'Close-Open'>)
この部分で Open のカウンタを1減らしている。< と > の数が同じであれば、
(?(Open)(?!))
まで来た時点で Openの値は0になっているはず。

で、この表現なんだけど (? (Open) (?!) ) が、? に続く部分正規表現が「真」であれば (?!) を
マッチの条件にするというプログラミング言語の if ~ then ~ みたいなもの。

解説は
URLリンク(msdn.microsoft.com)(VS.80).aspx
にある。

そして Open が0でない==バランスが取れていなければ (?!) のチェックを
するのだけど、これは前回も書いたように絶対にマッチに失敗するというパターン
なので、全体を通してみるとバランスが取れていればマッチ成功。
そうでなければ失敗。という次第。



155:デフォルトの名無しさん
09/07/10 10:33:02
オライリーの「詳説 正規表現 第3版」を読んで疑問に思ったので質問します。

5章にある「IPアドレスへのマッチ」で、0から255の数字にマッチする正規表現のサンプルがありますが
 [01]?\d\d?|2[0-4]\d|25[0-5]

これだと、最初の選択で [01]? がオプションなので、たとえば "999" が "99" に
マッチしてしまうような気がするのですが、問題はないのでしょうか。
よろしくお願いします。

156:デフォルトの名無しさん
09/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
みたいに前後を指定する必要があるよね。

って、そういう話ではなくて?

157:デフォルトの名無しさん
09/07/10 10:49:11
>>156
あぁ、すみません。
たしかに ^ $ で境界を指定すれば問題ありませんね。
部分式ばかり考えていて見えませんでした。

ありがとうございます。

158:デフォルトの名無しさん
09/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


159:デフォルトの名無しさん
09/07/22 02:48:28
>>158
Match()一発じゃなくて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

160:デフォルトの名無しさん
09/07/26 09:55:51
正規表現、特にNFAって計算量が大きいので
実用上、30~40文字ぐらいが限界だったように記憶してるのですが
NFAとDFAでの計算量ってO表記でどのぐらいでしたっけ?
wikiにそういう情報のせといて欲しい・・

161:デフォルトの名無しさん
09/07/26 10:56:30
PHPのpreg(perl互換)の話なのですけど、
/(?<=<div>)(.*?)(?=<\/div>)/is
はエラーにならなくて
/(?<=<div[^>]*>)(.*?)(?=<\/div>)/is
がエラーになる理由が分からないのですが、
なぜなのでしょうか

162:デフォルトの名無しさん
09/07/26 10:59:13
なぜと言われても・・・そう設計してあるから、としか言いようがないな

163:デフォルトの名無しさん
09/07/26 11:01:24
>>2 の「正規表現メモ」の (?<=pattern) の解説には

  固定長の文字列に対してのみ働きます(処理系による。可変長の文字列を許可する処理系もあります

と書いてある。つまりそういうことだ。

164:デフォルトの名無しさん
09/07/26 11:06:41
なるほど。これは固定長のみでしたか。
ありがとうございます。
別のルートから正規表現の方法を探す事にします。

165:デフォルトの名無しさん
09/07/26 17:28:23

/(?<=<div[^>]{0,99}>)(.*?)(?=<\/div>)/is

可変長は無理でもこの書き方({0,99})がOKな処理系もあるから試してみろ


166:デフォルトの名無しさん
09/07/27 09:08:56
>>160
DFAの計算量は自明でしょ。
NFAはパターンとテキストによって違うから一概には言えないんじゃないかな。


167:デフォルトの名無しさん
09/07/27 12:33:41
適当なことばっかり言うのはやめてください

168:デフォルトの名無しさん
09/07/27 13:29:38
セルフでコンプリートすればパーフェクトですよ

169:デフォルトの名無しさん
09/07/28 16:26:27
マッチする判定じゃなくて
正規表現書いたらそれを満たす全ての文字列を生成する
プログラムを書くのは難しいですか?

170:デフォルトの名無しさん
09/07/28 16:33:47
^.*$

171:デフォルトの名無しさん
09/07/28 16:35:25
正規表現によっては終わらない可能性があるわけだな

172:デフォルトの名無しさん
09/07/28 16:37:23
>>170
それをやると遅延評価的に必要な分だけ垂れ流すんです

173:デフォルトの名無しさん
09/07/28 16:37:58
文字数限定すればできることはできる
指定字数の全ての組み合わせの文字列をその正規表現にマッチさせて
成功したものだけをリストアップすればいい

速度的にどれだけ実用になるかは不明
最適化するとなると論文レベル

174:デフォルトの名無しさん
09/07/28 16:40:11
フィルターにかけるのではなく
初めから有効な物しか生成しないものとします

175:デフォルトの名無しさん
09/07/28 16:42:08
>>174
よし、正規表現をパースすることから始めよう。

176:デフォルトの名無しさん
09/07/28 16:42:44
等価な有限オートマトンをバックトラックしながらしらみつぶしに探索するような
プログラムを書けばできそうだな。

177:デフォルトの名無しさん
09/07/28 16:56:58
数学的に可能ですか?
僕が心配してるのは5次以上のn次方程式の一般解
を探そうとしていやしないかという事です

178:デフォルトの名無しさん
09/07/28 17:00:53
取り敢えずオートマトンを学ぶに適した良書を紹介して下さい

179:デフォルトの名無しさん
09/07/28 17:12:42
> 正規表現書いたらそれを満たす全ての文字列を生成する

> それをやると遅延評価的に必要な分だけ垂れ流すんです

> 初めから有効な物しか生成しないものとします

> 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい


何をしたいんだよ?お前は。
とりあえず学校の宿題なら自分でやれ。それか自分で調べろ


180:デフォルトの名無しさん
09/07/28 17:33:48
ごめんなさい><

181:デフォルトの名無しさん
09/07/28 17:46:04
>>179
とりあえずかの有名なこれでいいんじゃねーの?

URLリンク(www.saiensu.co.jp)
URLリンク(www.saiensu.co.jp)

182:デフォルトの名無しさん
09/07/28 17:52:14
>>181
あり^^

183:亀
09/07/29 13:06:01
聞くのもどうかと思ったんですが調べても解決しなかったので、聞きたいのですが
『正規表現の定義』ってなんですか?

184:デフォルトの名無しさん
09/07/29 13:11:58
ほんとに調べたのか?

185:デフォルトの名無しさん
09/07/29 13:18:50
文字列一致確認用プログラミング言語

186:デフォルトの名無しさん
09/07/29 13:19:32
>>183
アルファベットΣ上の正規表現とは、
- 空集合 0
- Σ の要素 c
- r, s が正規表現のとき r + s
- r, s が正規表現のとき rs
- r が正規表現のとき r*
のいずれか。

187:デフォルトの名無しさん
09/07/29 13:23:42
>>186
宿題は自分でやらせろよ。

188:末吉
09/07/29 14:16:10
>>186
183は定義を聞いてるんだろ??

189:デフォルトの名無しさん
09/07/29 15:17:02
定義じゃん

190:デフォルトの名無しさん
09/07/29 15:56:14
>>188

ここの「形式言語理論における正規表現」を見ろ

URLリンク(ja.wikipedia.org)



191:デフォルトの名無しさん
09/07/29 16:05:59
見るなら正規言語だろう。
URLリンク(ja.wikipedia.org)

192:デフォルトの名無しさん
09/07/29 16:46:52
正規言語と正規表現は本質的には同じだけど違うものだし

193:デフォルトの名無しさん
09/07/29 17:11:51
>>181は激しく良書なので啓蒙しとく

大学のオートマトンのテキストがひどかったので
この本は難しいだろうと思ってずっと敬遠してたが
これはとてもわかりやすかった
予備知識もほとんどいらない
(最初のほうは背理法だとか数学的帰納法のレベルから解説)

厳密な定義がちゃんと書いてあるが
それに先だって具体例をあげて説明がある

ただ、この本を読んでも>>169の実装に直接には役立たないかもしれない
(0+1)*1(0+1)+(0+1)*1(0+1)(0+1)のような正規表現を簡約して
より計算しやすい正規表現に変換する
といった最適化なら正規表現の代数的性質の章でちょろっと学べる

194:169
09/07/29 19:37:54
直接役には立たなくても正規表ゲニストを目指す僕は
正規表ゲニスト名乗っててオートマトンも知らんのかと
馬鹿にされるのは嫌なので オートマトニストにもなります><

195:デフォルトの名無しさん
09/07/29 19:59:04
もういいから消えろよ

196:デフォルトの名無しさん
09/07/29 23:55:35
aaa/bbb/ccc
aaa/bbb/ddd
aaa/ccc/eee
  ・
  ・
  ・

上のような文字列があって正規表現での検索時間(grepとか)を速くしたいと思っていますが、
高速化するために正規表現の合成?みたいなことができるようなライブラリってありますでしょうか?

検索したい文字列のリストはだいたい1行が30~40文字程度で100行~200行ほど
検索対象はファイルサイズで400Mbyte~6Gbyteぐらいです。


197:デフォルトの名無しさん
09/07/30 00:09:32
質問をもっと推敲しろ

198:デフォルトの名無しさん
09/07/30 00:10:30
必要ない行はgrepで飛ばして読めばおk

199:デフォルトの名無しさん
09/07/30 00:13:49
grepパイプでつなげば十分なんじゃね?

200:デフォルトの名無しさん
09/07/30 00:46:05
パイプって言いたかっただけやんwww

201:デフォルトの名無しさん
09/07/30 03:14:06
>>199
せめて -e を並べるか -f だろー。

202:デフォルトの名無しさん
09/07/30 09:14:17
fgrep使うのが正解

203:デフォルトの名無しさん
09/07/30 12:45:55
いつから言葉遊びをするスレになったのですか?

204:デフォルトの名無しさん
09/07/30 14:47:20
正規表現は秀丸でちょこっと\n\n\nとか^[a-z]くらいをいじっただけの初心者なのに、
Javaで、JavaのDecimalFormat用文字列を
Excelの数値フォーマット定義文字列に変換するフィルターを作ってます。
『他の人にやらせりゃいいのに…まあ調べればわかるやろ…』と思って始めましたが、
案の定、いきなり引っかかりました。www

1)引用符'を引用符"に変換する正規表現(ただし連続''は'自体を表すので"にしない)
2)''に囲まれていない浮動小数点EをE+に ([0#])(E)([0#])を\1E+\3に

なお、変換は単一の正規表現で行う必要はなく、
順序依存のある複数の置換をかけてもOKです。
ただしできれば、各フィルターは常に全文に適用したいと思います。
(不要なフィルターも通過させる)

最悪、一部の変換結果を絶対にユーザが使わない予約語に変換して避けておく…
ということも可能だと思いますが…

正直、いきなり1)で引っかかったのにはガックリきました。
フィルター文字列定義をpropertiesで外出しにして
出荷後もサポートで変更・追加できるようにしないとマズイな…

205:204
09/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);


206:デフォルトの名無しさん
09/07/30 15:49:13
うん、わかるね

207:204
09/07/30 15:56:54
URLリンク(msdn.microsoft.com)にいいのがありますた。
1)は
(')([^']+)(')→\"\2\"
''→'
の2つでいけるかなぁ…


208:204
09/07/30 16:24:35
2)の浮動小数点EをE+にするのは、

引用符の中の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%くらいは出来てるかなあ。
変換対象の最後が引用符のときに落としちゃうけど、まあ…

209:204
09/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


210:204
09/07/30 16:40:36
最初から地にEEがあるとEになっちゃうか。
横着せずに引用符の中のEEだけをもどさないとだめだな。

211:デフォルトの名無しさん
09/07/30 19:06:52
ダブルクォートの中にカンマを含むフィールドのことを考えると
正規表現よりは文脈自由言語でパースしたほうが絶対にいい

212:204
09/07/31 10:43:27
かも知れないけど、開発の立ち上げ工数と、今後のメンテを考えるとなー。
(あまり入出力仕様は変わらないと思うが、日付フォーマット変換の追加がありうる)
正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。

また、必ずしも完璧に作る必要はなくて、
ユーザが業務で使うごく一般的なフォーマット文字列を通せれば後は制限事項でもいいし。
それをいえば、想定顧客に、浮動小数点使ってる人なんていないんじゃないかと思うけどね。。。

213:デフォルトの名無しさん
09/07/31 11:31:23
>>212
> 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。

いねーだろ。どの口が言ってんだ?あん?

214:デフォルトの名無しさん
09/07/31 11:58:34
ていうかここって日記スレなのか?

215:デフォルトの名無しさん
09/07/31 12:16:24
正規表現はフィットする目的には早く書けるけど、保守性は悪いし実行
速度は遅いしで、まともなプロジェクトには使わないよ。


216:デフォルトの名無しさん
09/07/31 12:21:08
まともでないプログラマ乙

217:デフォルトの名無しさん
09/07/31 12:24:55
>>216
>>204 に回答してから言えよ。

218:デフォルトの名無しさん
09/07/31 12:27:31
言うほど保守性が悪いとも思わないし、実行速度も
用途に十分なら別にかまわんしなぁ。

むしろ正規表現使わずにだらだら書かれたほうが
見通しが悪くて遅い場合も多い。適材適所。

219:デフォルトの名無しさん
09/07/31 12:28:28
>>218
>>204 に回答してから言えよ。

220:デフォルトの名無しさん
09/07/31 12:33:32
>>219
問題がよくわかんないし、javaとexcelだしスルー。

221:デフォルトの名無しさん
09/07/31 12:37:46
そもそも便所の落書きに仕事を持ち込まれても知らんし。

222:デフォルトの名無しさん
09/07/31 13:14:57
>>212
正規表現で書かれたフィルタのバグ取りなんてぞっとする
ちゃんとした技術者なら、RFCにCSVのBNFがそのまま載ってるんだから
BNFの通りにコーディングすりゃ
テスト含めて1日で終わるよ

223:204
09/07/31 13:15:56
>>213
おっと確かに! 居ないからこそ、漏れがやる羽目になっとるわけだがwww
(出来る人に空きが無いという理由もある)
しかしま、コトは相対比較で十分なんで。

>>221
まあねえ。ML探して加入して自己紹介して
過去ログ検索して質問投げるってのが本来なんだろうが。
でもURLリンク(www.rubular.com)とかでちょこちょこやるうちに
何とかなりそうな気がしてきた。

224:デフォルトの名無しさん
09/07/31 13:26:42
>>207
'''hoge' みたいなパターンがダメなのでは。

>>205 がよくわからんのだが、正規表現の変換処理のリスト (filterlist) を積んで、
executeFilters() でそれらを順番に逐次処理して適用する、ということ?
そんなん絶対うまくいかんと思うが。

225:デフォルトの名無しさん
09/07/31 13:43:19
絶対入力するなよ!絶対だぞ!絶対入れるなよ!
で切り抜けるんだろう

226:デフォルトの名無しさん
09/07/31 13:56:39
>>211
だよねー。

Java は良く知らないんだが、 JavaCC とか使えばスッキリ書けないのかね?

227:デフォルトの名無しさん
09/07/31 14:17:27
CSV扱うライブラリぐらいjavaにもありそうなもんだけどな。

228:デフォルトの名無しさん
09/07/31 16:40:25
Javaでも20行未満で書けるレベルの処理だろうに。


229:デフォルトの名無しさん
09/07/31 16:50:34
>>228
お前がそれをさっさと書かないからこのネタが延々と終わらんだろうが。

230:デフォルトの名無しさん
09/07/31 16:56:53
ライブラリあるの?

231:デフォルトの名無しさん
09/07/31 16:57:34
SuperCSVオススメ

232:デフォルトの名無しさん
09/07/31 18:02:03
>>228
期待age

233:デフォルトの名無しさん
09/08/01 04:17:10
それをここでやるのはスレ違い。

234:デフォルトの名無しさん
09/08/01 08:51:21
逃げる気か?

235:デフォルトの名無しさん
09/08/01 10:11:53
>>234
あんた馬鹿?

236:デフォルトの名無しさん
09/08/01 12:43:12
逃げやがったな。口だけ達者で、ほんとは何も出来ないヤツw

237:デフォルトの名無しさん
09/08/01 12:45:19
>>236
あんた馬鹿?

238:デフォルトの名無しさん
09/08/01 13:24:30
負け犬めガッ!一生逃げ回ってろ

239:デフォルトの名無しさん
09/08/01 13:29:08
なにこの粘着質

240:デフォルトの名無しさん
09/08/01 13:30:20
質問者でしょ。それ以外に利益のある人はいない

241:デフォルトの名無しさん
09/08/01 13:33:21
人生の敗北者!

242:デフォルトの名無しさん
09/08/01 13:44:54
質問者はもっと回答者に敬意を持って接しろ

243:デフォルトの名無しさん
09/08/01 14:01:48
愉快犯の荒らしだろ。放置推奨

244:デフォルトの名無しさん
09/08/01 23:44:50
228 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/31(金) 16:40:25
  Javaでも20行未満で書けるレベルの処理だろうに。

     ↑
できもしないことを、いい加減に書くのは、質問者に対して失礼。
第三者も見ていて不愉快。
おまいこそ最悪の荒らし!

245:デフォルトの名無しさん
09/08/02 00:07:19
そんなに粘着する必要あるのかと。

>>228が無知で、何も知らずに発言しちゃっただけかも知れないんだぜ?
くだらないプライドを守っている暇があったら、勉強して技術向上して
人生をエンジョイした方が、オタク(というかハッカー精神)的に
意味のあるものになるんじゃないのかね?

246:デフォルトの名無しさん
09/08/02 00:26:43
なにしにきたんだよ もう帰れよ

247:デフォルトの名無しさん
09/08/02 06:43:38
Javacに一行の文字数制限があったかどうかが
気になってしようがないわけだが。

248:デフォルトの名無しさん
09/08/02 11:29:02
無知で、何も知らないならレスしないでください。

249:デフォルトの名無しさん
09/08/02 11:42:35
そもそも 204って質問だったのか?
アドバイスが欲しいらしいのはわかるが、お願いします的なセリフは何も書いてないだろ
ウゼー独り言延々書き込んでるやつがいるなぁ位の認識だったんだが。

250:デフォルトの名無しさん
09/08/02 16:12:46
珍しく伸びていると思えばこれか


251:デフォルトの名無しさん
09/08/02 16:38:58
喧嘩嫌

252:デフォルトの名無しさん
09/08/02 16:54:39
>お願いします的なセリフは何も書いてないだろ

www
苦しい言い訳。
「お願いします」口調なら、「Javaでも20行未満で書けるレベルの処理」になるのかい?

253:デフォルトの名無しさん
09/08/02 16:59:48
まあ書いてやってもいいかな、くらいだけどな

254:デフォルトの名無しさん
09/08/02 23:12:00
>>253
中学生2年生かおまいは

255:デフォルトの名無しさん
09/08/03 05:00:11
中学生はジャポニカ学習帳でも焼いて食ってろ

256:デフォルトの名無しさん
09/08/03 07:08:27
中学二年生にだって天才はいるかもだろ
ニヤニヤと見守るのがベター

257:デフォルトの名無しさん
09/08/03 13:34:29
おっと~!自称「天才」中学2年生現る!

・・・で?20行で書けないの?天才さんw

258:デフォルトの名無しさん
09/08/03 13:35:10
今なら30行に負けてあげてもいいんだけど

259:デフォルトの名無しさん
09/08/03 19:18:18
マジキチ

260:デフォルトの名無しさん
09/08/03 19:21:17
土日は遊んでたので見てなかったがまだやってんのか。ヒマだね~

261:デフォルトの名無しさん
09/08/03 20:25:05
どうした?30行でも不足か?
そっちが20行と言ったから20行なわけで。
べつに、40行でも50行でも構わんのだがな。

262:デフォルトの名無しさん
09/08/03 20:27:15
マジキチ

263:デフォルトの名無しさん
09/08/03 20:37:57
>Javaでも20行未満で書けるレベルの処理だろうに。

こいつ、恥ずかしくなって逃げたのか。布団かぶって泣いてるのか?

264:デフォルトの名無しさん
09/08/03 20:43:09
マジキチ

265:デフォルトの名無しさん
09/08/03 23:36:06
なんだこの流れ
Javaよくわからんから20行が無茶ぶりなのかどうか知らんけど
一体何が夏厨の琴線に触れちゃったの?
質問者不在で誰も求めてないコード請求してもしょーがなくね?

266:デフォルトの名無しさん
09/08/03 23:43:39
生理の日かアレな人かどちらか

267:デフォルトの名無しさん
09/08/03 23:49:27
javaで20行書くのに、いったい何日かかってんだよ。
速いとこコードを晒せ。それですべて解決する話だろ?

268:デフォルトの名無しさん
09/08/03 23:55:01
マジキチ

269:デフォルトの名無しさん
09/08/04 07:15:52
おはよう!10行くらい書けた?まだかな?

270:デフォルトの名無しさん
09/08/04 07:38:06
酔っぱらいに絡まれた感じってこんなんだよな

271:デフォルトの名無しさん
09/08/04 08:03:12
schemeでCSVパーサを書いた
BNF通りのCSVの定義が19行、呼び出し8行、コンビネータパーサ80行

しかしよ、実はCSVのパースなんか全く関係なくて
問題はDecimalFormatのパースじゃねーか

URLリンク(sdc.sun.co.jp)
ここにBNFライクな仕様が載ってるから
これをパース後数値にして、コンマ/改行で区切って出力すりゃいい
楽をするならJParsec

272:デフォルトの名無しさん
09/08/04 08:29:37
Javaなら20行で書ける!

273:デフォルトの名無しさん
09/08/04 09:08:46
そもそも大抵の言語は1行にいくらでもつめられるからできて当たり前ww
pythonだと難しいかもな。

274:デフォルトの名無しさん
09/08/04 09:17:44

世間を知らない井の中の蛙

275:204
09/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個でも\を出せるように倍にしておく。
{"\\\\", "\\\\\\\\"}
};


276:204
09/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"}
};

277:デフォルトの名無しさん
09/08/04 09:49:56
これ見たら >>218 とかブン殴りたくなってきたんだが。

278:204
09/08/04 09:51:49
20行の成否はどうでもいいんだけど、もし可能であれば教示していただけるとうれしい。
仕事はともかく、美しいコードには感動があるのでね。
(とはいえ、他人が見てわからないコードはよろしくないので、
無理に圧縮した20行より、読みやすい100行の方がいいけど。)

>>224
n回フィルターすると、フィルター相互の矛盾衝突のチェックがn(n-1)必要になるから、
フィルターが増えるほど加速的に困難になる…という趣旨ですよね。
しかし、3行1セットで1個の処理をするフィルターを作成し、
そのセットが他には絶対に影響を与えない堅固なものであれば、
必ずしもn(n-1)にはならないのではないか…と思って手をつけたわけですが…
しかし実際やってみるとそうはなってませんな…引用符処理が誤算でした。

279:デフォルトの名無しさん
09/08/04 09:56:00
おい、ここはニートのスレですか?

280:デフォルトの名無しさん
09/08/04 09:59:41
なんだなんだ、また日記が始まるのか

281:204
09/08/04 10:05:11
いやいや、みなさんオチがついてないと気持ち悪いでしょ。サービスのつもりだったんだけど。
もう一区切りついたんで書き込みやめとくよ。(何が出来て何が出来ないかはわかったという趣旨)
あと>>224さんの'''hoge' 難問ですわ…ご指摘ありがとうございました。

282:デフォルトの名無しさん
09/08/04 10:48:27
あーウザかった

283:デフォルトの名無しさん
09/08/04 11:00:43
マジキチ

284:デフォルトの名無しさん
09/08/04 12:21:32
Javaでも20行未満で書けるレベルの処理だろうに。

285:デフォルトの名無しさん
09/08/04 12:31:48
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

286:デフォルトの名無しさん
09/08/04 21:43:50
マジキチ

287:デフォルトの名無しさん
09/08/04 21:52:53
    /:::::::ヽ____/::::::::ヽ、
   丿 ::.__  .:::::::::::::  __  ::::ヽ_       ,. 、       /   /
  / /。 ヽ_ヽv /: /。ヽ  ::::::ヽ    ,.〃´ヾ.、  /  /
 / / ̄ ̄√___丶  ̄ ̄\  ::::| / |l     ',  / /
 | .:::::::::: / / tーーー|ヽ     ..::::: ::|r'´  ||--‐r、 ',   javaなら20行で書ける!!
 | .:::::.  ..: |    |ヽ   .,..ィ'´     l',  '.j '.    javaなら20行で書ける!!
 | :::    | |⊂ニヽ| |  'r '´         ',.r '´ !|  \
 | :    | |  |:::T::::| !  l!     ....:.:.:.:.:.:ヽ、   ,l    \
 \:    ト--^^^^^┤   ゝ、.,_ ---‐‐‐----ゝ、ノ

288:デフォルトの名無しさん
09/08/04 22:34:41
マジキチ

289:デフォルトの名無しさん
09/08/05 15:37:17
>>Javaなら20行でできる
専用スレ立ててやれ

290:デフォルトの名無しさん
09/08/05 16:35:23
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

291:デフォルトの名無しさん
09/08/05 17:57:53
>>289
もう終わった話に一人で何言ってんの?

292:デフォルトの名無しさん
09/08/05 18:09:20
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

293:デフォルトの名無しさん
09/08/05 23:40:59
perlで7行スレは盛り上がったのになんだこの流れ

294:デフォルトの名無しさん
09/08/05 23:51:53
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |

295:デフォルトの名無しさん
09/08/06 09:14:15
正規表現使うんならperlかpythonあたりいくだろ。javaはないわ。

296:デフォルトの名無しさん
09/08/06 09:36:03
正規表現使うのが目的ならな。

297:デフォルトの名無しさん
09/08/06 10:22:39
正規表現使わなくてもjavaなら20行未満で書けるよ。

298:デフォルトの名無しさん
09/08/06 10:53:47
>>297
おい!できるならとっとと書いてみろよ。
逃げんじゃねーぞこの口だけ野郎が!

299:デフォルトの名無しさん
09/08/06 14:40:55
>>297
あ?どうしたコラ!
はやくしろよ。
また逃げたのかなw 布団被って泣いているのかな?w

300:デフォルトの名無しさん
09/08/06 15:07:24
人にものを頼む態度じゃないな

301:デフォルトの名無しさん
09/08/06 15:25:36
ああん?

 「書ける」 とは言ったが 「書く」 とは言ってない。
 書いて欲しかったら頭を下げてお願いしろ。
 それが礼儀だろ。

・・・って言いたいのか?中学生か、おまいは!

302:デフォルトの名無しさん
09/08/06 15:41:38
と、小学生みたいな発言している人がいますね

303:デフォルトの名無しさん
09/08/06 17:35:45
で、いつになったら発表してくれるの?>> 20行クン
今なら30行に負けてあげてもいいと言ってるんだし、
そもそも、こっちは行数なんて問題にしてないから
100行だろうが1000行だろうが好きなだけ費やしてもいいんだよ。
早く書いてごらんよ。どうせ書けないんでしょ?
書けもしないのにテキトーなことを言ったんでしょ?

304:デフォルトの名無しさん
09/08/06 18:28:46
怒ってもいいことなんてひとつもない。

305:デフォルトの名無しさん
09/08/06 20:07:09
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

306:デフォルトの名無しさん
09/08/06 20:11:55
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

307:デフォルトの名無しさん
09/08/06 22:54:49

   /         ドッカン
  / /    ,,_     ドッカン
 ━━━'), )=         ☆ゴガギーン
      ∧_∧ヽ\         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   ) 〉 〉_ _ ____      ∧_∧ ∠  おらっ!20行で書いてみろ
     / ⌒ ̄ / "'''"'|    ||     (`∀´ )  \___________
      |   | ̄l    |    |/      /     \
.      |    |  |     |    ||      | |   /\ヽ
       |   |  .|     |    |     へ//|  |  | |
      (   |  .|   ロ|ロ   ゙!l''ヽ/,へ \|_  |   | |
       | .lヽ \ |    |   ヽ\/  \_ / ( )
      | .|  〉 .〉    |    |        | |
     / / / / |     |    〈|      | |
     / / / / |     |    ||      | |
    / /  / / └─┴─┘       | |

308:デフォルトの名無しさん
09/08/07 02:26:58
ウケるのは最初の一回だけだぞ。


309:デフォルトの名無しさん
09/08/07 10:12:05
夏休みが終わるまではこんな調子が続くだろうからいくら言っても無駄だろうね。

310:デフォルトの名無しさん
09/08/13 17:30:46
なスレ汚し奉りそ

311:デフォルトの名無しさん
09/08/13 22:48:37
置き換えや検索を希望する訳ではないのですが、
[!#-'*-;=?-~]
が一体どういう動きをしているか知りたいです
一応説明では「URL文字にマッチ」となっているのですが、
どこがどのようにしてそれらの文字にマッチするよう働いているのか分かりません
環境は鬼車です

312:311
09/08/14 00:06:06
すみません自己解決しました
しばらく調べていたら範囲指定がらみで動いていたということが分かりました
どうもすみません

313:デフォルトの名無しさん
09/08/17 19:35:58
●正規表現の使用環境
鬼車

●検索か置換か?
置換

●説明
( から ) までの文字列にマッチ
マッチした文字列中に ABC が含まれている場合は
置換時に ABC を \1 で参照できる正規表現

●対象データ
smp("桁数:" + strABC.length);
smp("行数:" + cnt);

●希望する結果
smp(ABC);
smp();


検索文字列
\([^\)]*?(ABC)?[^\)]*?\)
置換文字列
(\1)
で試してみたのですが、ABCがある行も無い行も全て
smp(); になってしまいました。

どのように記述すればABCを取り出せるのか教えてください。

314:デフォルトの名無しさん
09/08/17 20:48:23
? 付け過ぎ

315:デフォルトの名無しさん
09/08/17 21:25:22
*?(ABC)? の部分が、"何もない" 状態にいきなりマッチするからじゃね?
場合分けの部分を親言語に任せる方が、文字列の否定を使うより楽かもしれない。

316:デフォルトの名無しさん
09/08/17 21:54:46
エディタの置換機能で実現したいので、こうなってます。
.*?の?は、付けておかないと(ABC)?.*?の部分に入ってくれないかと思い付けました。
結果的にマッチしていないので無意味ですが。。。

何か方法はありませんか?

317:デフォルトの名無しさん
09/08/17 22:13:33
3ステップに分ければ簡単だが
(1) smp\(.*(ABC).*\) → xxxxxxxxxxx(\1)
(2) smp\(.*\) → smp()
(3) xxxxxxxxxxx\((.*)\) → smp(\1)

318:デフォルトの名無しさん
09/08/17 22:30:30
ABCがマッチする場合|ABCがマッチしない場合

319:デフォルトの名無しさん
09/08/17 22:59:43
Javaでも20行未満で書けるレベルの処理だろうに。

320:デフォルトの名無しさん
09/08/17 23:02:20
正規表現は魔法じゃ無い!

321:デフォルトの名無しさん
09/08/17 23:16:18
>>319
またお前か。
エディタ上で使うって言ってるだろ。
何調子乗ってんだ?

322:デフォルトの名無しさん
09/08/17 23:18:12
>>319
と言うかその前に、JavaでCSV処理の話はどうなったんだ?
逃げたと思ったらコレだよ。
とっとと書いてみなよ20行君。

いや30行でも100行でもいいからさ。

323:デフォルトの名無しさん
09/08/18 07:48:03
この余白はそれを書くには狭すぎる

324:デフォルトの名無しさん
09/08/18 13:13:17
鬼車ってなんかエロい

325:デフォルトの名無しさん
09/08/18 14:03:04
>>324
kwsk


326:デフォルトの名無しさん
09/08/18 14:56:49
>>321
>>322

おいおい、釣りで書いてるだけだろ
なにヒートアップしてんだ


327:デフォルトの名無しさん
09/08/18 15:00:43
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

328:デフォルトの名無しさん
09/08/18 21:57:51
マジキチ

329:デフォルトの名無しさん
09/08/18 23:01:57
お願いします。

●正規表現の使用環境
bash(grepかegrepでお願いします。)

●検索か置換か?
置き換え

●説明
2行を1行にまとめたい。

●対象データ
>
(hogehoge.pampam)

●希望する結果
>(hogehoge.pampam)

ワガママ逝って申し訳ないのですが、
できればgrepだけで出来れば最高です。

330:デフォルトの名無しさん
09/08/18 23:19:33
>>329
grepに置換機能はないからムリ。

2行毎につなげるだけだったら、
#!/bin/sh
while read line
do
read line2
echo "$line$line2"
done

でよくない?


331:デフォルトの名無しさん
09/08/19 00:16:07
grepで置き換えとか無理だろ。
Javaなら20行未満で書けるレベルの処理だが。

332:デフォルトの名無しさん
09/08/19 00:35:11
>>331
は? 置換だけならJavaでも10行未満でいけるだろ。
それより20行未満でCSV処理はどうなったのかな?
布団被って泣いてるのかな?w

333:デフォルトの名無しさん
09/08/19 04:12:55
まー落ち着けよ。

Javaなら20行未満で書けるレベルの処理で大人気ないな

334:デフォルトの名無しさん
09/08/19 04:21:09
とりあえず落ち着きませんか?

Javaなら20秒未満で書けるレベルの処理で大人気ないと思いますよ

335:デフォルトの名無しさん
09/08/19 07:14:09
これは落ち着いたほうがいいかもわからんね

Javaなら20%未満のやる気で書けるレベルの処理で大人気ないっていう感想を持つ人もいるだろうし

336:デフォルトの名無しさん
09/08/19 08:05:54
以上、正規表現もJavaも全く解らない人たちが大喜びの映像をお届けいたしました。

337:デフォルトの名無しさん
09/08/19 08:22:25
Javaなら20行未満で書けるレベルの処理で勝利宣言されてもなあ…

338:デフォルトの名無しさん
09/08/19 10:51:23
sedでいいじゃない

339:デフォルトの名無しさん
09/08/19 10:58:45
javaでいいじゃない

340:デフォルトの名無しさん
09/08/20 08:01:32
viで

341:デフォルトの名無しさん
09/08/20 10:41:35
javaで書ける、って言うけど
どうせ javaで正規表現を書くんだろ?

 pattern = Pattern.compile("\\([^\\)]*?(ABC)[^\\)]*?\\)");

みたいな。やたら \ が増えまくって、かえって見にくい。
ディレクトリの区切り文字の \ にマッチさせるのに

 pattern = Pattern.compile("\\\\");

って \ を4回も書かなきゃならん。 \ 地獄だ。武○士だ!

342:デフォルトの名無しさん
09/08/20 12:05:04
Emacs Lisp の正規表現に比べたら別に大したことない。

343:デフォルトの名無しさん
09/08/20 18:33:59
>>341
ん?
\xがエスケープシーケンスになる言語はみんなそうなんじゃないの?

>>342
うむ。


344:デフォルトの名無しさん
09/08/20 19:41:20
>>343
文字列から生成する場合に限ればな
正規表現リテラルが存在する言語ならそれに付き合う必要はない

345:デフォルトの名無しさん
09/08/20 21:01:57
あーそうだった。忘れてた。thx


346:デフォルトの名無しさん
09/08/20 21:19:05
> pattern = Pattern.compile("\\\\");

ワロス
アホすぎるwww

347:デフォルトの名無しさん
09/08/20 21:43:56
よし、夏休み最後の一週間はJavaを勉強しちゃうゾ! ><

348:デフォルトの名無しさん
09/08/21 20:54:36
>>347
20行係を任ず

349:デフォルトの名無しさん
09/08/23 19:53:56
正規表現を使いこなしてる人でも、間違った正規表現を書いちゃうことってよくあるの?

350:デフォルトの名無しさん
09/08/23 19:57:39
間違った正規表現すら使いこなすよ

351:デフォルトの名無しさん
09/08/23 21:52:56
間違ってる事がわからないから、全部正解

352:デフォルトの名無しさん
09/08/23 23:10:06
想定したパターンが間違ってたってことは割とある
単語の文字列にハイフンが含まれることを考慮してなかったり

353:デフォルトの名無しさん
09/08/24 22:19:40
>>330
すんません、ありがとうございます。
シェルよくわからんのでしたが、すんごい参考になりました。

おかげでなんとか出来ました。
ありがとうございます。

354:デフォルトの名無しさん
09/08/25 00:05:17
日本語版でないですかね

Regular Expressions Cookbook
URLリンク(oreilly.com)
URLリンク(www.amazon.com)

355:デフォルトの名無しさん
09/08/25 16:48:49
色々試してみたのですがうまく動かないので教えてください。

●正規表現の使用環境
PHP 5.2.5

●検索か置換か?
検索 & 置換

●説明
絵文字用の文字列変換を考えています。
フォームのテキストエリアに入力された文字列から
##で囲まれた文字列を検索し置換したい。

●対象データ
いい天気ですね##A0F1##!!
(AF01は固定ではないです)

●希望する結果
##AF01##にヒットし、さらにAF01のみに置換したい。

自分が考えた正規表現は /#[2][A-F|0-9]{4}#[2]$/u
ですが、うまく動きません・・どなたかお願いします。

356:デフォルトの名無しさん
09/08/25 17:16:28
PHPはよう知らんが

s/##([A-F0-9]{4})##/$1/g

じゃないのか?



357:デフォルトの名無しさん
09/08/26 01:11:44
>じゃないのか?
って。
そうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

358:デフォルトの名無しさん
09/08/26 01:12:25
>じゃないのか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

359:デフォルトの名無しさん
09/08/26 10:11:15
いま、ものすごくバカっぽいレスを目にした気がした。

360:デフォルトの名無しさん
09/08/26 11:21:38
>どうして質問を質問で返すんだろ。
「質問を質問で返すな」と言い切る自信はないらしい。

361:355
09/08/26 11:28:27
>>356
ご返信ありがとうございます。
試してみたのですが、期待した動作にならなかったです。


362:デフォルトの名無しさん
09/08/26 12:28:28
>>357
ろくに回答もせず、人のレスに難癖付けるだけ、か…

哀れだな


363:355
09/08/26 14:10:51
あれから、色々自分で試行錯誤して

/#{2}([A-F|0-9]{4}#{2})/

でヒットするところまでは持っていけました。
後はなんとかなりそうなので、がんばってみます。
なんだかスレが荒れてしまったみたいで申し訳ありません。

364:デフォルトの名無しさん
09/08/26 14:19:43
おかしいのがはりついてるせいだから、あんま気にせず。

365:デフォルトの名無しさん
09/08/26 14:26:40
PHPはよう知らんが >>356 のでいけたよ。
# s/.../.../g とかは Perl 特有な演算子なのでそこらへんはよしなに

$str = preg_replace('/##([A-F0-9]{4})##/', '$1', $str);

これでどうですか?

366:デフォルトの名無しさん
09/08/26 14:55:40
>これでどうですか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

367:デフォルトの名無しさん
09/08/26 15:17:15
マジレスすると

(?:^|[^#])
##([A-F0-9]{4})##
(?:$|[^#])

368:デフォルトの名無しさん
09/08/26 15:28:42
「これでどうですか?」は質問じゃないだろ。

369:367
09/08/26 15:54:37
ん?
「####AF01##」のような文字列も置換していいのか。
条件反射してすまなかった。

370:デフォルトの名無しさん
09/08/26 16:36:03
/#{2}([A-F|0-9]{4}#{2})/ の縦棒(|)は多分こういう意味では?と予想。

/#{2}([A-F]{2}[0-9]{2})#{2}/

371:デフォルトの名無しさん
09/08/26 17:08:01
>>370
「対象データ」の「##A0F1##」にマッチしなさそう、とか。

372:デフォルトの名無しさん
09/08/26 17:40:08
>>370
文字クラスの連結のつもりだったとエスパー。


373:デフォルトの名無しさん
09/08/26 17:46:50
355です。

>>365
ありがとう!まさにこれが期待した動作です。
Perlに詳しくなかったのでPHP風に直せなかった自分の力不足で
動かなかったなどと言ってすみませんでした。

>>367
####AF01##は##「##AF01##」の部分だけ置換したいと思っています。
##は意味もなく使わせないようにしたいのですが、ユーザーがどういう意図で
使うかはわからない部分もあるのでそうしています。

後は答えていただいた方法をうまく組み込んでみます、ありがとうございました。



374:デフォルトの名無しさん
09/08/26 17:51:36
>>372
A-F|0-9はうまい方法が思いつかなかったのでこうしてます。

要するにA-Fまでと0-9までの半角英数字4文字が続いている場合となります。
0CAFの場合もありますし、DA16など4文字は確定で入り乱れている状態です。

これをうまく表現する方法がわからなかったので
調べながら書いてみたら動いたのでとりあえずこれでやってました。

375:デフォルトの名無しさん
09/08/26 18:01:24
>>374
[A-F|0-9]は、A-Fか0-9か'|'という意味だ。
つまり[|A-F0-9]や[A-F0-9|]も同じ意味になる。

おまえがやりたいことは[A-F0-9]で出来る。

まだ正規表現に慣れていないみたいだが、
Webアプリ開発では必須のスキルなので
これから勉強していくといい。

まずはフクロウ本を買うところから始めるべし。


376:デフォルトの名無しさん
09/08/26 19:23:33
| は ( ) の中で使うときと { } で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。

377:誤字った
09/08/26 19:24:20
| は ( ) の中で使うときと [ ] で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。

378:デフォルトの名無しさん
09/08/26 19:38:26
>>377
自己紹介?

379:デフォルトの名無しさん
09/08/26 19:40:23
( ) の中ってなに。。

380:デフォルトの名無しさん
09/08/26 20:38:26
{}かな。

381:デフォルトの名無しさん
09/08/26 23:33:37
拗音の「ぁぃぅぇぉゃゅょァィゥェォャュョ」と促音の「っ」が複数個連続した場合にSAPI5を使うソフトウェアがハングアップします。
ところが「うわぁぁぁぁ」のような表現は日常的に存在しているためにそのたびにハングアップして閉口してます。
正規表現で小さい文字を大きくすることは可能ですか?


382:デフォルトの名無しさん
09/08/26 23:40:53
ょぅι゛ょ

383:デフォルトの名無しさん
09/08/26 23:54:43
s/ょぅι゛ょ/ 妖女/

384:デフォルトの名無しさん
09/08/26 23:57:31
こすると大きくなるよ

385:デフォルトの名無しさん
09/08/27 00:04:25
こすったら膿出てきた

386:デフォルトの名無しさん
09/08/27 00:18:54
淋しい病気ですか

387:デフォルトの名無しさん
09/08/27 00:32:52
>>386
下手糞なツッコミ
もっと激しく!!

388:デフォルトの名無しさん
09/08/27 10:57:46
>>381
s/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/g

389:デフォルトの名無しさん
09/08/27 11:01:29
性器表現だけじゃできなそうだな。

390:デフォルトの名無しさん
09/08/27 11:20:00
tr/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/

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
s/ヮ/ワ/g

391:デフォルトの名無しさん
09/08/27 18:29:07
どうでもいいけどそれは SAPI5 とやらを直すべきではないのか?

392:デフォルトの名無しさん
09/08/27 19:12:10
マッチするなら電子メールアドレスである事が保証できる
正規表現を教えて下さい

393:デフォルトの名無しさん
09/08/27 19:24:33
完全にやるのはひどくおおごとで、
かつルール違反のアドレスが結構ある。

とりあえず使えればいいのであれば、メールアドレス 正規表現 で検索

394:デフォルトの名無しさん
09/08/27 19:44:38
DoCoMoもauも、ちょっと前までは連続ドット(RFC違反)の
メールアドレスが普通に作れちゃったから困ったもんだ。

395:デフォルトの名無しさん
09/08/27 19:52:12
>>392

まずググる、という発想すらできない君にはこれがお似合いだよ

.+@.+



396:デフォルトの名無しさん
09/08/27 21:16:55
>>391
「暗いと不平を言うよりも、すすんで明かりをつけましょう」

397:デフォルトの名無しさん
09/08/27 22:41:53
>>395
それじゃあ
> マッチするなら電子メールアドレスである事が保証できる
を満たしてないだろ。

これなら条件を満たすだろ。

[a-z]{6,30}@gmail.com

398:デフォルトの名無しさん
09/08/27 23:53:56
こっちの方がいい

[^@]+@gmail.com

399:デフォルトの名無しさん
09/08/27 23:58:02
>>397-398
やりがちだよなぁ、\.comとかのエスケープ忘れ
しかもそうそう異常判定が起きないから潜在的なバグになりやすい

400:397
09/08/28 00:26:28
>>399
ごめんなさい。反省します。

>>398
それだと「マッチするなら電子メールアドレスであることが保証できる」が満たせないよね。

401:デフォルトの名無しさん
09/08/28 00:57:19
命題トリックだな

402:デフォルトの名無しさん
09/08/28 01:02:24
連. はイケないとか
"に囲まれてるなら@も連.もおkとか
イカレてるわ

403:デフォルトの名無しさん
09/08/28 01:22:04
正規表現だけでなんとかしようって方がイカレてるわ

404:デフォルトの名無しさん
09/08/28 09:38:08
到達できないアドレスは電子メールアドレスとして保証されていると言えるの?

405:デフォルトの名無しさん
09/08/28 12:21:25
一般的には言えないかもしれないけど、
そこはこのスレのお題の範疇を超えるんで、気にしなくて良いんじゃないかと思う。

406:デフォルトの名無しさん
09/08/28 12:30:48
俺はKENT氏が使っているこれを利用してるけど

/[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/

407:デフォルトの名無しさん
09/08/28 13:25:52
KENT氏(笑)

408:デフォルトの名無しさん
09/08/28 13:30:29
KENT氏()笑

409:デフォルトの名無しさん
09/08/28 13:39:48
はいどうぞ URLリンク(www.din.or.jp)

410:デフォルトの名無しさん
09/08/28 13:43:16
>>409
うんざりしたw

これはRFCが悪い。

411:デフォルトの名無しさん
09/08/28 14:27:48
>>406
これはひどい。
local-partの記号類をまったく受け付けないじゃん。
Gmailの拡張アドレスが弾かれちゃうね。


412:デフォルトの名無しさん
09/08/28 14:29:02
>>411
「マッチするなら電子メールアドレスである事が保証できる 」
を満たせばおkなんじゃないの?

413:デフォルトの名無しさん
09/08/28 14:37:11
極端な話だけど/foo@example\.com/も条件を満たすよ
>>397はそういうジョークだろう


414:デフォルトの名無しさん
09/08/28 15:24:14
>>412
そういう意味ならなおさら >>406 はまるでダメでしょ。
電子メールアドレスでないものも余裕でマッチする。

415:デフォルトの名無しさん
09/08/28 15:27:38
これはどうなん?

URLリンク(search.cpan.org)

416:デフォルトの名無しさん
09/08/28 15:33:15
>>415
ああ、俺もそれ使ってるわ。

日本語の解説はこれな。
URLリンク(blog.livedoor.jp)


417:デフォルトの名無しさん
09/08/28 15:40:45
>>416
そのページにあるリンク先見てて思ったんだが
[.] とか [@] って何の意味があるんだろ。

ときどき目にするんだが。。

418:デフォルトの名無しさん
09/08/28 16:04:50
>>417
[@]はあんまり意味がないと思うけど、[.]は\.を使うよりいい(見やすい?)と、Damian Conway先生が
言ってたような気がする。

419:デフォルトの名無しさん
09/08/28 16:16:48
>>415
そこに書いてある、このモジュールを使えばいいんかな?

RFC::RFC822::Address -- RFC 822 style address validation. - search.cpan.org
URLリンク(search.cpan.org)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch