- 1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ]
- 正規表現(Regular Expression)スレです。
質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 前スレ 正規表現 Part4 pc11.2ch.net/test/read.cgi/tech/1186030400/
- 910 名前:デフォルトの名無しさん [2009/04/17(金) 00:28:10 ]
- 誤差を検証してみた
その結果√を使用すると 誤差が大きいと判断される >>909 ⇒ >>900 ⇒ >>888 JavaScriptが動く HTML実験部屋 ttp://homepage2.nifty.com/tomoarai/java/exper.html
- 911 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/04/17(金) 02:14:58 ]
- ↑
[\s\S]って . と同じ?
- 913 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/04/17(金) 02:37:52 ]
- >>911
これを参考に・・・ data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1消去$3');
- 915 名前:デフォルトの名無しさん [2009/04/17(金) 02:51:50 ]
- >>895
せっかく>>876を行列式で書くなら 3D空間で同様に書いてみたら? つまり宇宙的規模と言う事です。 (x1,y1,z1) (x2,y2,z2) (x3,y3,z3)
- 916 名前:デフォルトの名無しさん [2009/04/17(金) 02:54:13 ]
- ↑2Dサンプルは>>910参照
- 917 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 03:08:46 ]
- >>912
同じといえば同じ。 ただし、. と違って常に改行にもマッチする。 否定形で使うと何ともマッチすることのないものになる。
|

|