[過去ログ]
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489511075/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
554: デフォルトの名無しさん [sage] 2018/07/29(日) 11:49:24.17 ID:kCYuy8BN 変数にキャプチャしたいのか置換で取り出したいのかくらい書こうな http://mevius.5ch.net/test/read.cgi/tech/1489511075/554
555: デフォルトの名無しさん [sage] 2018/07/29(日) 11:57:08.75 ID:JxpitKP8 失礼しました http://mevius.5ch.net/test/read.cgi/tech/1489511075/555
556: デフォルトの名無しさん [sage] 2018/08/12(日) 20:55:52.79 ID:MOc1ccj1 C#で正規表現を使ってHTML内から文字コードをとってきたいのですが 以下の場合だと"UTF"としか取得できません。 "UTF-8"と取得する場合どうすればいいでしょうか? <[^>]*\bcharset\s*=\s*[""']?(?<charset>\w+)\b <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> http://mevius.5ch.net/test/read.cgi/tech/1489511075/556
557: デフォルトの名無しさん [sage] 2018/08/12(日) 21:30:40.27 ID:mMH07JtW >>556 HTMLは扱いが難しいからパーサ使った方がいい どうしても正規表現だというなら, 1. とりあえず的な修正 https://regex101.com/r/sIUmzD/2 /<[^>]*\bcharset\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)")\b/$1$2$3/i 2. もう少し気合の入れた修正 https://regex101.com/r/sIUmzD/1 |<meta (?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)* (?:\s+charset(?:\s*=\
s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)"))?) (?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*\s*/?>|$1$2$3|i ぐらいか でもこれ後で読むのしんどいでしょ http://mevius.5ch.net/test/read.cgi/tech/1489511075/557
558: デフォルトの名無しさん [sage] 2018/08/12(日) 21:47:08.19 ID:L571MbNB >>557 神だ http://mevius.5ch.net/test/read.cgi/tech/1489511075/558
559: 557 [sage] 2018/08/12(日) 21:53:09.85 ID:mMH07JtW 2.の方を若干修正, charsetには値が必要ですわ https://regex101.com/r/sIUmzD/3 |<meta (?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)* (?:\s+charset\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)")) (?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*\s*/?>|$1$2$3|i http://mevius.5ch.net/test/read.cgi/tech/1489511075/559
560: デフォルトの名無しさん [sage] 2018/08/12(日) 22:00:37.17 ID:MOc1ccj1 >>557 ありがとうございます! 当方がやりたかったことは、HTMLをテキストデータとして大量に取得して、その中から特定のワードでの絞り込みです。 正しい文字コードでHTMLを落としてからパースしようと思ったのですが、確かにパーサでやる手もありそうですね 正規表現は今まで避けてきたので、読むのがシンドイっていうかチンプンカンプンですが 求めていた動作です。とても助かりました。 使わせてももらいます。ありがとうございました。 http://mevius.5ch.n
et/test/read.cgi/tech/1489511075/560
561: デフォルトの名無しさん [sage] 2018/08/12(日) 23:56:24.69 ID:2UQfVx23 HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理 <1><x></x><y></y></1> 開き・閉じタグで、前から一致させると、 <1></x> が対応してしまう ネストも無限にできるから、対応させるのは無理。 パーサを使うべき http://mevius.5ch.net/test/read.cgi/tech/1489511075/561
562: デフォルトの名無しさん [sage] 2018/08/13(月) 00:16:51.60 ID:06GD6VnQ キーワードと構成次第だろ http://mevius.5ch.net/test/read.cgi/tech/1489511075/562
563: デフォルトの名無しさん [sage] 2018/08/13(月) 00:22:13.35 ID:LXDaPxOa rubyキチやぞ http://mevius.5ch.net/test/read.cgi/tech/1489511075/563
564: デフォルトの名無しさん [sage] 2018/08/13(月) 03:34:58.19 ID:EnLsbSTB >>561 一部の環境では括弧等のネスト構造を取り扱いをサポートした正規表現があるよ PCRE(Perl 5.10以降)やruby(鬼雲)、Python,PHPなどでも C#の.NET Framework環境でもあったんじゃないかな http://mevius.5ch.net/test/read.cgi/tech/1489511075/564
565: デフォルトの名無しさん [sage] 2018/08/23(木) 19:11:59.52 ID:4kav5HXR .* 何にでもマッチさせることができる最強で万能な正規表現 http://mevius.5ch.net/test/read.cgi/tech/1489511075/565
566: デフォルトの名無しさん [sage] 2018/08/23(木) 19:26:33.22 ID:FR6Db0Vc 改行にはマッチしないけどね [\s\S]* http://mevius.5ch.net/test/read.cgi/tech/1489511075/566
567: デフォルトの名無しさん [sage] 2018/08/24(金) 02:29:36.02 ID:cgE41D9D >>561 > HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理 そういうこともできるように拡張した正規表現があればいいのに さらに階層、treeも可 http://mevius.5ch.net/test/read.cgi/tech/1489511075/567
568: デフォルトの名無しさん [sage] 2018/08/24(金) 03:56:55.93 ID:k/tOxHF9 >>567 鬼雲使ってみれば? http://mevius.5ch.net/test/read.cgi/tech/1489511075/568
569: デフォルトの名無しさん [sage] 2018/08/24(金) 10:28:37.49 ID:bF2ATmvV BNF使えよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/569
570: デフォルトの名無しさん [sage] 2018/08/24(金) 10:38:07.25 ID:wb3Q/jKx なんか知識が数年前で止まっちゃってる人がちらほらいるな 正規表現がネストに対応したのなんてもう一昔前ってイメージだけど http://mevius.5ch.net/test/read.cgi/tech/1489511075/570
571: デフォルトの名無しさん [sage] 2018/08/24(金) 12:46:08.34 ID:srP6ovAZ 別に正規表現だけを追いかけてるわけじゃないから http://mevius.5ch.net/test/read.cgi/tech/1489511075/571
572: デフォルトの名無しさん [] 2018/08/24(金) 12:48:35.65 ID:ZVlysGry なんでも正規表現で済まそうとするひとって 意地でもVBA使い続けてるひとと大差ない http://mevius.5ch.net/test/read.cgi/tech/1489511075/572
573: デフォルトの名無しさん [sage] 2018/08/24(金) 12:49:36.87 ID:yKVFr0CJ 適材適所 http://mevius.5ch.net/test/read.cgi/tech/1489511075/573
574: デフォルトの名無しさん [sage] 2018/08/24(金) 16:58:29.09 ID:k/tOxHF9 >>567 てか>>561には>>564のレスが既に付いてたじゃんか http://mevius.5ch.net/test/read.cgi/tech/1489511075/574
575: デフォルトの名無しさん [sage] 2018/08/24(金) 18:58:08.09 ID:wb3Q/jKx >>572 賢い人程手段をたくさん知り その中から取捨選択するからな >>571 さすがに勉強不足すぎだろw 何年前で知識止まってんだよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/575
576: デフォルトの名無しさん [sage] 2018/08/25(土) 00:03:35.46 ID:r5O9PJUC はいはい、正規表現マスターすごいねー これでいいかな w http://mevius.5ch.net/test/read.cgi/tech/1489511075/576
577: デフォルトの名無しさん [sage] 2018/08/25(土) 00:35:41.84 ID:I7tIpqHO 底辺に行くほど知識自慢はしかたがないだろ、正規表現に限らず ただ掲示板的に質問したいのにバカがしゃしゃり出てきて迷惑だよな http://mevius.5ch.net/test/read.cgi/tech/1489511075/577
578: デフォルトの名無しさん [] 2018/08/25(土) 10:52:22.58 ID:J+b/MRtJ 的確な指示されても気に入らない回答だからと人の話を聴かない人は成長しないよ 自分の気に入る回答しかも自分と同じレベルの回答もらって喜んでればいい http://mevius.5ch.net/test/read.cgi/tech/1489511075/578
579: デフォルトの名無しさん [sage] 2018/08/26(日) 15:08:37.66 ID:sCPJIsfv 俺なんか中学の勉強もロクにしなかったのに正規表現を理解したいから 今、大学レベルの数学を勉強してる・・なかなか進まないけどね・・ >>556 の質問からパーサとか出てくるのはちょっと違うと思うよ metaタグ拾えばいいだけだよね?難しく考えすぎだよ あとHTMLソースのほうが糞で実際の文字コードとmetaタグで指定されてる 文字コードが違うなんてことや、文字コードの指定が複数個所あるなんていう 2ページ分のHTMLをそのままくっ付けましたなんて
いうのも稀にあるから そういう糞なHTMLを相手にする場合は対応を考えないといけないね http://mevius.5ch.net/test/read.cgi/tech/1489511075/579
580: デフォルトの名無しさん [sage] 2018/08/26(日) 15:31:19.41 ID:CE5Lnwmj >>579じゃあmetaタグを拾って来る正規表現をどうぞ http://mevius.5ch.net/test/read.cgi/tech/1489511075/580
581: デフォルトの名無しさん [sage] 2018/08/26(日) 15:37:54.94 ID:zPuf2RGr え? そんなことマジで聞いてるのか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/581
582: デフォルトの名無しさん [sage] 2018/08/26(日) 15:40:08.95 ID:CE5Lnwmj マジだからちゃんと教えてくれよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/582
583: デフォルトの名無しさん [sage] 2018/08/26(日) 18:08:41.45 ID:sCPJIsfv 自分用に作るならこんな感じかなぁ、動作確認してないので使わないでね | <meta (?=\s) [^<>]* \s charset \s* = \s* (?:["']\s*)? ([^\s"'<>;]+) |x; こういうのは想定外 ※ " " の中に > がある <meta comment="a>b" charset="UTF-8"> http://mevius.5ch.net/test/read.cgi/tech/1489511075/583
584: デフォルトの名無しさん [sage] 2018/08/26(日) 18:17:10.61 ID:O4hA/SKg >>583 俺が書いた糞(>>559)より糞なコードが書かれて驚く 素直にパーサ使えよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/584
585: デフォルトの名無しさん [sage] 2018/08/26(日) 18:36:53.61 ID:sCPJIsfv >>583 のほうがスマートなのは一目瞭然でしょ ただ >>583 は こんな感じ 程度のものなのでツッコミ所があっても知らないよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/585
586: デフォルトの名無しさん [sage] 2018/08/26(日) 18:37:23.43 ID:5oVMxLBv mataタグでのcharsetは定型的でしか使われないんで、仕様的に色々な場合に対応するのは無駄 俺が使うなら、こんなので十分 /<meta[^>]*\scharset=(["'])((?:(?!\1).)+)/i http://mevius.5ch.net/test/read.cgi/tech/1489511075/586
587: デフォルトの名無しさん [sage] 2018/08/26(日) 18:52:21.33 ID:sCPJIsfv ほとんどの場合はそれで充分だろうねw http://mevius.5ch.net/test/read.cgi/tech/1489511075/587
588: デフォルトの名無しさん [sage] 2018/08/27(月) 04:46:33.83 ID:2QlJLeh2 マッチングテスト [1] <meta charset="UTF-8"> >>557 1. 失敗 >>559 マッチ >>583 マッチ >>586 マッチ [2] このスレのHTML 557 1. マッチ 559 失敗 583 マッチ 586 失敗 http://mevius.5ch.net/test/read.cgi/tech/1489511075/588
589: デフォルトの名無しさん [sage] 2018/08/29(水) 16:43:59.44 ID:4UnjToZE こんなバカが回答者してたのか 過去レス見ると前から張り付いてるようだね http://mevius.5ch.net/test/read.cgi/tech/1489511075/589
590: デフォルトの名無しさん [sage] 2018/08/31(金) 20:05:36.75 ID:5NewXZva なかなか興味深い 鬼雲に非包含オペレータを実装した話 https://qiita.com/k-takata/items/4e45121081c83d3d5bfd http://mevius.5ch.net/test/read.cgi/tech/1489511075/590
591: デフォルトの名無しさん [sage] 2018/08/31(金) 21:09:12.34 ID:5NewXZva bregonig.dll 2017/01/17 Ver.4.10 非包含オペレータに対応 うーん、非包含にマッチする正規表現はいつか自分で作れるように なりたいと思ってたけど内部で勝手に作ってくれる時代になってしまったか〜 自分の知識は2013あたりで止まってるから浦島だ http://mevius.5ch.net/test/read.cgi/tech/1489511075/591
592: デフォルトの名無しさん [sage] 2018/09/01(土) 01:28:06.31 ID:0IlLcsWm ab(?~ba)ba これを ab((?!ba).)*ba この従来通りの方式をベースに記述して、かつ、前者とまったく同じ 動作に書き直すことは可能かな? 両者の違いについては>>590のリンク参照 http://mevius.5ch.net/test/read.cgi/tech/1489511075/592
593: デフォルトの名無しさん [sage] 2018/09/01(土) 22:17:13.09 ID:0IlLcsWm (?~abc) これは↓とまったく同じ動作になると言って良さそう (?:(?!abc).)*(?:(?=abc).{1,2})? 否定したい文字列が固定長なら先読みで書き換え可能らしい http://mevius.5ch.net/test/read.cgi/tech/1489511075/593
594: デフォルトの名無しさん [sage] 2018/09/12(水) 19:47:12.85 ID:j29ToL0A 正規表現を言語化できるようなとこ知りませんか? /^ab/ これを入れると、 ↓ 「abで始まる」 と変換されるようなサービスって無いでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/594
595: デフォルトの名無しさん [] 2018/09/13(木) 09:47:15.83 ID:l9KSlvFS せっかく正規表現にした意味が無い http://mevius.5ch.net/test/read.cgi/tech/1489511075/595
596: デフォルトの名無しさん [sage] 2018/09/13(木) 09:50:19.09 ID:NoauaeTl https://jex.im/regulex/#!flags=&re=%5Eab http://mevius.5ch.net/test/read.cgi/tech/1489511075/596
597: デフォルトの名無しさん [sage] 2018/09/13(木) 13:28:20.78 ID:a9m+mGXQ 視覚的に見れるサイトじゃなくて視覚的に作れるサイトがあったら便利かな メタ文字を覚える必要が無くなるし動作を把握しながら作れる そういうのが普及したらいいね http://mevius.5ch.net/test/read.cgi/tech/1489511075/597
598: デフォルトの名無しさん [sage] 2018/09/14(金) 00:35:39.11 ID:qC9qAPWt そういうのとはちょっと違う&grepツールになっちゃうけど TresGrepってのが入力欄でのマウス右クリックから正規表現を指定出来たり 正規表現1文字入力ごとにエラーチェック⇒NGならエラーメッセージを表示したりと ちょっと便利 http://mevius.5ch.net/test/read.cgi/tech/1489511075/598
599: デフォルトの名無しさん [sage] 2018/09/14(金) 06:51:39.20 ID:LTbXVNEK >>596 これいいですね。 ありがとうございます。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/599
600: デフォルトの名無しさん [sage] 2018/09/14(金) 14:14:58.44 ID:grBP2MzP TresGrep使ってみたけど良くできてる 正規表現に何かしらの思い入れがあるのが分かる気がする 特に正規表現の複数行入力が出来るのはいい 自分は複数行入力が当たり前になるべきだと前から考えていて それが実装されててちょっと感動してしまった http://mevius.5ch.net/test/read.cgi/tech/1489511075/600
601: デフォルトの名無しさん [sage] 2018/09/17(月) 12:06:03.62 ID:SR+usNFF C#、System.Text.RegularExpressions.Regexの正規表現で xxの中を取り出すにはどうしたらいいのでしょう? ただし取り出したいのはトップのxxで、xxが閉じる前にyyがあるときはそのxxは無視という条件付きです 対象文字列 "<xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx>"; 試した正規表現 @"<xx>.*?[^(</yy>)]</xx>" 結果 <xx><xx>&l
t;yy>111</yy></xx></xx><xx>222</xx> <xx>333</xx> 欲しい結果 <xx><xx><yy>111</yy></xx></xx> <xx>222</xx> <xx>333</xx> http://mevius.5ch.net/test/read.cgi/tech/1489511075/601
602: デフォルトの名無しさん [sage] 2018/09/17(月) 13:51:51.89 ID:tNilsymD プログラムとはちょっと違うのですが、2chMateで荒らしをNGする正規表現を作りたくて悩んでます 日本語で書くと、 "http://"又は"https://"が合わせてn回以上出てきた場合(対象は複数の改行を含む文字列) にマッチするような正規表現って可能でしょうか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/602
603: デフォルトの名無しさん [sage] 2018/09/17(月) 14:52:47.98 ID:QtMg2HjE >>601 結果と欲しい結果の違いが改行しかないような >>602 n=3 (?si:https?:\/\/.*?){3,} http://mevius.5ch.net/test/read.cgi/tech/1489511075/603
604: 602 [sage] 2018/09/17(月) 15:04:16.06 ID:tNilsymD >>603 迅速なご回答ありがとうございます。 この方法でうまくいきました! http://mevius.5ch.net/test/read.cgi/tech/1489511075/604
605: デフォルトの名無しさん [sage] 2018/09/18(火) 00:00:11.49 ID:lHFpavF+ >>601 .NET Frameworkの正規表現は知らんけど、鬼雲でなら (?=<xx>)(<(\w+)>([^<]*|\g<-3>)*</\k<-2-0>>) これは最低限のものでイレギュラーなものには対応しない 文字列でエスケープされてるとかコメントが入ってるとか タグにタグ名以外の余計なものが入ってるとか(</a href=...>とか<br />とか) ペアでないタグがあるとか(<br>のような単独タグ,<xx>と</xx>のどちらかしかないと
か) そういうのにも対応させるなら工夫して 一応、.NET Frameworkの正規表現の再帰については https://qiita.com/HMMNRST/items/15800514bbe66f504789 http://mevius.5ch.net/test/read.cgi/tech/1489511075/605
606: デフォルトの名無しさん [sage] 2018/09/18(火) 00:12:00.46 ID:oPOmCM6y ありがと。もう少し単純にできるかと思っていたけどそんなに複雑になるのね 正規表現使わずにやる方向で考えてみます http://mevius.5ch.net/test/read.cgi/tech/1489511075/606
607: 583 [sage] 2018/09/18(火) 00:55:53.38 ID:t0fL3l18 >>605のリンク先見てやっつけで作ってみた <xx>(?>(?:(?!</?xx>).)*)</xx>|<xx>((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!)) http://mevius.5ch.net/test/read.cgi/tech/1489511075/607
608: デフォルトの名無しさん [sage] 2018/09/18(火) 01:11:05.24 ID:0krUYS0m 典型的なダメ質問者だな。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/608
609: 583 [sage] 2018/09/18(火) 02:17:30.59 ID:t0fL3l18 ミスってた、>>607はボツってことで・・ タグとタグの間の文字列の扱いが意外と難しい http://mevius.5ch.net/test/read.cgi/tech/1489511075/609
610: デフォルトの名無しさん [sage] 2018/09/18(火) 06:08:34.66 ID:oPOmCM6y 確かにダメ質問者w 「xxが閉じる前にyyがあるときはそのxxは無視」という一見簡単そうなルールが予想以上に難しいようで 楽したいから正規表現使いたいのだけどあまり複雑になると楽じゃないからほかに逃げたくなる http://mevius.5ch.net/test/read.cgi/tech/1489511075/610
611: デフォルトの名無しさん [sage] 2018/09/18(火) 07:04:18.68 ID:iA/s8q9i ぶっちゃけ欲しい結果が何なのか結局よく分かってない <xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx> http://mevius.5ch.net/test/read.cgi/tech/1489511075/611
612: デフォルトの名無しさん [sage] 2018/09/18(火) 07:13:00.25 ID:oqy73oSH ID変わった その表現だと <xx><xx><yy>111</yy></xx> 欲しい結果は<xx><xx><yy>111</yy></xx></xx> こういう尻切れになることが多い http://mevius.5ch.net/test/read.cgi/tech/1489511075/612
613: デフォルトの名無しさん [sage] 2018/09/18(火) 07:16:10.21 ID:iA/s8q9i どういうことよ >>611の正規表現で <xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx> にマッチングすると <xx>222</xx> と <xx>333</xx> にマッチするでしょ? <xx><xx><yy>111</yy></xx> はどこから出てきたの? http://mevius.5ch.net/test/read.cgi/tech/1489511075/613
614: デフォルトの名無しさん [sage] 2018/09/18(火) 07:42:45.15 ID:oqy73oSH 申し訳ないミス。"<xx>.*?</xx>"の1件目の結果だったw その正規表現だと2件マッチ 欲しい結果は>>601にある3件 http://mevius.5ch.net/test/read.cgi/tech/1489511075/614
615: デフォルトの名無しさん [sage] 2018/09/18(火) 07:46:54.65 ID:iA/s8q9i > xxが閉じる前にyyがあるときは これは直前ってこと? <xx><yy>111</yy></xx> にはマッチしないってことでいいの? http://mevius.5ch.net/test/read.cgi/tech/1489511075/615
616: デフォルトの名無しさん [sage] 2018/09/18(火) 07:55:40.50 ID:lHFpavF+ >ただし取り出したいのはトップのxxで これだけで<yy></yy>があろうがなかろうが良いと俺は思ったんだけど http://mevius.5ch.net/test/read.cgi/tech/1489511075/616
617: デフォルトの名無しさん [sage] 2018/09/18(火) 08:27:12.31 ID:iA/s8q9i yyがどうでもよければ <xx>(?:(?:<(?<tag>[a-z]+)>)*\d+(?:</(?<-tag>\k<tag>)>)*(?(tag)(?!)))*</xx> かなぁ http://mevius.5ch.net/test/read.cgi/tech/1489511075/617
618: デフォルトの名無しさん [sage] 2018/09/18(火) 08:36:05.56 ID:oqy73oSH 閉じる前というのは直前という意味で 対象が"<xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx><xx><yy>444</yy></xx>" の場合は、<xx><yy>444</yy></xx>を無視したの3件マッチにしたい >>611と>>617ベースできそうだからがんばってみます。ありがとう http://mevius.5ch.net/test/read.cgi/tech/1489511075/618
619: デフォルトの名無しさん [sage] 2018/09/18(火) 09:00:26.56 ID:iA/s8q9i まぁスタック使う構文が必要な時点で正規表現向きでないのは間違いない http://mevius.5ch.net/test/read.cgi/tech/1489511075/619
620: 583 [sage] 2018/09/18(火) 12:56:18.97 ID:t0fL3l18 本来の数学的な正規表現という意味では向いてる質問なんだけどね これぞ正規表現の仕事っていう質問 でもプログラムの検索で使う正規表現ではなかなか使われないね http://mevius.5ch.net/test/read.cgi/tech/1489511075/620
621: 583 [sage] 2018/09/18(火) 13:25:09.30 ID:t0fL3l18 >>607を修正 <xx>(?>(?:(?!</?xx>).)*)((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!)) これは>>605のリンク先の例を↓のように書き換えただけ < を <xx>・・・ > を </xx>・・・ \A を <xx> \z を </xx> 「・・・」 は<xx>または</xx>の間に挟まれている文字列 >スタック使う構文が必要な時点で ああ、その通りだ、(r+s+)
+ だけでは作れない http://mevius.5ch.net/test/read.cgi/tech/1489511075/621
622: 583 [sage] 2018/09/18(火) 13:29:58.42 ID:t0fL3l18 間違い \A を <xx> 正しくは \A を <xx> ・・・ http://mevius.5ch.net/test/read.cgi/tech/1489511075/622
623: 583 [sage] 2018/09/18(火) 18:51:49.51 ID:t0fL3l18 >>611のはミスってるね <xx><b><a>111</a></a></xx> にマッチする <xx><b><a>111</a></b></xx> にマッチしない この問題は>>617で修正されてる ()* \d+ ()* のところが0回以上のループで正しく動くのは面白いな 一番外側の (?: )* はいらないかも http://mevius.5ch.net/test/read.cgi/tech/1489511075/623
624: 583 [sage] 2018/09/21(金) 05:18:40.73 ID:LI7qokUP (?# 主要部) <xx(?&Attribute)>(?&innerText)(?&roop)?+</xx> (?# 定義部) (?:|(?!) (?'Attribute'(?:\s[^>]*+)?+) (?'singletag'br) (?'tagname'[a-z][a-z\d]*+) (?'innerText' (?: [^<]*+ | <(?&singletag)(?&Attribute)> )*+ ) (?'roop' <(?'tag'(?&tagname))(?&Attribute)> (?&innerText)(?&roop)?+ </\k'tag+0'> (?&innerText)(?&roop)?+ ) ) http://mevius.5ch.net/test/read.cgi/tech/14895110
75/624
625: デフォルトの名無しさん [sage] 2018/09/21(金) 05:54:00.34 ID:LI7qokUP こだわった点 ・主要部と定義部に分けて全体の構造が分かりやすくした ・繰り返しは全て強欲。無駄なバックトラックをさせない ・再帰には * を使わず、部分呼び出し自身に繰り返しをさせている ・定義部は (?:|(?!) 〜 ) として定義部がサーチに使われるのを避けている >>605には ([^<]*|\g<-3>)* という部分があって ([^<]*)* というバックトラック処理がえらいことになる部分があって気になった あと再帰を使ってるのにループを * にさせ
ているのを見て * を使わずに書けるはずだと思って作ってみた http://mevius.5ch.net/test/read.cgi/tech/1489511075/625
626: デフォルトの名無しさん [sage] 2018/09/21(金) 06:11:13.31 ID:LI7qokUP こういう書き方をした正規表現をサクラエディタで使おうとすると 1行に繋げなければならない、これでは不便すぎる 鬼雲の強力な正規表現を快適に使い倒せるようにするべき 出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい そうすればここのような掲示板に貼るときに便利 逆に1行で書かれた正規表現を複数行に直す機能も欲しい 手動でいちいち改行を入れる手間が省けて快適になる この2つの機能は正規表現ライブラリに実装されることが望ましい そうすれ
ば他のテキストエディタの作者も気軽に実装出来るようになる 正規表現に新しいメタ文字が作られたときの対応も容易になる http://mevius.5ch.net/test/read.cgi/tech/1489511075/626
627: デフォルトの名無しさん [sage] 2018/09/21(金) 06:18:04.46 ID:LI7qokUP 出来れば定義用の新しいコマンドが欲しい 定義のためのカッコなのにキャプチャが有効になってたり、 正規表現オブジェクトが無駄に肥大化してしまったりするから http://mevius.5ch.net/test/read.cgi/tech/1489511075/627
628: デフォルトの名無しさん [sage] 2018/09/21(金) 07:17:48.30 ID:fJq/snux >>626 > 出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい ここはム板なので言い出しっぺの法則が適用されます http://mevius.5ch.net/test/read.cgi/tech/1489511075/628
629: 583 [sage] 2018/09/21(金) 19:24:14.97 ID:LI7qokUP >>628 テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ 次世代のテキストエディタは↓こうなって欲しい 1、画面をいっぱいに使って正規表現の複数行の記述が出来る 2、複数行で書かれた正規表現を一行に繋げるボタン 3、一行で書かれた正規表現を複数行に展開するボタン これがスタンダードになるといいな http://mevius.5ch.net/test/read.cgi/tech/1489511075/629
630: デフォルトの名無しさん [sage] 2018/09/21(金) 20:42:25.54 ID:c6u7OXiZ >>629 ガンバ w http://mevius.5ch.net/test/read.cgi/tech/1489511075/630
631: デフォルトの名無しさん [sage] 2018/09/21(金) 20:44:43.75 ID:OGYiByDT やっぱそうなるよな ここではw http://mevius.5ch.net/test/read.cgi/tech/1489511075/631
632: デフォルトの名無しさん [sage] 2018/09/21(金) 23:08:38.86 ID:3+OghnRP extendedフラグを付けて鬼雲に渡せば、複数行で処理してくれる。 エディタ側で1行にくっつけたりする必要はない。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/632
633: 583 [sage] 2018/09/21(金) 23:41:08.24 ID:LI7qokUP >>632 そういうことじゃないんだな、>>626を読んでね ちなみに複数行の正規表現を一行に繋げるのはかなり簡単なんだけど 一行で書かれた正規表現を複数行に展開するのはかなり難しい 正規表現のパーサを作るということになるから だから正規表現ライブラリに実装されることが望ましい ライブラリの作者なら細かい挙動まで把握しているから正確なパーサが作れる 逆にテキストエディタの作者がやろうとすると動作を把握しきれずに 不完全なものになったり、実装を諦めたりする
ことになりかねない 複数行をスタンダードにするためにはライブラリ側での実装が必須となる http://mevius.5ch.net/test/read.cgi/tech/1489511075/633
634: デフォルトの名無しさん [] 2018/09/22(土) 02:13:48.20 ID:EPQO3h7N >>633 鬼雲とbregonig.dllの作者さんまでどうぞ https://twitter.com/k_takata https://github.com/k-takata/Onigmo https://github.com/k-takata/bregonig http://k-takata.o.oo7.jp/mysoft/bregonig.html あと鬼車オリジナルの作者さんも復活してたんだね https://github.com/kkos/oniguruma/issues https://twitter.com/5chan_nel (5ch newer account) http://mevius.5ch.net/test/read.cgi/tech/1489511075/634
635: 583 [sage] 2018/09/22(土) 21:31:53.89 ID:SLHR4wJP >>634 bregonig.dllはプログラミング用のライブラリをテキストエディタでも 使えるようにしたっていう感じなのでプログラミングに必要のない機能は 付けたくないと思う、管理が大変になるからね だから次世代の正規表現ライブラリと次世代のテキストエディタに期待 ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず 検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) ) 置換:\k'color' 対象テキスト: blue 置換結果:青 現状
の bregonig.dll でこれが出来ないということはプログラミングでなんとかなる 機能は付けないということ テキストエディタのほうは改行をまたぐマッチの実現に苦戦してるようで この問題が解決しないと高度な正規表現は宝の持ち腐れになるだけなので 次世代のテキストエディタに期待しましょう >鬼車オリジナルの作者さん 別人だとは知りませんでした^^; http://mevius.5ch.net/test/read.cgi/tech/1489511075/635
636: デフォルトの名無しさん [sage] 2018/09/26(水) 01:40:37.36 ID:3FykrnoG xyz? を含まないものにマッチする正規表現 http://www.din.or.jp/~ohzaki/regex.htm#WithoutXY http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ > fmcat =(retofm ..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを 見逃すとはとても思えないから何か違うものなのかなぁ・・ http://mevius.5ch.net/test/read.cgi/tech/1489511075/636
637: デフォルトの名無しさん [sage] 2018/09/26(水) 03:09:00.10 ID:Rr41G2Hg 明らかに含むって試してから言ってる? http://mevius.5ch.net/test/read.cgi/tech/1489511075/637
638: デフォルトの名無しさん [sage] 2018/09/26(水) 10:58:06.87 ID:3FykrnoG >>637 > fmcat =(retofm で始まる3行のところの正規表現についてですよ? (〜)* x (〜)* yz の形なので明らかにxyzにマッチします *y(x*[^xy]y*)*x* は誤植でしょうけど・・ http://mevius.5ch.net/test/read.cgi/tech/1489511075/638
639: デフォルトの名無しさん [sage] 2018/09/26(水) 14:05:39.88 ID:pN+YCTD5 あー確かににそこはおかしいな 引用っぽいけど http://mevius.5ch.net/test/read.cgi/tech/1489511075/639
640: デフォルトの名無しさん [sage] 2018/09/26(水) 23:39:54.65 ID:3FykrnoG やっぱり間違いなんですかね? プログラムを使って自動的に算出してるようなのに・・ http://mevius.5ch.net/test/read.cgi/tech/1489511075/640
641: デフォルトの名無しさん [sage] 2018/09/27(木) 00:18:43.29 ID:0xNuoCxe 俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは? http://mevius.5ch.net/test/read.cgi/tech/1489511075/641
642: デフォルトの名無しさん [sage] 2018/09/27(木) 02:58:15.53 ID:TOnM2DUW >prolog なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは prologとやらの実行ソフト名だったのか https://github.com/RichardMoot/Grail これの使い方を調べれば謎が解けそうですね 暇なときに試してみます、ありがとう http://mevius.5ch.net/test/read.cgi/tech/1489511075/642
643: デフォルトの名無しさん [sage] 2018/10/06(土) 17:50:41.16 ID:0JYIRqz1 検索対象文字 <test>a="akari"desu</test> 正規表現 a="*" で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/643
644: デフォルトの名無しさん [] 2018/10/06(土) 17:56:12.23 ID:e52HQVrn 馬鹿には無理 http://mevius.5ch.net/test/read.cgi/tech/1489511075/644
645: デフォルトの名無しさん [] 2018/10/06(土) 18:01:22.57 ID:FAIH8E2E a=\".*\" メタ文字(ダブルクォート)をバックスラシュでエスケープ .(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ とりあえずイケル それでも意図どおりにマッチングしないことは予見できる http://mevius.5ch.net/test/read.cgi/tech/1489511075/645
646: デフォルトの名無しさん [sage] 2018/10/06(土) 18:14:31.01 ID:OZkGL/sg ワイルドカードと混同しちゃってるのか ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも http://mevius.5ch.net/test/read.cgi/tech/1489511075/646
647: デフォルトの名無しさん [sage] 2018/10/06(土) 18:16:35.11 ID:OZkGL/sg 正規表現っぽいIDになった? http://mevius.5ch.net/test/read.cgi/tech/1489511075/647
648: デフォルトの名無しさん [sage] 2018/10/06(土) 18:23:52.49 ID:OZkGL/sg OZk G L /sg ohzakiさんゲームのリンク な気がしたので貼る、最近更新したばっかりやん ゲーム関係のリンク http://www.din.or.jp/~ohzaki/game.htm http://mevius.5ch.net/test/read.cgi/tech/1489511075/648
649: デフォルトの名無しさん [] 2018/10/14(日) 12:53:05.30 ID:zaukh1NH >>643 ワロタw 正規表現の*とワイルドカードは違うぞ。詳しくはググれ。 多分a="[^"]*"でいけると思うけど詳しくはググれ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/649
650: デフォルトの名無しさん [sage] 2018/10/14(日) 14:33:15.06 ID:eP/1gSav ちょいと質問させて a="[^"]*" と書くことが多いんだけど a=".*?" と書くのとで結果に違いでるのかな? http://mevius.5ch.net/test/read.cgi/tech/1489511075/650
651: デフォルトの名無しさん [sage] 2018/10/14(日) 14:56:27.64 ID:EqzxaMkD ""のなかに改行が含まれてた場合、違いが出るよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/651
652: デフォルトの名無しさん [] 2018/10/14(日) 15:11:22.83 ID:zaukh1NH あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry http://mevius.5ch.net/test/read.cgi/tech/1489511075/652
653: デフォルトの名無しさん [sage] 2018/10/14(日) 15:27:34.24 ID:eP/1gSav >>651-652 なるほど、ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1489511075/653
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 349 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.031s