正規表現 Part5at TECH
正規表現 Part5 - 暇つぶし2ch850:デフォルトの名無しさん
09/04/09 08:26:40
スレ違いです

851:デフォルトの名無しさん
09/04/09 09:33:07
>>849
URLだかURIのRFCに正規表現がそのまま載ってた覚えがあるぞ。


852:デフォルトの名無しさん
09/04/09 10:00:37
http://([^/]+)
\1
でいいだろ

853:デフォルトの名無しさん
09/04/11 13:51:18
はあ?

854:デフォルトの名無しさん
09/04/11 14:28:59
h?http://([^/]+).* \r

$1 \r

855:デフォルトの名無しさん
09/04/11 14:31:31
>>849
“ホスト名”の定義があいまい
トップページへのアクセス先を取りたいということの場合に
sub.example.jpに対してトップはexample.jpではなくmain.example.jpだったら?

FQDNを抜き出すということなら自分はこうする
([^:/]+)(?=\/)

856:855
09/04/11 14:33:51
先頭に://と@の扱い入れるの忘れたや

857:デフォルトの名無しさん
09/04/11 23:42:47
ポートの事も、たまには思い出してください。

858:デフォルトの名無しさん
09/04/12 05:52:12
法令の条文の漢数字を算用数字に置換する正規表現を教えてください。

たとえば、

第一条    → 第1条

第十一条   → 第11条

第三十四条  → 第34条

第百条    → 第100条

第百二十三条 → 第123条

第三百二条  → 第302条

第千三条   → 第1003条

第千二十三条 → 第1023条

等です。ついでに、

第二百五十六条の二   → 第256条の2

第二百五十六条の二の一 → 第256条の2の1

なんかも置換できれば大変うれしいです

よろしくお願いします。


859:デフォルトの名無しさん
09/04/12 07:57:41
そりゃ正規表現だけじゃ無理だべ。
なんらかの言語の支援がないと。

860:デフォルトの名無しさん
09/04/12 09:33:59
「なんば君」HELP で検索。

861:デフォルトの名無しさん
09/04/12 12:40:41
なんで正規表現でやりたがるのか理解できない

862:デフォルトの名無しさん
09/04/13 00:18:11
魔法の呪文
正規表現

863:デフォルトの名無しさん
09/04/13 02:00:53
>>861 「なんで」うんぬん

たとえば、テキスト・ファイル中に

「まったく正規表現とは関係ないが、民事訴訟法第123条第2項は美しい!」

とかあった場合に、その行にカーソルをおいて特定のキーを押せば、
民事訴訟法第123条第2項の条文がポップ・アップで表示できるEmEditorの(Javascriptもどきの)
マクロを作って使用しているのですが、模範六法のCD等から落としたファイルの条文は
算用数字なのに、Webページで公開されている条文のなかには漢数字のものが多いので、
それを利用したいな、なんて思ったたわけです。

貴兄たちの異常な才能を信じてお願いしてみました。






864:デフォルトの名無しさん
09/04/13 02:06:18
そういう意味の「なんで」じゃ無いやろw

865:デフォルトの名無しさん
09/04/13 02:07:07
>>863
それは貴方の求める機能の目的であって、
そこに正規表現を使う理由にはならないでしょう?
およそ正規表現が引き合いに出されるような要求では無いように思いますが。

866:デフォルトの名無しさん
09/04/13 02:27:08
>>865

私が作ったマクロが正規表現で条項の検索をしているので、
そこのところを置き換えるだけですめばわたしにとって便利だ
という、たんなる自己中理由でした。

みなさんに不愉快な思いをさせたみたいですみません。



867:デフォルトの名無しさん
09/04/13 04:36:09
だから、何故正規表現云々の前に自分の環境を提示しないの? 馬鹿なの? 日本語学習中なの?

868:デフォルトの名無しさん
09/04/13 06:03:19
第三者だが、>>867は分かりにくいぞ。
>>863にEmEditorのマクロでと記載してあるが。

869:デフォルトの名無しさん
09/04/13 09:09:22
EmEditorのことは全然わからないけど
その Javascriptもどき ってヤツでプログラミングすればいいんじゃないの?

こんなのがあるけど参考になるかな・・・
URLリンク(d.hatena.ne.jp)

870:デフォルトの名無しさん
09/04/13 09:11:53
おっと、Javascript 版みっけ!
URLリンク(blog.livedoor.jp)

871:デフォルトの名無しさん
09/04/13 09:14:41
ついでに Excel
URLリンク(www.windows-world.jp)

872:デフォルトの名無しさん
09/04/13 22:44:12
●正規表現の使用環境
Flexible Renamer(Perl5互換)

