[過去ログ]
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489511075/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
493: デフォルトの名無しさん [] 2018/04/11(水) 13:14:45.93 ID:p/bo/Ju1 試しに Perl でやってみた。最も楽観的な想定ならこのくらいまでは手抜きできる。 use strict; my $comment = qr/(?:--.*?\n)/ ; my $literal_ch = qr/(?:\'\'|[^\'])/ ; my $ch_str_literal = qr/(?:\'(?>$literal_ch*)\')/ ; my $other_ch = qr/[^\';]/ ; my $some_str = qr/(?:$comment|$ch_str_literal|$other_ch)/ ; my $statement = qr/(?:$some_str*;)/ ; my $text = ''; while (<>){ $text .= $_; while ( $text =~ s/^$statement// ){ print("Found:$&\n") }} 文字列リテラルの中の文字の記法に特に対処すべき拡張があるなら $literal_ch に加えれば良い。 " は識別子を書くためのものだが '、;、-- のどれかが入る可能性があるなら $other_ch と $some_str に加えればいいだろう。 多分、問題はそこではない。この例では行単位の入力だから面倒な問題を回避できているが、そうでない場合の問題だ。 たとえばコメントの始まりの - までしか読まれていないという場合。もっと読まなければコメントかどうか判断できない。 あるいは文字列リテラルの中で ' が現れた場合。それは文字列リテラルの終わりなのか、それともリテラルの ' を表す '' の 1 文字目なのか。 こういう処理を自分で書くのは難しくはなくても面倒だし、処理速度も遅い。だから結局 flex を使ったりする。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/493
494: デフォルトの名無しさん [sage] 2018/04/11(水) 14:19:31.82 ID:jfPKheqL 仕様通りのParser とか、構文解析ツールが必要 それらを使って出力された、抽象構文木を使うのがよい http://mevius.5ch.net/test/read.cgi/tech/1489511075/494
495: デフォルトの名無しさん [sage] 2018/05/04(金) 19:16:13.25 ID:kVAlpXQV ★タイトル ★★タイトル 上のものにマッチさせたいのですが、 ^★.*$ としてしまうと、下まで含まれるのですが、どうしたらいいでしょうか http://mevius.5ch.net/test/read.cgi/tech/1489511075/495
496: デフォルトの名無しさん [sage] 2018/05/04(金) 19:36:12.61 ID:eD01Afe2 >>495 ^★(?! ★).*$ http://mevius.5ch.net/test/read.cgi/tech/1489511075/496
497: 495 [sage] 2018/05/04(金) 21:14:35.89 ID:L0LZvRGB 半角SP紛れ込んだわ ^★(?!★).*$ http://mevius.5ch.net/test/read.cgi/tech/1489511075/497
498: デフォルトの名無しさん [sage] 2018/05/05(土) 05:47:27.14 ID:iaqxNbgL ↑解答どうも できなかったです ちなみにmeryというテキストエディタの正規表現です 何の言語かはわかりませんが http://mevius.5ch.net/test/read.cgi/tech/1489511075/498
499: デフォルトの名無しさん [sage] 2018/05/05(土) 06:26:09.87 ID:O3up5M1Q https://regex101.com/r/YyXfr8/1 鬼雲みたいだし動くと思うんだけど, 先頭とか末尾に余計なスペース入ってない? http://mevius.5ch.net/test/read.cgi/tech/1489511075/499
500: デフォルトの名無しさん [sage] 2018/05/05(土) 19:07:12.77 ID:iaqxNbgL ↑ありがとうございます。行けました。 .*の前に否定を入れればいいんですね http://mevius.5ch.net/test/read.cgi/tech/1489511075/500
501: デフォルトの名無しさん [] 2018/05/05(土) 21:57:45.66 ID:+tF+3NSL 鬼雲…だと…?! http://mevius.5ch.net/test/read.cgi/tech/1489511075/501
502: デフォルトの名無しさん [sage] 2018/05/07(月) 13:28:13.91 ID:XtvW294Z 正規表現をちゃんと論理的に導きたいと思って参考になる本を 買ったら必要な予備知識に群とか環が出てきて即諦めた 正規表現周りの開発をしてる人達はすごい人達なんだなぁ すごさを直で実感出来た http://mevius.5ch.net/test/read.cgi/tech/1489511075/502
503: デフォルトの名無しさん [] 2018/05/07(月) 14:59:22.19 ID:QMgv+0U5 用語に慣れてないだけだろ やってることは大したことじゃない http://mevius.5ch.net/test/read.cgi/tech/1489511075/503
504: デフォルトの名無しさん [sage] 2018/05/07(月) 18:08:31.65 ID:XtvW294Z まぁ膨大な時間と労力をかければ自分にも分かるんだろうけど 現実的じゃないんだよなぁ(人の何倍も時間かかるだろうし) これからは正規表現技術者の努力に感謝しながら正規表現を 使おうと思います(^^)> http://mevius.5ch.net/test/read.cgi/tech/1489511075/504
505: デフォルトの名無しさん [sage] 2018/05/14(月) 07:31:45.21 ID:0PI4I4+g JavaScriptによる正規表現チェッカー くっそ長いので短縮 https://goo. gl/CE3aZ8 https://fatiherikli.github.io/fil/#eyJwYXRoIjoiSmF2YVNjcmlwdFRlc3QxLmpzIiwic291cmNlIjoiLyog5q2j6KaP6KG o54++44Oe44OD44OB44OG44K544OIICovXG5cbi8vIOato+imj+ihqOePvlxudmFyIHJlID0gbmV3IFJlZ0V4cCgv XFxkKy9nKTtcblxuLy8g44OG44Kt44K544OIXG52YXIgdGV4dCA9IChmdW5jdGlvbiAoKSB7LypcbmFhYVxuYmIx MmJcbmM1NjdjYzg5XG4qL30pLnRvU3RyaW5nKCkuc3BsaXQoL1xcbi8pLnNsaWNlKDEsLTEpO1xuXG5jb25zb2x lLmxvZyhcIlJlZ0V4cDpcIiwgcmUudG9TdHJpbmcoKSlcbmNvbnNvbGUubG9nKFwiVGV4dDpcIiwgdGV4dCk7XG5c bnRleHQuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgY29uc29sZS5sb2coXCJsaW5lOlwiLCBsaW5lKTtcbiA gICB2YXIgcmVzdWx0ID0gbGluZS5tYXRjaChyZSk7XG4gICAgaWYocmVzdWx0KVxuICAgICAgICBjb25zb2xlLmxv ZyhcInJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgICBlbHNlXG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVzdWx0OlwiLCBcIm51bGxcIik7XG59KVxuIn0 http://mevius.5ch.net/test/read.cgi/tech/1489511075/505
506: デフォルトの名無しさん [sage] 2018/05/15(火) 21:31:31.85 ID:xchMEgzc ちょっと修正 https://goo. gl/M2Fn68 http://mevius.5ch.net/test/read.cgi/tech/1489511075/506
507: デフォルトの名無しさん [sage] 2018/05/19(土) 02:57:37.83 ID:F73VBvr9 Linuxに触れるまで正規表現に方言があるなんて知らなかった 基本正規表現だの拡張正規表現だの vimの置換で悩んでたら原因がエスケープの有無が原因とかもうね ある程度は使えるが先読みとか後読みとか僅かでも深入りすると余計に混乱する http://mevius.5ch.net/test/read.cgi/tech/1489511075/507
508: デフォルトの名無しさん [sage] 2018/05/19(土) 11:08:45.44 ID:rxs2hai/ 小さい世界で囲い込まれてれば楽だよな ただし何かの拍子ではみ出した時に世界の広さを知って己の無力さを痛感する よくあるパターン http://mevius.5ch.net/test/read.cgi/tech/1489511075/508
509: デフォルトの名無しさん [] 2018/05/23(水) 19:28:29.89 ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 QBPEH http://mevius.5ch.net/test/read.cgi/tech/1489511075/509
510: デフォルトの名無しさん [sage] 2018/05/24(木) 10:47:44.54 ID:cPlRxlDn QBPEH http://mevius.5ch.net/test/read.cgi/tech/1489511075/510
511: デフォルトの名無しさん [sage] 2018/05/25(金) 13:52:01.06 ID:X/Hngdv+ HTMLの解析を正規表現でやりたいのですが <a href="xxxxx"><img src="yyyyy" /></a> という風に、<a> で括られた img の src だけを抽出したいんですけど どうしたらいいのでしょう。 <a> で括られてない <img src="yyyyy" /> は除外したいのです。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/511
512: デフォルトの名無しさん [sage] 2018/05/25(金) 13:53:08.12 ID:X/Hngdv+ あ、すみません <a href="xxxxx"><img src="yyyyy" /></a> <a href="xxxxx">あああ<img src="yyyyy" /></a> <a href="xxxxx"><img src="yyyyy" />いいい</a> <a href="xxxxx">あああ<img src="yyyyy" />いいい</a> <a href="xxxxx"><img src="yyyyy" /><div>あああ<div></a> みたいに、<a> の中は <img> 以外のゴミも入ってきます。 ※ゴミは無視したい http://mevius.5ch.net/test/read.cgi/tech/1489511075/512
513: デフォルトの名無しさん [sage] 2018/05/25(金) 14:10:36.40 ID:dgrSTrid >>512 ^<a\b.+<img src="([^"]+)".+</a>$ ↓ $1 http://mevius.5ch.net/test/read.cgi/tech/1489511075/513
514: デフォルトの名無しさん [sage] 2018/05/25(金) 16:20:05.07 ID:fgSfMucA >>513 <a href=""></a><img src="1.jpg"><a href=""></a> http://mevius.5ch.net/test/read.cgi/tech/1489511075/514
515: デフォルトの名無しさん [sage] 2018/05/25(金) 20:00:28.32 ID:OUvr9ihJ 頑張ってみてもこの程度が限界 https://regex101.com/r/VYrYNO/1 で, >>511がHTMLの解析を正規表現だけでやる理由は何だ? Pythonのhtml.parser, RubyのNokogiri, PHPならGoutter, それ以外の言語でも間違いなくHTMLパーサは誰かしら作ってる そんな中で何故正規表現だけで?ぶっちゃけこういう用途には向いてない, というかHTMLの構文規則は正規言語を超えるんだけど, 分かってる? http://mevius.5ch.net/test/read.cgi/tech/1489511075/515
516: デフォルトの名無しさん [sage] 2018/05/25(金) 20:29:09.95 ID:rhJz1xPv パーサかましてXPathで必要な情報だけ抜くのが基本だしな どうしても使えないっていう理由があるなら仕方ないけど http://mevius.5ch.net/test/read.cgi/tech/1489511075/516
517: デフォルトの名無しさん [sage] 2018/05/25(金) 21:21:37.93 ID:lQiYp+1p 鬼雲限定 <a (?~</a>)<img src="([^"]+)"[^>]*>(?~<a )</a> http://mevius.5ch.net/test/read.cgi/tech/1489511075/517
518: デフォルトの名無しさん [] 2018/05/25(金) 22:28:52.14 ID:Cqv+6nk2 ■変更前 004a34 A521n2 785b66 ■変更後 0049934 99521992 7859966 ---------------------- 数値以外を99に置換したいです お願いします http://mevius.5ch.net/test/read.cgi/tech/1489511075/518
519: デフォルトの名無しさん [sage] 2018/05/25(金) 23:31:17.71 ID:gd/oxjVv 木構造のものは、正規表現じゃ無理 1< 2< abc 3> 4> 2<からの最短マッチで、対応する3>を取れるけど、 1<からの最短マッチで、対応する4>を取れない。 3>にマッチしてしまうから 1< 2< 3< abc 4> 5> 6> これでも、2<と5>をマッチさせられない。 最長・最短マッチでも、マッチしない CSS セレクターを使う、jQuery, RubyのNokogiri などを使え。 これらの使い方は、ほぼ同じ http://mevius.5ch.net/test/read.cgi/tech/1489511075/519
520: デフォルトの名無しさん [sage] 2018/05/25(金) 23:43:29.83 ID:OUvr9ihJ >>518 数値以外と簡単に言うが改行文字や空白等の扱いはどうするんだ 変換対象文字をちゃんと明示しないと /[^0-9]/99/g こんなもんが欲しいわけではあるまい とりあえずASCII印字可能文字に限るなら /[\x21-\x2F\x40-\x7E]/99/g だが当然マルチバイト文字は対象外 http://mevius.5ch.net/test/read.cgi/tech/1489511075/520
521: デフォルトの名無しさん [sage] 2018/05/25(金) 23:44:35.69 ID:OUvr9ihJ \x40じゃなくて\x3Aだわ http://mevius.5ch.net/test/read.cgi/tech/1489511075/521
522: デフォルトの名無しさん [sage] 2018/05/26(土) 10:42:28.41 ID:oqQZJpqn >>517 非包含オペレータか http://mevius.5ch.net/test/read.cgi/tech/1489511075/522
523: デフォルトの名無しさん [sage] 2018/05/26(土) 17:59:00.22 ID:xbMfHZm2 >>519 再帰を使えば、対応する括弧のネスト対応ぐらいならできるらしいよ(鬼雲、PCRE) <([^<>]++|(?R))*> # [^<>]++は(?>[^<>]+)としてもよい(どっちもバックトラックしないと思う) # (?R)は、(?0)とも書ける # (<([^<>]++|(?1))*>) \g<-n>を使ってもできる(鬼雲だけ?) (<(?:\g<-1>|[^<>])*>) # \g<-1>は(?-1)とも書ける # ここでは\g<-1>を先に書いたが上と同じく後ろに書いても同じ http://mevius.5ch.net/test/read.cgi/tech/1489511075/523
524: デフォルトの名無しさん [sage] 2018/05/26(土) 19:07:35.21 ID:vUfk79H6 https://regex101.com/r/VYrYNO/1 なぁこれメンテしたいか?というか出来るか?なぁ? (?i:<a(?:\s+[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?)*>) ((?: (?i:<img(?:\s+(?:src="([^"]+)"|[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?))*(?:\s*\/)?>) |(?i:<([a-z][a-z0-9]*)(?:\s+[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?)*>(?1)<\/\3>) |(?i:<[a-z][a-z0-9]*(?:\s+[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?)*\s*\/>|.*?))*) (?i:<\/a>) http://mevius.5ch.net/test/read.cgi/tech/1489511075/524
525: デフォルトの名無しさん [sage] 2018/05/26(土) 19:08:54.60 ID:vUfk79H6 アップデートするの忘れてたわ https://regex101.com/r/VYrYNO/2 http://mevius.5ch.net/test/read.cgi/tech/1489511075/525
526: デフォルトの名無しさん [sage] 2018/06/23(土) 01:47:09.94 ID:19kQ7FFf のりこめー 【IT】プログラマーが正規表現を使いこなすメリットとは? https://egg.5ch.net/test/read.cgi/bizplus/1527843649/ http://mevius.5ch.net/test/read.cgi/tech/1489511075/526
527: デフォルトの名無しさん [sage] 2018/06/24(日) 13:33:59.68 ID:wSHpLaLO 文字列の中から数字13桁(それ未満でも超えてもNG)を抽出するにはどうしたらいいでしょう JANコードらしきを抜き取りたいのです。 候補を抽出してから後でチェックデジット計算しますので 数字13桁のみで大丈夫です。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/527
528: デフォルトの名無しさん [] 2018/06/24(日) 15:06:08.45 ID:F1zD07yq 数字40桁くらい連続してたらどうする? http://mevius.5ch.net/test/read.cgi/tech/1489511075/528
529: デフォルトの名無しさん [sage] 2018/06/24(日) 16:56:18.47 ID:wSHpLaLO 40桁はJANコードじゃないので除外したいです http://mevius.5ch.net/test/read.cgi/tech/1489511075/529
530: デフォルトの名無しさん [sage] 2018/06/24(日) 17:16:44.02 ID:1DBcJ9cD \b[0-9]{13}\b とか (?<![0-9])[0-9]{13}(?![0-9]) とか 携帯だから試してない http://mevius.5ch.net/test/read.cgi/tech/1489511075/530
531: 530 [sage] 2018/06/24(日) 20:41:43.34 ID:LPLL+qJx 先頭と末尾も考慮すると https://regex101.com/r/xT760t/2 (?:(?<=[^0-9])|^)[0-9]{13}(?:(?=[^0-9])|$) ただかなりバックトラックするから性能は悪い どうせチェックディジット確認するなら13桁以上で全抽出して桁数チェック追加した方がマシに見える https://regex101.com/r/xT760t/4 [0-9]{13,} http://mevius.5ch.net/test/read.cgi/tech/1489511075/531
532: デフォルトの名無しさん [sage] 2018/06/24(日) 23:39:40.09 ID:chBT6m1a 結構、難しい A <13桁の数字> B A の部分が、文字列の先頭か、数字以外で、 B の部分が、文字列の末尾か、数字以外 http://mevius.5ch.net/test/read.cgi/tech/1489511075/532
533: デフォルトの名無しさん [sage] 2018/06/25(月) 07:16:09.30 ID:HTnjHonA 文字列操作可能なら両端に数字以外の文字を付加して [^0-9][0-9]{13}[^0-9] かな http://mevius.5ch.net/test/read.cgi/tech/1489511075/533
534: デフォルトの名無しさん [] 2018/06/25(月) 08:32:20.35 ID:g3low2hV >>531 先読み後読みは先頭や末尾にも一致するからそういうのは無駄 >>530の二つ目で完成している http://mevius.5ch.net/test/read.cgi/tech/1489511075/534
535: デフォルトの名無しさん [sage] 2018/06/25(月) 09:21:19.58 ID:9/L2g6Oc >>534 せやな, 否定前後読みならそのままでよかったわ(肯定で試しちゃった) ただどのみちバックトラック多くて無駄だから正規表現だけでやるのでなければ13桁以上でマッチングして桁数判定入れるべきだと思う http://mevius.5ch.net/test/read.cgi/tech/1489511075/535
536: デフォルトの名無しさん [sage] 2018/06/25(月) 21:12:44.36 ID:lRi8bnr9 13桁を超えていても候補として受け取っておいて チェックデジットの計算の手前で落とします。 どうもありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/536
537: デフォルトの名無しさん [sage] 2018/06/26(火) 18:51:05.99 ID:PFtq6YS9 文字列の先頭の文字以外を*に変換する というのはどう書けばいいでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/537
538: デフォルトの名無しさん [] 2018/06/26(火) 20:16:27.74 ID:IMFKH44M こういうこと? $perl -pe 's/(?!^)./*/g' alpha a**** beta b*** gamma g**** $ 良い方法かどうかはわからないが。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/538
539: デフォルトの名無しさん [] 2018/06/26(火) 20:22:51.32 ID:IMFKH44M perl -pe 's/(?<!^)./*/g' とすべきだったかな。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/539
540: デフォルトの名無しさん [] 2018/07/04(水) 22:06:49.23 ID:gFgZc5FG J1Q http://mevius.5ch.net/test/read.cgi/tech/1489511075/540
541: デフォルトの名無しさん [sage] 2018/07/05(木) 16:31:37.58 ID:AeL6VB/V J1Q http://mevius.5ch.net/test/read.cgi/tech/1489511075/541
542: デフォルトの名無しさん [] 2018/07/16(月) 14:08:24.67 ID:80hpbb9v 1 2 3 の3つの文字を、順番不同で、必ず各々、1つ以上含む a23b1 → 真 1a2 → 偽 これは順番の組み合わせだから、正規表現で出来ますか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/542
543: デフォルトの名無しさん [] 2018/07/16(月) 14:41:45.67 ID:/+vnEc6c >>542 先読みが使えれば ^(?=.*1)(?=.*2)(?=.*3) http://mevius.5ch.net/test/read.cgi/tech/1489511075/543
544: デフォルトの名無しさん [] 2018/07/25(水) 19:56:10.60 ID:1XdhMp/e サクラエディタで <>で囲まれていないaaaをあああにしたいです <aaab>aaa<caaadaaa>baaadeaaa<ccc>baaad<baaa>aaabaaadaaa<ee> ↓ <aaab>あああ<caaadaaa>bあああdeあああ<ccc>bあああd<baaa>あああbあああdあああ<ee> >([^<>a]*?)(aaa)([^<>a]*?)< >$1あああ$2< だと「>aaa<」や「>baaad<」は置換できるけど「>baaadeaaa<」や「>aaabaaadaaa<」が置換できずに残る そこで >([^<>a]*?)(aaa)([^<>a]*?)(aaa)([^<>a]*?)< >$1あああ$2あああ$3< と変換するわけですが当然「>aaabaaadaaa<」が残り… <>に囲まれていないaaaが沢山あるので変換しきれません 何とかならないでしょうか http://mevius.5ch.net/test/read.cgi/tech/1489511075/544
545: デフォルトの名無しさん [sage] 2018/07/25(水) 20:31:56.63 ID:AmPlbSPQ []内のa取っ払って ぜんぶ変換できるまで何回もやったら? (>[^<]*?)aaa([^>]*?<) http://mevius.5ch.net/test/read.cgi/tech/1489511075/545
546: デフォルトの名無しさん [sage] 2018/07/25(水) 20:46:43.74 ID:AmPlbSPQ aaa(?=[^>]*<) 前後に必ずタグがあるならこれなら一回 http://mevius.5ch.net/test/read.cgi/tech/1489511075/546
547: デフォルトの名無しさん [] 2018/07/26(木) 09:15:37.25 ID:4NbdqkDU >>545>>546 できた!できました! ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1489511075/547
548: デフォルトの名無しさん [sage] 2018/07/29(日) 09:53:04.64 ID:JxpitKP8 ● パターン1, (\d+)月(\d+)日 パターン2, (\d+)月(\d+)数字以外(\d+)日 これを一回で取得したい ●対象データ 7月1日 7月2〜4日 7月6から10日 7月12・13日 ●希望する結果 7,1 7,2,4 7,6,10 7,12,13 お願いします http://mevius.5ch.net/test/read.cgi/tech/1489511075/548
549: デフォルトの名無しさん [sage] 2018/07/29(日) 10:18:20.53 ID:kCYuy8BN 取得って何だよ変数に入ればいいのか置換結果として取得したいのか http://mevius.5ch.net/test/read.cgi/tech/1489511075/549
550: デフォルトの名無しさん [sage] 2018/07/29(日) 10:49:28.56 ID:TzC7zb5n >>548 ほんまにそれが希望する結果? 数字とりだしてるだけなんだけど。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/550
551: デフォルトの名無しさん [sage] 2018/07/29(日) 10:59:44.43 ID:JxpitKP8 取り出すだけでいいです。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/551
552: デフォルトの名無しさん [sage] 2018/07/29(日) 11:42:16.30 ID:kCYuy8BN 数字取り出して変数に入れるだけなら /(\d+)月(\d+)(?:\D+(\d+))?日/gu で仕舞いだが http://mevius.5ch.net/test/read.cgi/tech/1489511075/552
553: デフォルトの名無しさん [sage] 2018/07/29(日) 11:45:23.47 ID:JxpitKP8 >>552 完璧です。 ありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/553
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.net/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><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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 383 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.155s*