- 1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ]
- 正規表現(Regular Expression)スレです。
質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 前スレ 正規表現 Part4 pc11.2ch.net/test/read.cgi/tech/1186030400/
- 751 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 20:58:11 ]
- C#を使っています
string か strin か stri か str か st か s にマッチするパターンを今は↓のように書いているんですが ^s(t(r(i(n(g)?)?)?)?)?$ もっと分かりやすい書き方ってありますか?
- 752 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:42:23 ]
- >>750
検索キー 「test.txt」
- 753 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:44:47 ]
- >>750
/([^\/]+\/)*(.*)/ で、\1がパス、\2がファイル名。
- 754 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:54:31 ]
- >>750
秀丸エディタなら↓これでいけた。他は知らん (?<=.+/)test
- 755 名前:デフォルトの名無しさん [2009/02/19(木) 22:57:56 ]
- >>750
test\.txt$ でどうでしょう
- 756 名前:デフォルトの名無しさん [2009/02/19(木) 22:59:13 ]
- >>750
少し修正 test\.txt[\r\n$]
- 757 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 23:00:16 ]
- ひどくなってるYO
- 758 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:01:43 ]
- test\.txt(?=$|\b|[\r\n])
- 759 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 02:53:45 ]
- YoutubeをダウンロードするFirefoxのuserchrome.jsスクリプトの一部なんだけど
var[ \r\n\t]+swfArgs[ \r\n\t]*=[ \r\n\t]*\{(.*,|)[ \r\n\t]*(t|'t'|"t")[ \r\n\t]*\:[ \r\n\t]*['"]([a-zA-Z\-_0-9]+=)['"].*\} の(.*,|)の意味するところがわからない。 ↑ |って○○か××を意味するメタ文字じゃないの?なんで)の直前にあるんだろう?
- 760 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 03:00:42 ]
- (foo|) は (foo)? と同じ意味では。
- 761 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 03:13:23 ]
- .*0か1個以上ある?じゃあ.+と同じ?
- 762 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 08:04:22 ]
- はあ?
- 763 名前:750 mailto:sage [2009/02/20(金) 08:57:02 ]
- みなさんレスありがとうございます
例えが悪かったですが実現したいのはデスクトップの検索エンジンでのファイル名検索でファイル名のみで検索したいのです。 みなさんのレスを参考に思考錯誤してみます
- 764 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 20:27:44 ]
- >>759
"t": "([^"]+)" 俺は、これで済ませてるw
- 765 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 21:39:41 ]
- すみません(foo)?の意味がわかりません教えてください
>>764 それでいけるよねw
- 766 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 21:02:25 ]
- >>751
C#なら s.Length > 0 && "string".StartsWith(s) のようにやればいいのに。
- 767 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:43:45 ]
- 女のコの性器表現てどれくらいの種類があるんだろう
- 768 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:56:18 ]
- 単語だけならともかく、そんなのは文脈によって変わるし、
『×××』だけでもそれを表すことができる上に、『大事なところ』などボカした表現までスコープを広げると とても現代の正規表現で賄いきれるものではない。 言語学の分野で議論してくるがいい。
- 769 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:45:51 ]
- C#でWBCかワールド・ベースボール・クラシックのどちらかを含み、かつイチローか松坂のどちらかを含むline、と正規表現で
if (Regex.Match(line,"(WBC|ワールド・ベースボール・クラシック) && (イチロー|松坂)").Success) と書いてみたのですが、いまいちうまくヒットしないです。アドバイスお願いします。
- 770 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:15:33 ]
- 正規表現の中に && とか画期的すぎるだろ・・・
テンプレの正規表現講座でも見ておいで
- 771 名前:751 mailto:sage [2009/02/24(火) 22:56:03 ]
- >>766
確かにその方がわかりやすいですね ありがとうございます
- 772 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 10:58:18 ]
- if (Regex.Match(line, "(WBC|ワールド・ベースボール・クラシック)").Success && Regex.Match(line, "(イチロー|松坂)").Success)
でいいんじゃね?C#知らないけど。 AND増えるなら条件を配列に入れてループで。
- 773 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:46:56 ]
- line = "ぽにょワールド・ベースボール・クラシックぽにょイチローぽにょ"
Set RegExp1 = new RegExp Set RegExp2 = new RegExp RegExp1.Pattern = "WBC|ワールド・ベースボール・クラシック" RegExp2.Pattern = "イチロー|松坂" If RegExp1.Test(line) And RegExp2.Test(line) Then Wscript.Echo "うんこ" End If
- 774 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:49:30 ]
- >>772
Regex.Match の使い方が間違ってる。ちゃんと説明書読んだ?
- 775 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 14:22:03 ]
- C#知らないと言っている人にそんな指摘してもなあ
- 776 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:22:22 ]
- C# カンケーない。Regex.Match の使い方が間違ってる。
- 777 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:42:59 ]
- >>769>>772
if (Regex.Match(line, "WBC|ワールド・ベースボール・クラシック").Success && Regex.Match(line, "イチロー|松坂").Success) で良いが、IsMatchのほうが良さげ。 if (Regex.IsMatch(line, "WBC|ワールド・ベースボール・クラシック") && Regex.IsMatch(line, "イチロー|松坂"))
- 778 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 19:33:25 ]
- 少しお聞きします。
1hage(100禿) 1hage(10毛) 1hage という文字列があった場合に、1hage(100禿)以外をマッチさせたいのですが、 なかなかうまくいきません。 どのように正規表現を書いたものでしょうか?
- 779 名前:778 [2009/02/27(金) 19:34:25 ]
- >>778
すいません。追記です。 具体的には、"hage"をヒットさせたいのですが、"禿"を含むもののみマッチさせないようにしたいのです。
- 780 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 19:36:03 ]
- 1hage にマッチしたものから 1hage(100禿) にマッチするものを取り除く、
じゃダメなのか? どうしても1個の正規表現でやんないとダメ?
- 781 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:30:52 ]
- >>780
うん、やっぱりそれの方がスマートでよいですよね・・・ わかりました。 無理に正規表現だけでやらないとことにします。 ありがとうございました。
- 782 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:16:03 ]
- 文章中に「A」と「AA」が混在していて、
1文字だけの「A」を2文字の「AA」にします。 2文字以上連続していない、1文字だけの「A」は どうやったら探せますか? /A{1}/ でも駄目ですし、/A[^A]/ だと 行の中に A しかない物が引っ掛かりません。
- 783 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 16:40:50 ]
- D:\jspsh>jspsh.exe
js> "A AA AAA".replace(/(^|[^A])A([^A]|$)/g, "$1AA$2") AA AA AAA js> :q Leaving "JScript Power Shell"
- 784 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 21:51:49 ]
- タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ホ
- 785 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:10:33 ]
- >>783
ありがとう、試してみます。
- 786 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:45:20 ]
- /(?<!A)A(?!A)/
- 787 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:28:35 ]
- <A href="○○○○○○○">●●●●●</a>
と <A href="○○○○○○○"><hogehogetag>●●●●●</hogehogetag></a> という文字列から●●●●●を取り出したいのですが どうやって書いたら良いか教えてケロ 決まってるのは<A href="○○○○○○○">の次の<>の外の文字列ということです。
- 788 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:14:08 ]
- >>5みたいに書けばいいよ
- 789 名前:デフォルトの名無しさん [2009/03/12(木) 17:29:29 ]
- 「から最初の」までってどうやって抜き出すんですか?教えてください
- 790 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 17:40:07 ]
- 「[^」]*」
- 791 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 17:53:29 ]
- ありがとうございました
- 792 名前:デフォルトの名無しさん [2009/03/13(金) 00:14:55 ]
- SQL(SELECT、UPDATE、INSERT、DELETEが不明)から、
テーブル名をマッチさせる正規表現が解る方、どなたかいらっしゃらないでしょうか? ひとつの表現で不可能なら、複数でもいいのですが…(´・ω・`)
- 793 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:25:51 ]
- SQLの構文解析は正規表現じゃ無理
- 794 名前:デフォルトの名無しさん [2009/03/13(金) 01:07:40 ]
- 金額の文字にマッチするにはどう書けばよいですか?
123,456,789 ←こういうの
- 795 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 01:20:24 ]
- \d{1,3}(,\d\d\d)* かな
- 796 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 08:53:14 ]
- 複雑な正規表現のテストってどうすればいいんだろうね。
自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。
- 797 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 08:57:59 ]
- 製品名を「鼻から悪魔」にしておけば何も問題は無い
- 798 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 12:11:43 ]
- >>796
私も以前、このスレではない所で同様の質問をしたが、真面目な答えは 返ってこなかったよ。正規表現から見るとプログラムテストは鬼門かもね。
- 799 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 12:21:24 ]
- 複雑なC言語プログラムのテストってどうすればいいんだろうね。
自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なjavaのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なPHPのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なバッチファイルのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なExcelマクロのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 ・・・正規表現に限った話ではない。 >自分に都合のいいデータだけ作ってやってるけど。 問題の原因がハッキリわかってるじゃないか。それを対処すればいいじゃないか? 自分に都合のいいデータを作ってしまうのが問題なら、他人にデータを作ってもらえばいい。
- 800 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 12:42:08 ]
- >>796
やったことはないが、本気でやるなら、こんな感じになるんだろう。 1.マッチすべきパターンについて構文木を作る 2.構文木を元に直交表を作る 3.実験計画法でテストケースを作る 4.テストケースをテストプログラム化する
- 801 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 14:59:43 ]
- >>799
プログラム言語の場合はステップごととか、プロセジャーや 関数に分割してテストするし、型も助けになる。 正規表現の対象としているのは文字列でここから先は構文解析 しかない。複雑な組み込みシステムの入口、出口でどんな テストデータを用意すればよいかというのと類似した問題だ。
- 802 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:26:09 ]
- www.honya-town.co.jp/hst/HTdispatch?isbn_cd=4062574993
上記のwebページから以下の「マンガホーキング入門」の部分を取り出したいのですがうまくいきません <tr> <td bgcolor="#efefef" width="15%" align="center" nowrap><small> 書 名 </small></td> <td width="85%"><font color="#333399" size="+1"> <strong> マンガホーキング入門 </strong> </font></td> </tr> "<strong>(.+?)</strong>"だとここ以外の強調部分もマッチしてしまうので "書.*?名.+?<strong>(.+?)</strong>"のようにしたのですがこれだとひとつもマッチしてくれません どのようにするべきなのでしょうか?
- 803 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:28:20 ]
- あれ、書 名 の部分は実際は書&nbsp;&nbsp;名です(&=>&)
- 804 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:36:57 ]
- 自己解決しました
「.」は\nを含まないのでだめだったようです "書.*?名.+?\n.+?<strong>(.+?)</strong>"でいけました スレ汚しすみませんでした
- 805 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:51:43 ]
- JavaやC#に正規表現のコンパイル機能があるけど、あれって意味あるのかな?
いつも可読性を優先してRegex.Match(data,pattern)みたいに直接使ってるんだけど、 コンパイルが必要になるほど性能が必要な正規表現ってどんなのがあるん?
- 806 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:00:44 ]
- >>805
一般論的に正規表現のコンパイルというと、何度も同じ正規表現を 使うときに差が出る。 それが有意な差になるかはプロファイル取ってみないとわからないけど。 ところで可読性なら生の正規表現よりも定数とかに入れて 名付けた方がいいんじゃない?めんどくさいけど。
- 807 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:06:30 ]
- >>805
perlでo使ったらうれしいときと同じだよ。
- 808 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:09:58 ]
- >>806
>ところで可読性なら生の正規表現よりも定数とかに入れて >名付けた方がいいんじゃない?めんどくさいけど。 コード体系とかのパースの場合は定数化してるよ。 "Key: Value"なデータのパースとかはハードコードかな。 わざわざファイル移動で確認させる価値もないし。
- 809 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 02:47:41 ]
- ルールを変更可能にするため外部化、ってのもよくあるパターンだと思うけど。
- 810 名前:デフォルトの名無しさん [2009/03/26(木) 17:50:58 ]
- hoge.out.csvを引っ掛けないで、mage.csvやhage.csv
を引っ掛けるにはどう書いたらいいんでしょうか? .*\.csvを引っ掛けたいのですが、.outが含んでいるときはだめ、という形です。 /[\w\0-9]+(?!\.out)\.csv/ みたいに書いてみたのですが、.out.csvも.csvもともに引っかかってしまいます。
- 811 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:01:21 ]
- >>810
/(?<!\.out)\.csv/
- 812 名前:810 mailto:sage [2009/03/26(木) 19:59:19 ]
- >>811
ありがとう。 結局こんな感じで行けました。 /^[^\.]*(?!\.out)\.csv/
- 813 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:41:48 ]
- >>812
それ単に.csv以前に「.」を含まないものにマッチだから、 hoge.hoge.csv はマッチしないけどそれでいいの? .outは含んでないよ。
- 814 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:05:41 ]
- >>812
否定先読みはきちんと理解出来てる? もう一度パターン眺めてみると良いかも。
- 815 名前:デフォルトの名無しさん [2009/03/29(日) 11:05:44 ]
- すみません、似た質問になるのですが
ファイル名が1行の中に列挙されていて たとえば、hoge1.zip hoge3.zip hoge5.exe のような場合に 行中に .zipでない拡張子が含まれるという条件にマッチする正規表現は可能でしょうか。 ファイル名の区切りは、スペースを仮定します。
- 816 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 11:58:50 ]
- .+\.(?!zip).{3}
こんな感じ?拡張子は3文字として決め打ちしてるけど。 ファイルとファイルの間にスペースがあるなら、スペースまでのマッチに工夫すれば良いと思うよ。
- 817 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:57:55 ]
- vbsです。
1.txtを\dでマッチさせようとしているのですが、 01がマッチしてしまいます。 a.txtを\Dで待ちさせようとすると 0aがマッチしてしまいます。 どうして2バイトになるのでしょうか?
- 818 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:30:47 ]
- 確認方法が間違ってるんじゃね?
- 819 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:18:23 ]
- >>818
そうでした。すみません。
- 820 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:29:32 ]
- ●正規表現の使用環境
.NET 1.1 (C#) ●説明 テキストボックスに入力された文字の最後が 大文字小文字関係なく .csv と入力されているか 判断したいです。 if (textBox1.Text.EndsWith(".csv")) とすると、小文字のcsvでないとTRUEを返してくれません。 .NET2.0以上なら、EndsWith(".csv", 大文字小文字無視) のように書けるのですが、1.1だとそのメソッドがありません。 恐れ入りますが、ご教授おねがいします。
- 821 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:04:39 ]
- 素直な方法が使えないなら、多少は面倒だけど
うしろから4文字を取ってきて、小文字化してから".csv"と比べるとか。
- 822 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:30:59 ]
- >>821
あっ、その方法がありましたね。 自分の頭が固かったです。 文字列を一旦小文字にしてから 比較することで無事解決できました。 どうもありがとうございました。
- 823 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:31:31 ]
- 何にもマッチしない正規表現というのは表現可能でしょうか?
どのように記述したものでしょうか?
- 824 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:34:26 ]
- Perl正規表現雑技
www.din.or.jp/~ohzaki/regex.htm#Nothing ここにありました。 (?!) こんな簡単なのでいいんですね
- 825 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:52:58 ]
- 否定先読みで全ての要素を否定してるから、何にもマッチしないって事だね。
良いんでない?
- 826 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:27:36 ]
- /xxx/sss/ccc/fff/ggg/aaa.txt
と言う感じで任意の回数スラッシュが出てくるんですが、一番最後のスラッシュ だけをsedで "/"→"/tmp/"に置き換えたいんです。 正規表現を使って置換可能でしょうか?記述が全く思いつきません、、、
- 827 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:53:02 ]
- >>826
s/(\/[^/]+)$/\/tmp\1/g
- 828 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:53:15 ]
- >>826
s:/[^/]*$:/tmp&:
- 829 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 21:32:38 ]
- 否定先読みでマッチさせてもいいかもね。
- 830 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 22:56:23 ]
- というか、一番最後のスラッシュっていう条件はまだ甘い方だと思うんだけど。
全く思いつかないってのは単に勉強不足じゃない?
- 831 名前:826 mailto:sage [2009/04/08(水) 00:19:51 ]
- >>827-830
色々アドバイスありがとうございます。 828氏の記述で期待通りの処理が出来ました。 >>830 すみません、仰るとおりで。 書いた後色々グググって、IBMのページ www.ibm.com/developerworks/jp/linux/library/l-sed2/index.html の"円記号付き括弧"を参考にした漏れなりの解↓ 's/\(.*\)\/\(.*\)/\1\/tmp\/\2/g' 自分で書いておきながら、何でこれが一番最後のスラッシュにマッチするのか よく分かってない('A`
- 832 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 01:04:48 ]
- マッチっていう意味ならスラッシュのある一行全体にマッチしてる。
で、最初の括弧が\1、次の括弧が\2としてマッチ。 というか\2の辺り削ってもいいんじゃないかと。 s/(.*)\//\1\/tmp\//g
- 833 名前:826 mailto:sage [2009/04/08(水) 01:26:34 ]
- >>832
いや、分からないのは、's/\(.*\)\/\(.*\)/\1\/tmp\/\2/g' この表現で何故 aaa/tmp/bbb/ccc/ddd/eee/fff.txt とならずに aaa/bbb/ccc/ddd/eee/tmp/fff.txt と、一番最後のスラッシュが対象になるのかなぁ、と。
- 834 名前:デフォルトの名無しさん [2009/04/08(水) 01:44:41 ]
- bregonig.dllのバグとおもう。デミリタを換えると関数が失敗してる。
#include <windows.h> #include <iostream> #include <string> using namespace std; typedef struct bregexp { const char *outp; const char *outendp; int splitctr; const char **splitp; int rsv1; char *parap; char *paraendp; char *transtblp; char **startp; char **endp; int nparens; } BREGEXP; typedef int (WINAPI *fa)(char * , char * , char * , BREGEXP ** , char *); typedef void (WINAPI *fb)(BREGEXP *); main(){ char bunsyo[26]="abcdefghijklmnopqrstuvwxyz"; char findstr[]={0xA5, 0xEA}, *p, msg[80]; HINSTANCE hd = LoadLibrary("bregonig.dll"); fa BMatch = (fa)GetProcAddress(hd,"BMatch"); fb BRegfree = (fb)GetProcAddress(hd,"BRegfree"); string str = "m/" + (string)findstr + "/i"; char c=47; str[1]=str[28]=c; { BREGEXP *rxp = NULL; if( BMatch( &str[0], bunsyo, bunsyo+26, &rxp, msg) ) { cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit "; BRegfree(rxp); } cout<<"デミリタ "<< c <<" は通る\n"; c=1; str[1]=str[28]=c; { BREGEXP *rxp = NULL; if( BMatch( &str[0], bunsyo, bunsyo+26, &rxp, msg) ) { cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit "; BRegfree(rxp); } cout<<"デミリタ "<< c <<" は通る\n"; }
- 835 名前:834の修正。 これが動作しません [2009/04/08(水) 02:11:11 ]
- #include <windows.h>
#include <iostream> #include <string> using namespace std; typedef struct bregexp { const char *outp; const char *outendp; int splitctr; const char **splitp; int rsv1; char *parap; char *paraendp; char *transtblp; char **startp; char **endp; int nparens; } BREGEXP; typedef int (WINAPI *fa)(char * , char * , char * , BREGEXP ** , char *); typedef void (WINAPI *fb)(BREGEXP *); main(){ char bunsyo[7]="abcdef/"; char findstr[4]={0x2F, 0xA5, 0xEA, 0}, *p, msg[80]; HINSTANCE hd = LoadLibrary("bregonig.dll"); fa BMatch = (fa)GetProcAddress(hd,"BMatch"); fb BRegfree = (fb)GetProcAddress(hd,"BRegfree"); string str=(string)"m/" + (string)findstr + (string)"/i"; char c='/'; str[1]=str[9]=c; { BREGEXP *rxp = NULL; if( BMatch( &str[0], bunsyo, bunsyo+7, &rxp, msg) ) { cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit "; BRegfree(rxp); } cout<<"デミリタ "<< c <<" は通る\n"; c='*'; str[1]=str[9]=c; { BREGEXP *rxp = NULL; if( BMatch( &str[0], bunsyo, bunsyo+7, &rxp, msg) ) { cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit "; BRegfree(rxp); } cout<<"デミリタ "<< c <<" は通る\n"; }
- 836 名前:デフォルトの名無しさん [2009/04/08(水) 02:14:16 ]
- 検索しようとする文字列に、特定の文字が含まれている場合、
デミリタを「/」以外にするとバグるようなんです。 しかし、検索しようとする文字に「/」が含まれている場合は別のデミリタを使うしか無く困ります。
- 837 名前:デフォルトの名無しさん [2009/04/08(水) 02:40:05 ]
- サクラエディタで検索してもバグらないし、ソースコードみても回避方法わからなかった
- 838 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 04:20:23 ]
- >>833
最大マッチと最小マッチの差じゃない? sedは知らんけど
- 839 名前:836 [2009/04/08(水) 04:27:12 ]
- 次の文字でバグりました。
40 41 42 43 63 91 92 129 EUC全角カタカナ「リ」
- 840 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 04:39:05 ]
- そりゃエスケープせんと。例えばasciiの40って、'('じゃないか。
- 841 名前:836 [2009/04/08(水) 05:14:28 ]
- 特殊文字はわかりました。しかし「リ」を含む文字でも間違えるんです。
検索対象には含まれていないのに、含まれているとなるんです。
- 842 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 06:55:23 ]
- どう間違えているか判らんが、cp932対応のエンジンにeucを食わせたらそりゃぁ、混同するさ。
- 843 名前:836 [2009/04/08(水) 08:09:39 ]
- BREGEXPってバイナリの正規表現が出来るとおもってた。
Bは馬場さんのBでバイナリではなかったのか。
- 844 名前:836 [2009/04/08(水) 08:16:09 ]
- 書いてありました。
5.制限事項・注意事項 Oniguruma 自体は各種文字エンコーディングに対応していますが、 bregonig.dll は Bregexp.dll との互換性のため、ASCII と Shift_JIS 以 外の文字エンコーディングは使用できません。
- 845 名前:鬼車を弄くった。これで任意の文字でいけるだろうか [2009/04/08(水) 10:14:16 ]
- #include <windows.h>
#include <iostream> #include <string> using namespace std; #include "oniguruma.h" #pragma comment(lib, "onig.lib") char *Bfind(char *start,char *end, string ptn, int *size){ int r; regex_t* reg; OnigErrorInfo einfo; char *p=NULL; *size=0; r = onig_new(®, (UChar*)&ptn[0], (UChar*)&ptn[ptn.size()] ,ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo); if (r != ONIG_NORMAL) return NULL; OnigRegion *region = onig_region_new(); r = onig_search(reg, (UChar*)start, (UChar*)end, (UChar*)start, (UChar*)end, region, ONIG_OPTION_NONE); if (r >= 0) { *size=region->end[0]-region->beg[0]; p= start+r; } onig_region_free(region, 1 ); onig_free(reg); onig_end(); return p; } char *Bpick(char *start, char *end, string ptn, string &str){ int r; regex_t* reg; OnigErrorInfo einfo; char *p=NULL; str=""; int size; r = onig_new(®, (UChar*)&ptn[0], (UChar*)&ptn[ptn.size()] ,ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo); if (r != ONIG_NORMAL) return NULL; OnigRegion *region = onig_region_new(); r = onig_search(reg, (UChar*)start, (UChar*)end, (UChar*)start, (UChar*)end, region, ONIG_OPTION_NONE); if (r >= 0) { if(region->num_regs==1){p=start + region->beg[0]; size=(region->end[0]-region->beg[0]); } else { p=start + region->beg[1]; size=(region->end[1]-region->beg[1]); } str.resize(size); memcpy(&str[0],p,size) ;} onig_region_free(region, 1 ); onig_free(reg); onig_end(); return p; } main(){ char x[]="zzzzaffffffffb"; string s,ptn; ptn="a.*b"; Bpick(x, x+strlen(x), ptn, s); cout<<s<<endl; ptn="a(.*)b"; Bpick(x, x+strlen(x), ptn, s); cout<<s<<endl; }
- 846 名前:デフォルトの名無しさん [2009/04/08(水) 10:37:09 ]
- 845だと多バイト文字は識別しないはずなので、バイナリ文字列の正規表現がいけるはずです。
うちの環境ではEUCの文字でバグっていたところも問題でなくなりました。 Bfindは、ptnを検索して、見つかった先頭アドレスを返します。 Bpickは、正規表現にマッチした文字列をstrにセットします。
- 847 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:31:24 ]
- >>839
>EUC全角カタカナ「リ」 2バイト目は0xEAだから、Shift_JISの1バイト目として解釈されてその次の1バイトが デリミタとして扱われていない。 そういう変なバイト列を検索したいのなら、\xHH形式を使えば? findstr="\\x2F\\xA5\\xEA";
- 848 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 02:09:32 ]
- そういうことか 納得
- 849 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:10:26 ]
- ホスト名を抜き出したいです。例えば、
goo.ne.jp ttp://news.google.com/ ↓↓↓↓↓↓↓↓↓↓ goo.ne.jp google.com としたいです。
- 850 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:26:40 ]
- スレ違いです
- 851 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:33:07 ]
- >>849
URLだかURIのRFCに正規表現がそのまま載ってた覚えがあるぞ。
- 852 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 10:00:37 ]
- ttp://([^/]+)
\1 でいいだろ
- 853 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 13:51:18 ]
- はあ?
- 854 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 14:28:59 ]
- h?ttp://([^/]+).* \r
↓ $1 \r
- 855 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 14:31:31 ]
- >>849
“ホスト名”の定義があいまい トップページへのアクセス先を取りたいということの場合に sub.example.jpに対してトップはexample.jpではなくmain.example.jpだったら? FQDNを抜き出すということなら自分はこうする ([^:/]+)(?=\/)
- 856 名前:855 mailto:sage [2009/04/11(土) 14:33:51 ]
- 先頭に://と@の扱い入れるの忘れたや
- 857 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 23:42:47 ]
- ポートの事も、たまには思い出してください。
- 858 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 05:52:12 ]
- 法令の条文の漢数字を算用数字に置換する正規表現を教えてください。
たとえば、 第一条 → 第1条 第十一条 → 第11条 第三十四条 → 第34条 第百条 → 第100条 第百二十三条 → 第123条 第三百二条 → 第302条 第千三条 → 第1003条 第千二十三条 → 第1023条 等です。ついでに、 第二百五十六条の二 → 第256条の2 第二百五十六条の二の一 → 第256条の2の1 なんかも置換できれば大変うれしいです よろしくお願いします。
- 859 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 07:57:41 ]
- そりゃ正規表現だけじゃ無理だべ。
なんらかの言語の支援がないと。
- 860 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 09:33:59 ]
- 「なんば君」HELP で検索。
- 861 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 12:40:41 ]
- なんで正規表現でやりたがるのか理解できない
- 862 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 00:18:11 ]
- 魔法の呪文
正規表現
- 863 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 02:00:53 ]
- >>861 「なんで」うんぬん
たとえば、テキスト・ファイル中に 「まったく正規表現とは関係ないが、民事訴訟法第123条第2項は美しい!」 とかあった場合に、その行にカーソルをおいて特定のキーを押せば、 民事訴訟法第123条第2項の条文がポップ・アップで表示できるEmEditorの(Javascriptもどきの) マクロを作って使用しているのですが、模範六法のCD等から落としたファイルの条文は 算用数字なのに、Webページで公開されている条文のなかには漢数字のものが多いので、 それを利用したいな、なんて思ったたわけです。 貴兄たちの異常な才能を信じてお願いしてみました。
- 864 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 02:06:18 ]
- そういう意味の「なんで」じゃ無いやろw
- 865 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 02:07:07 ]
- >>863
それは貴方の求める機能の目的であって、 そこに正規表現を使う理由にはならないでしょう? およそ正規表現が引き合いに出されるような要求では無いように思いますが。
- 866 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 02:27:08 ]
- >>865
私が作ったマクロが正規表現で条項の検索をしているので、 そこのところを置き換えるだけですめばわたしにとって便利だ という、たんなる自己中理由でした。 みなさんに不愉快な思いをさせたみたいですみません。
- 867 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 04:36:09 ]
- だから、何故正規表現云々の前に自分の環境を提示しないの? 馬鹿なの? 日本語学習中なの?
- 868 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 06:03:19 ]
- 第三者だが、>>867は分かりにくいぞ。
>>863にEmEditorのマクロでと記載してあるが。
- 869 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 09:09:22 ]
- EmEditorのことは全然わからないけど
その Javascriptもどき ってヤツでプログラミングすればいいんじゃないの? こんなのがあるけど参考になるかな・・・ d.hatena.ne.jp/rubikitch/20081201/1228142072
- 870 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 09:11:53 ]
- おっと、Javascript 版みっけ!
blog.livedoor.jp/simizu001/archives/51011476.html
- 871 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 09:14:41 ]
- ついでに Excel
www.windows-world.jp/ganko/-/53252.html
- 872 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 23:08:53 ]
- そういうのは正規表現の仕事ではありません
- 874 名前:872 mailto:sage [2009/04/13(月) 23:22:10 ]
- >>873
了解です、できないと事がわかったので感謝します
- 875 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 01:36:46 ]
- たしかに
....replace(/^N\d+/, "N" + n); n += 10; のようにやるよりは { $1 = "N" (10 * NR); print } の感じのほうがいいな。
- 876 名前:taguti [2009/04/14(火) 14:41:40 ]
- 6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。 ・公式:底辺x高さ÷2を使って計算してください。 お願いします!!
- 877 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 14:47:38 ]
- それを正規表現でやるのか
- 878 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 16:15:56 ]
- 包茎が治る正規表現を教えてください。
先っぽの皮が余ってしょうがないんです。 お願いします!!
- 879 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 22:41:17 ]
- >>876
これはひどいwww ここまで来ると逆に尊敬するマルチ野郎だな。 pc12.2ch.net/test/read.cgi/tech/1237091698/493 pc12.2ch.net/test/read.cgi/tech/1232055225/770 pc12.2ch.net/test/read.cgi/tech/1217575832/499 pc12.2ch.net/test/read.cgi/tech/1235927586/774 pc12.2ch.net/test/read.cgi/tech/1212498448/876 pc12.2ch.net/test/read.cgi/tech/1212409946/66 pc12.2ch.net/test/read.cgi/tech/1217575832/499 pc12.2ch.net/test/read.cgi/tech/1192201659/808 pc12.2ch.net/test/read.cgi/tech/1205156417/821 pc12.2ch.net/test/read.cgi/tech/1238032584/16 pc12.2ch.net/test/read.cgi/tech/1224719784/934 良識を疑うよ。
- 880 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 22:54:02 ]
- >>879
すれ違いだけど 俺もそれ学校の問題で出されたことある。 定番かな。構造体使うC言語の問題で。 はっきりいって、三角形の公式使わないほうが楽だよね。 一点を原点移動して例の公式を適用するのが一番シンプルだと思う。
- 881 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 18:25:02 ]
- >>876
ヘロンの定理でググれカス。
- 882 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 20:12:01 ]
- >>881
不覚にも
- 883 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 00:50:48 ]
- 何と戦ってるんだろう
- 884 名前:デフォルトの名無しさん [2009/04/16(木) 12:31:02 ]
- >>879
そんな事より 答え書けよ!
- 885 名前:デフォルトの名無しさん [2009/04/16(木) 13:25:44 ]
- >>881
ヘロンの定理 イラナイだろ とんち問題だよ
- 886 名前:デフォルトの名無しさん [2009/04/16(木) 13:39:16 ]
- >>880 >>881
ヘロンの定理で良いから プロ書いてみたら
- 887 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 13:58:24 ]
- いや、どう考えてもプログラミングしてくれってのがおかしいだろ。
正規表現のスレで出る話題じゃない。
- 888 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 19:48:18 ]
- ヘロンの公式キターーー
- 890 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 20:06:18 ]
- >>888
こういう一見親切そうな行動をする人間が、世の中のすべてを駄目にする。
- 891 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 20:26:15 ]
- ヘロンの公式とかこの問題を解くのにふさわしくない
- 892 名前:デフォルトの名無しさん [2009/04/16(木) 20:36:33 ]
- >>891
照合するのに使う
- 893 名前:デフォルトの名無しさん [2009/04/16(木) 20:38:14 ]
- >>890
お舞いも 書いてみたら
- 894 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 20:56:34 ]
- 性器表現できません><
- 895 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 21:54:39 ]
- 行列式でも出るよ
さあ誰か書け
- 896 名前:デフォルトの名無しさん [2009/04/16(木) 22:04:04 ]
- ↑お麻衣が書くニダ
- 897 名前:デフォルトの名無しさん [2009/04/16(木) 22:17:53 ]
- >>876
>それぞれに実数つを読み込んで ココ とても難しい どこから? どうやって? それで 乱数で与えてみる
- 898 名前:デフォルトの名無しさん [2009/04/16(木) 22:44:34 ]
- ヘロン公式は
√を使うから 誤差はどう?
- 899 名前:デフォルトの名無しさん [2009/04/16(木) 22:49:03 ]
- JavaScriptが動く HTML実験部屋
ttp://homepage2.nifty.com/tomoarai/java/exper.html
- 900 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/04/16(木) 23:02:20 ]
- >>888 >>900 ⇒ >>899
- 902 名前:デフォルトの名無しさん [2009/04/16(木) 23:13:33 ]
- /*倍率*/ M=1000; // 変更
- 903 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/04/16(木) 23:24:21 ]
- ↑一旦文字変換してから
matchさせると良い
- 905 名前:デフォルトの名無しさん [2009/04/16(木) 23:29:33 ]
- -21761253.57183114 8544355.772346469 61664545.39556769 62137654.31616132 79934094.82325418 66218011.1129441 659766221291321.5 319359195447661.56 340407025843659.94
- 906 名前:デフォルトの名無しさん [2009/04/16(木) 23:47:31 ]
- たとえば?
data=list*->A.c; if(data.match(/.*/)){ }
- 907 名前:デフォルトの名無しさん [2009/04/16(木) 23:48:55 ]
- x=(79934094.82325418)-(-21761253.57183114);
y=(66218011.1129441)-(8544355.772346469);
- 908 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:15:56 ]
- >>903
>この例のようなstructやunionを含んでるstructを 一般に、任意にネストできる構造は正規表現で照合できない (実は、「Perlの」正規表現ではできてしまうけど、ごちゃごちゃしたものになるので オススメしない)。正確に抽出したいならCのパーザを自前で書くか、どっかからCのパーザ 拾ってくるのが良い
- 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>
- 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
同じといえば同じ。 ただし、. と違って常に改行にもマッチする。 否定形で使うと何ともマッチすることのないものになる。
|

|