●検索か置換か?
置換

●説明

サクラエディタでNCプログラムの編集をしています
可能かどうかわかりませんが以下のような形式で
Nの後の番号を振り直すというのはできるでしょうか?


●対象データ
N10 ABC
N10 DEF
N30 GHI
N100 JKL
N50 MNO

●希望する結果

N10 ABC
N20 DEF
N30 GHI
N40 JKL
N50 MNO

873:デフォルトの名無しさん
09/04/13 23:08:53
そういうのは正規表現の仕事ではありません

874:872
09/04/13 23:22:10
>>873
了解です、できないと事がわかったので感謝します

875:デフォルトの名無しさん
09/04/14 01:36:46
たしかに
....replace(/^N\d+/, "N" + n); n += 10;
のようにやるよりは
{ $1 = "N" (10 * NR); print }
の感じのほうがいいな。

876:taguti
09/04/14 14:41:40
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!



877:デフォルトの名無しさん
09/04/14 14:47:38
それを正規表現でやるのか

878:デフォルトの名無しさん
09/04/14 16:15:56
包茎が治る正規表現を教えてください。
先っぽの皮が余ってしょうがないんです。
お願いします!!

879:デフォルトの名無しさん
09/04/14 22:41:17
>>876
これはひどいwww
ここまで来ると逆に尊敬するマルチ野郎だな。
スレリンク(tech板:493番)
スレリンク(tech板:770番)
スレリンク(tech板:499番)
スレリンク(tech板:774番)
スレリンク(tech板:876番)
スレリンク(tech板:66番)
スレリンク(tech板:499番)
スレリンク(tech板:808番)
スレリンク(tech板:821番)
スレリンク(tech板:16番)
スレリンク(tech板:934番)
良識を疑うよ。


880:デフォルトの名無しさん
09/04/14 22:54:02
>>879
すれ違いだけど
俺もそれ学校の問題で出されたことある。
定番かな。構造体使うC言語の問題で。
はっきりいって、三角形の公式使わないほうが楽だよね。
一点を原点移動して例の公式を適用するのが一番シンプルだと思う。

881:デフォルトの名無しさん
09/04/15 18:25:02
>>876
ヘロンの定理でググれカス。

882:デフォルトの名無しさん
09/04/15 20:12:01
>>881
不覚にも

883:デフォルトの名無しさん
09/04/16 00:50:48
何と戦ってるんだろう

884:デフォルトの名無しさん
09/04/16 12:31:02
>>879
そんな事より
答え書けよ!

885:デフォルトの名無しさん
09/04/16 13:25:44
>>881
ヘロンの定理
イラナイだろ
とんち問題だよ

886:デフォルトの名無しさん
09/04/16 13:39:16
>>880 >>881
ヘロンの定理で良いから
プロ書いてみたら


887:デフォルトの名無しさん
09/04/16 13:58:24
いや、どう考えてもプログラミングしてくれってのがおかしいだろ。
正規表現のスレで出る話題じゃない。

888:デフォルトの名無しさん
09/04/16 14:04:39
#include <stdio.h>
#include <math.h>
int main(void)
{
double x1, y1, x2, y2, x3, y3;
double a, b, c, s, S;
#define INPUT(x) printf(#x ": "); scanf("%lf", &x)
INPUT(x1); INPUT(y1);
INPUT(x2); INPUT(y2);
INPUT(x3); INPUT(y3);
a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0;
S = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形の面積は %lg\n", S);
return 0;
}

889:デフォルトの名無しさん
09/04/16 19:48:18
ヘロンの公式キターーー

890:デフォルトの名無しさん
09/04/16 20:06:18
>>888
こういう一見親切そうな行動をする人間が、世の中のすべてを駄目にする。

891:デフォルトの名無しさん
09/04/16 20:26:15
ヘロンの公式とかこの問題を解くのにふさわしくない

892:デフォルトの名無しさん
09/04/16 20:36:33
>>891
照合するのに使う

893:デフォルトの名無しさん
09/04/16 20:38:14
>>890
お舞いも
書いてみたら

894:デフォルトの名無しさん
09/04/16 20:56:34
性器表現できません><

895:デフォルトの名無しさん
09/04/16 21:54:39
行列式でも出るよ
さあ誰か書け

896:デフォルトの名無しさん
09/04/16 22:04:04
↑お麻衣が書くニダ

897:デフォルトの名無しさん
09/04/16 22:17:53
>>876
>それぞれに実数つを読み込んで

ココ
とても難しい
どこから?
どうやって?

それで
乱数で与えてみる

898:デフォルトの名無しさん
09/04/16 22:44:34
ヘロン公式は
√を使うから
誤差はどう?

899:デフォルトの名無しさん
09/04/16 22:49:03
JavaScriptが動く HTML実験部屋
URLリンク(homepage2.nifty.com)


900:デフォルトの名無しさん
09/04/16 23:01:38
<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>


901:デフォルトの名無しさん
09/04/16 23:02:20
>>888 >>900>>899

902:デフォルトの名無しさん
09/04/16 23:13:33
/*倍率*/ M=1000; // 変更

903:デフォルトの名無しさん
09/04/16 23:20:59
言語Perlです。

あるCのソースから構造体(typedefも)を抽出したいのですが、
この例のようなstructやunionを含んでるstructを
マッチさせるにはどう書けばいいんですか?

struct A{
  unsigned short a;
  unsigned long b
  char*      c;
  struct{
   long e[8];
   long f;
  }d;
};



904:デフォルトの名無しさん
09/04/16 23:24:21
↑一旦文字変換してから
matchさせると良い

905:デフォルトの名無しさん
09/04/16 23:29:33
-21761253.57183114  8544355.772346469  61664545.39556769  62137654.31616132  79934094.82325418  66218011.1129441  659766221291321.5  319359195447661.56  340407025843659.94

906:デフォルトの名無しさん
09/04/16 23:47:31
たとえば?

data=list*->A.c;
if(data.match(/.*/)){

}

907:デフォルトの名無しさん
09/04/16 23:48:55
x=(79934094.82325418)-(-21761253.57183114);
y=(66218011.1129441)-(8544355.772346469);

908:デフォルトの名無しさん
09/04/17 00:15:56
>>903
>この例のようなstructやunionを含んでるstructを
一般に、任意にネストできる構造は正規表現で照合できない
(実は、「Perlの」正規表現ではできてしまうけど、ごちゃごちゃしたものになるので
オススメしない)。正確に抽出したいならCのパーザを自前で書くか、どっかからCのパーザ
拾ってくるのが良い

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


910:デフォルトの名無しさん
09/04/17 00:28:10
誤差を検証してみた
その結果√を使用すると
誤差が大きいと判断される

>>909>>900>>888

JavaScriptが動く HTML実験部屋
URLリンク(homepage2.nifty.com)


911:デフォルトの名無しさん
09/04/17 00:44:36
perl5.8.8を使用しています。

<td>タグの中身を取得したいのですが、ネストしている場合は、
内側のタグのみを対象としたいです。

そこで否定先読みで<td>と</td>の間の文字列でかつ、"<td>"に続かない
ものにマッチするという正規表現を書こうとしています。

現状では以下のような感じです。

$_ =<<DATA;
<td>データ1</td>
<td>
<tr>
<td>データ2</td>
</tr>
</td>
DATA

# 内側のテーブルタグのみにマッチさせたい
@res = /<td>(?![\s\w<>]+?<td>)[\s\S]+?<\/td>/gm; # こっちはOK
#@res = /<td>(?![\s\S]+?<td>)[\s\S]+?<\/td>/gm; # NG

分からないのはNGと書いた方が上手く動かない理由です。
現象としては、否定先読み条件の中の最短マッチが適用されていないように思います。
上の例ですと、データ2のみが取得されてしまいます。

修正方法を教えていただけないでしょうか。

912:デフォルトの名無しさん
09/04/17 02:14:58

[\s\S]って
.
と同じ?


913:デフォルトの名無しさん
09/04/17 02:36:13
>>911>>910  サンプル
<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*可変*/ N=1000; P='';
P+=('<style>td,th{font-size:10;} </style><table border=1><tr>');
P+=('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>');
P+=('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>');
P+=('<th>ヘロン公式による<br>√を使った面積計算結果 </th>');
P+=('<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;

P+=('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示
P+=('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>');
P+=('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td></tr>');}P+=('</table>');

data=P; data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1 消去$3'); document.write(data);
</script>


914:デフォルトの名無しさん
09/04/17 02:37:52
>>911
これを参考に・・・

data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1消去$3');

915:デフォルトの名無しさん
09/04/17 02:51:50
>>895
せっかく>>876を行列式で書くなら
3D空間で同様に書いてみたら?
つまり宇宙的規模と言う事です。

(x1,y1,z1) (x2,y2,z2) (x3,y3,z3)


916:デフォルトの名無しさん
09/04/17 02:54:13
↑2Dサンプルは>>910参照

917:デフォルトの名無しさん
09/04/17 03:08:46
>>912

同じといえば同じ。
ただし、. と違って常に改行にもマッチする。

否定形で使うと何ともマッチすることのないものになる。




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