1 名前:デフォルトの名無しさん [2017/03/15(水) 02:04:35.47 ID:e01p03UP.net] Regular Expressionスレです。 質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。 前スレ Regular Expression(正規表現) Part13 echo.2ch.net/test/read.cgi/tech/1415149975/ 次スレは>>980 宜しく 天ぷら等2以降
488 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 19:38:34.22 ID:U5C29TI1.net] 複数のSQL文の書かれているSQLファイルから、DBの処理単位でSQL文を逐次取り出す正規表現が書きたいのですがどうしたら良いですか? 厳密なものでは無くても良くて英文字から始まってセミコロンで終わるというもので良いのです。 ただ、SQL分は行頭から始まるとは限らず、セミコロンの直後に次のSQL文が始まったり、空白文字などがあってからSQLの文が始まったりすることもあります。 また、文中に出てくるエスケープされたセミコロンや文字列中のセミコロンは文末の対象になって区切られては困るのでそれはスキップして評価がしたいです。
489 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 22:09:42.71 ID:witjIkkr.net] 文字列の内外を判断するの難しい・・・・難しくない?
490 名前:デフォルトの名無しさん [2018/04/07(土) 12:21:20.06 ID:BRhgC8GS.net] multilineのオプション付けて ;でsplitしただけじゃだめなん
491 名前:デフォルトの名無しさん [2018/04/07(土) 12:23:00.56 ID:BRhgC8GS.net] >>476 それが含まれる時点で無理に正規表現一行で書くのはいつもあきらめる
492 名前:デフォルトの名無しさん mailto:sage [2018/04/07(土) 12:30:00.76 ID:LBmouzwW.net] ちゃんとやるなら文字列中のエスケープされたシングルクォートとかも処理しないとダメだし正規表現でやるのはすごく大変だと思う
493 名前:デフォルトの名無しさん mailto:sage [2018/04/07(土) 12:57:57.77 ID:wQfk+GMe.net] 正規文法ではかなり厳しい印象で, BNFの管轄だと思うおよね
494 名前:デフォルトの名無しさん [2018/04/08(日) 06:27:09.85 ID:1mmlbc0v.net] 1. ; で分割して、配列に入れる 2. 配列の各要素から、余分なものを削除する 2 のルールを、厳格に決めればよい Ruby で作る方が速い
495 名前:デフォルトの名無しさん [2018/04/08(日) 11:04:16.11 ID:YK+KPtHu.net] 正規表現は置いといて DB用意して""で囲まれた部分をテキストとしてDBに入れながらID取得 本文側はIDに置き換える あとは正規表現を使っても使わなくてもいいが;で分割 最後にまたID部分に元のテキストを流し込む
496 名前:デフォルトの名無しさん [2018/04/08(日) 13:00:20.92 .net] そこであきらめんなよ! 正規表現だけで乗り切ろうという気概を見せろよ!
497 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 13:08:05.41 ID:wO4VFvVz.net] (シングル|ダブル)クオート文字列って正規言語で表せる範囲にあるんかね? 文脈自由言語では表せるけど
498 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 13:27:19.00 ID:aPw27k7Z.net] どの正規表現がつかえるのかがわからん 環境を明示してくれないとなー
499 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 18:18:43.83 ID:1mmlbc0v.net] /\"([^\"]*)\"/ =~ 'a"bc"d' $1 #=> bc "〜" で、〜には、" 以外の文字列が入る
500 名前:デフォルトの名無しさん mailto:sage [2018/04/08(日) 18:28:48.48 ID:aPw27k7Z.net] "のエスケープや'もあるし 'a"b\"c'd"e'
501 名前:473 mailto:sage [2018/04/09(月) 10:33:55.69 ID:Q+cYQrXX.net] 沢山ご回答ありがとうございます。 皆さんのご意見を伺った限り、やはり正規表現一本では難しそうですよね… はじめは前処理で既成のsqlパーサなどを通して、きれいに整形して別ファイルに保存してから処理する方法も検討していましたが、 できれば現物ファイルを生のまま読み込んで正規表現でなんとか行けないかなと思い試行錯誤していて、 うまい書き方が全然できなくてここに書き込みさせて頂いた次第です。 >>485 使用できる正規表現はPCREです。 具体的にはPHPで省メモリで巨大なSQLファイルを実行する仕組みが作りたくて 相談させてもらいました。自分の頭の中のアイデアでは 1.fileをbufsize分readして 2.正規表現でマッチするかチェック 3.マッチしていたらそのSQLを実行。マッチした文より、先の部分は次の実行のためにバッファに積んで1へもどる 4.マッチしていない場合は更にbufsize分read、2->4を繰り返す。 こんなイメージでした。 それを鑑みると、>>482 さんのアイデアはちょっとありかなとも思います。 スレ違いなっちゃいますが、regexを使わずプログラム上でクオートの始まりと終わりを正しく 処理できれば随分楽できそうな気がします。一考の余地ありですかね?
502 名前:デフォルトの名無しさん [2018/04/09(月) 12:10:15.13 ID:M/BmQ9Z1.net] "'", "\"" '"', '\'' クォーテーション内にクォーテーションがある、入れ子状態が難しい。 クォーテーションを、\ でエスケープしたりもあるし XML Parser とか、プログラム実行の命令木とか、解析ツールを使わないと無理。 プログラミングで何とかできる、範囲を超えている そもそも、入れ子状態にどういうパターンがあるのか、 全列挙して考えるのが、非常に難しい 入れ子の入れ子とか、再帰的に入れ子するかも知れないし
503 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 17:17:14.98 ID:4vJW9Ikj.net] >>488 こういう感じでどうだろう [a-zA-Z](?:\\"|\\'|[^"';]|(["'])(?:\\\1|(?:(?!\1).))*(?<!\\)\1)*; 英数字で始まって、\"や\'は許す;で終わる文字列 頭に^\s*を付けたほうがいいかもしれないけど 文字列は、" ' "、' " '、" \" "、' \' 'は許す( ; もOK) ところで、" ' " ' "とは書けるんだっけ? こういう括弧のネストが可能なら、正規表現の方もネスト構文や条件構文を使わないといけないけど (俺は使ったことはないけど)
504 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 17:44:25.66 ID:4vJW9Ikj.net] ただし↑は、コメント文はないものとしてのこと
505 名前:デフォルトの名無しさん mailto:sage [2018/04/09(月) 19:00:46.18 ID:4vJW9Ikj.net] さっそくダメだった "\\"
506 名前:デフォルトの名無しさん [2018/04/10(火) 00:21:39.82 ID:oEQHPFsL.net] 仕様を確定させるのが難しい。 単なるテキストには、ルールが無いだろ XML とか、プログラム言語には、仕様があって、 ルール違反の書き方を許さないから、プログラムで判定できる だから、まずこう書いたらエラーにする、という仕様を決めるべき
507 名前:デフォルトの名無しさん mailto:sage [2018/04/10(火) 01:17:02.18 ID:IM3kTV8x.net] >>493 https://ronsavage.github.io/SQL/sql-2003-2.bnf.html こいつのcharacter string literalとか読め ちゃんと規格化されてるんだからさ その上で正規表現で書くのは難しいって話
508 名前:デフォルトの名無しさん [2018/04/11(水) 13:14:45.93 ID:p/bo/Ju1.net] 試しに 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 を使ったりする。
509 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 14:19:31.82 ID:jfPKheqL.net] 仕様通りのParser とか、構文解析ツールが必要 それらを使って出力された、抽象構文木を使うのがよい
510 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 19:16:13.25 ID:kVAlpXQV.net] ★タイトル ★★タイトル 上のものにマッチさせたいのですが、 ^★.*$ としてしまうと、下まで含まれるのですが、どうしたらいいでしょうか
511 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 19:36:12.61 ID:eD01Afe2.net] >>497 ^★(?! ★).*$
512 名前:495 mailto:sage [2018/05/04(金) 21:14:35.89 ID:L0LZvRGB.net] 半角SP紛れ込んだわ ^★(?!★).*$
513 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 05:47:27.14 ID:iaqxNbgL.net] ↑解答どうも できなかったです ちなみにmeryというテキストエディタの正規表現です 何の言語かはわかりませんが
514 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 06:26:09.87 ID:O3up5M1Q.net] https://regex101.com/r/YyXfr8/1 鬼雲みたいだし動くと思うんだけど, 先頭とか末尾に余計なスペース入ってない?
515 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 19:07:12.77 ID:iaqxNbgL.net] ↑ありがとうございます。行けました。 .*の前に否定を入れればいいんですね
516 名前:デフォルトの名無しさん [2018/05/05(土) 21:57:45.66 ID:+tF+3NSL.net] 鬼雲…だと…?!
517 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 13:28:13.91 ID:XtvW294Z.net] 正規表現をちゃんと論理的に導きたいと思って参考になる本を 買ったら必要な予備知識に群とか環が出てきて即諦めた 正規表現周りの開発をしてる人達はすごい人達なんだなぁ すごさを直で実感出来た
518 名前:デフォルトの名無しさん [2018/05/07(月) 14:59:22.19 ID:QMgv+0U5.net] 用語に慣れてないだけだろ やってることは大したことじゃない
519 名前:デフォルトの名無しさん mailto:sage [2018/05/07(月) 18:08:31.65 ID:XtvW294Z.net] まぁ膨大な時間と労力をかければ自分にも分かるんだろうけど 現実的じゃないんだよなぁ(人の何倍も時間かかるだろうし) これからは正規表現技術者の努力に感謝しながら正規表現を 使おうと思います(^^)>
520 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 07:31:45.21 ID:0PI4I4+g.net] JavaScriptによる正規表現チェッカー くっそ長いので短縮 https://goo. gl/CE3aZ8 https://fatiherikli.github.io/fil/#eyJwYXRoIjoiSmF2YVNjcmlwdFRlc3QxLmpzIiwic291cmNlIjoiLyog5q2j6KaP6KG o54++44Oe44OD44OB44OG44K544OIICovXG5cbi8vIOato+imj+ihqOePvlxudmFyIHJlID0gbmV3
521 名前:IFJlZ0V4cCgv XFxkKy9nKTtcblxuLy8g44OG44Kt44K544OIXG52YXIgdGV4dCA9IChmdW5jdGlvbiAoKSB7LypcbmFhYVxuYmIx MmJcbmM1NjdjYzg5XG4qL30pLnRvU3RyaW5nKCkuc3BsaXQoL1xcbi8pLnNsaWNlKDEsLTEpO1xuXG5jb25zb2x lLmxvZyhcIlJlZ0V4cDpcIiwgcmUudG9TdHJpbmcoKSlcbmNvbnNvbGUubG9nKFwiVGV4dDpcIiwgdGV4dCk7XG5c bnRleHQuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgY29uc29sZS5sb2coXCJsaW5lOlwiLCBsaW5lKTtcbiA gICB2YXIgcmVzdWx0ID0gbGluZS5tYXRjaChyZSk7XG4gICAgaWYocmVzdWx0KVxuICAgICAgICBjb25zb2xlLmxv ZyhcInJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgICBlbHNlXG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVzdWx0OlwiLCBcIm51bGxcIik7XG59KVxuIn0 [] [ここ壊れてます]
522 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 21:31:31.85 ID:xchMEgzc.net] ちょっと修正 https://goo. gl/M2Fn68
523 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:57:37.83 ID:F73VBvr9.net] Linuxに触れるまで正規表現に方言があるなんて知らなかった 基本正規表現だの拡張正規表現だの vimの置換で悩んでたら原因がエスケープの有無が原因とかもうね ある程度は使えるが先読みとか後読みとか僅かでも深入りすると余計に混乱する
524 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 11:08:45.44 ID:rxs2hai/.net] 小さい世界で囲い込まれてれば楽だよな ただし何かの拍子ではみ出した時に世界の広さを知って己の無力さを痛感する よくあるパターン
525 名前:デフォルトの名無しさん [2018/05/23(水) 19:28:29.89 ID:Au5e7VGg.net] 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 QBPEH
526 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 10:47:44.54 ID:cPlRxlDn.net] QBPEH
527 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 13:52:01.06 ID:X/Hngdv+.net] HTMLの解析を正規表現でやりたいのですが <a href="xxxxx"><img src="yyyyy" /></a> という風に、<a> で括られた img の src だけを抽出したいんですけど どうしたらいいのでしょう。 <a> で括られてない <img src="yyyyy" /> は除外したいのです。
528 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 13:53:08.12 ID:X/Hngdv+.net] あ、すみません <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> 以外のゴミも入ってきます。 ※ゴミは無視したい
529 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 14:10:36.40 ID:dgrSTrid.net] >>514 ^<a\b.+<img src="([^"]+)".+</a>$ ↓ $1
530 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 16:20:05.07 ID:fgSfMucA.net] >>515 <a href=""></a><img src="1.jpg"><a href=""></a>
531 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 20:00:28.32 ID:OUvr9ihJ.net] 頑張ってみてもこの程度が限界 https://regex101.com/r/VYrYNO/1 で, >>513 がHTMLの解析を正規表現だけでやる理由は何だ? Pythonのhtml.parser, RubyのNokogiri, PHPならGoutter, それ以外の言語でも間違いなくHTMLパーサは誰かしら作ってる そんな中で何故正規表現だけで?ぶっちゃけこういう用途には向いてない, というかHTMLの構文規則は正規言語を超えるんだけど, 分かってる?
532 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 20:29:09.95 ID:rhJz1xPv.net] パーサかましてXPathで
533 名前:必要な情報だけ抜くのが基本だしな どうしても使えないっていう理由があるなら仕方ないけど [] [ここ壊れてます]
534 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 21:21:37.93 ID:lQiYp+1p.net] 鬼雲限定 <a (?~</a>)<img src="([^"]+)"[^>]*>(?~<a )</a>
535 名前:デフォルトの名無しさん [2018/05/25(金) 22:28:52.14 ID:Cqv+6nk2.net] ■変更前 004a34 A521n2 785b66 ■変更後 0049934 99521992 7859966 ---------------------- 数値以外を99に置換したいです お願いします
536 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 23:31:17.71 ID:gd/oxjVv.net] 木構造のものは、正規表現じゃ無理 1< 2< abc 3> 4> 2<からの最短マッチで、対応する3>を取れるけど、 1<からの最短マッチで、対応する4>を取れない。 3>にマッチしてしまうから 1< 2< 3< abc 4> 5> 6> これでも、2<と5>をマッチさせられない。 最長・最短マッチでも、マッチしない CSS セレクターを使う、jQuery, RubyのNokogiri などを使え。 これらの使い方は、ほぼ同じ
537 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 23:43:29.83 ID:OUvr9ihJ.net] >>520 数値以外と簡単に言うが改行文字や空白等の扱いはどうするんだ 変換対象文字をちゃんと明示しないと /[^0-9]/99/g こんなもんが欲しいわけではあるまい とりあえずASCII印字可能文字に限るなら /[\x21-\x2F\x40-\x7E]/99/g だが当然マルチバイト文字は対象外
538 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 23:44:35.69 ID:OUvr9ihJ.net] \x40じゃなくて\x3Aだわ
539 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 10:42:28.41 ID:oqQZJpqn.net] >>519 非包含オペレータか
540 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 17:59:00.22 ID:xbMfHZm2.net] >>521 再帰を使えば、対応する括弧のネスト対応ぐらいならできるらしいよ(鬼雲、PCRE) <([^<>]++|(?R))*> # [^<>]++は(?>[^<>]+)としてもよい(どっちもバックトラックしないと思う) # (?R)は、(?0)とも書ける # (<([^<>]++|(?1))*>) \g<-n>を使ってもできる(鬼雲だけ?) (<(?:\g<-1>|[^<>])*>) # \g<-1>は(?-1)とも書ける # ここでは\g<-1>を先に書いたが上と同じく後ろに書いても同じ
541 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 19:07:35.21 ID:vUfk79H6.net] 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>)
542 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 19:08:54.60 ID:vUfk79H6.net] アップデートするの忘れてたわ https://regex101.com/r/VYrYNO/2
543 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 01:47:09.94 ID:19kQ7FFf.net] のりこめー 【IT】プログラマーが正規表現を使いこなすメリットとは? https://egg.5ch.net/test/read.cgi/bizplus/1527843649/
544 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 13:33:59.68 ID:wSHpLaLO.net] 文字列の中から数字13桁(それ未満でも超えてもNG)を抽出するにはどうしたらいいでしょう JANコードらしきを抜き取りたいのです。 候補を抽出してから後でチェックデジット計算しますので 数字13桁のみで大丈夫です。
545 名前:デフォルトの名無しさん [2018/06/24(日) 15:06:08.45 ID:F1zD07yq.net] 数字40桁くらい連続してたらどうする?
546 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 16:56:18.47 ID:wSHpLaLO.net] 40桁はJANコードじゃないので除外したいです
547 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 17:16:44.02 ID:1DBcJ9cD.net] \b[0-9]{13}\b とか (?<![0-9])[0-9]{13}(?![0-9]) とか 携帯だから試してない
548 名前:530 mailto:sage [2018/06/24(日) 20:41:43.34 ID:LPLL+qJx.net] 先頭と末尾も考慮すると https://regex101.com/r/xT760t/2
549 名前: (?:(?<=[^0-9])|^)[0-9]{13}(?:(?=[^0-9])|$) ただかなりバックトラックするから性能は悪い どうせチェックディジット確認するなら13桁以上で全抽出して桁数チェック追加した方がマシに見える https://regex101.com/r/xT760t/4 [0-9]{13,} [] [ここ壊れてます]
550 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 23:39:40.09 ID:chBT6m1a.net] 結構、難しい A <13桁の数字> B A の部分が、文字列の先頭か、数字以外で、 B の部分が、文字列の末尾か、数字以外
551 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 07:16:09.30 ID:HTnjHonA.net] 文字列操作可能なら両端に数字以外の文字を付加して [^0-9][0-9]{13}[^0-9] かな
552 名前:デフォルトの名無しさん [2018/06/25(月) 08:32:20.35 ID:g3low2hV.net] >>533 先読み後読みは先頭や末尾にも一致するからそういうのは無駄 >>532 の二つ目で完成している
553 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 09:21:19.58 ID:9/L2g6Oc.net] >>536 せやな, 否定前後読みならそのままでよかったわ(肯定で試しちゃった) ただどのみちバックトラック多くて無駄だから正規表現だけでやるのでなければ13桁以上でマッチングして桁数判定入れるべきだと思う
554 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 21:12:44.36 ID:lRi8bnr9.net] 13桁を超えていても候補として受け取っておいて チェックデジットの計算の手前で落とします。 どうもありがとうございました。
555 名前:デフォルトの名無しさん mailto:sage [2018/06/26(火) 18:51:05.99 ID:PFtq6YS9.net] 文字列の先頭の文字以外を*に変換する というのはどう書けばいいでしょうか?
556 名前:デフォルトの名無しさん [2018/06/26(火) 20:16:27.74 ID:IMFKH44M.net] こういうこと? $perl -pe 's/(?!^)./*/g' alpha a**** beta b*** gamma g**** $ 良い方法かどうかはわからないが。
557 名前:デフォルトの名無しさん [2018/06/26(火) 20:22:51.32 ID:IMFKH44M.net] perl -pe 's/(?<!^)./*/g' とすべきだったかな。
558 名前:デフォルトの名無しさん [2018/07/04(水) 22:06:49.23 ID:gFgZc5FG.net] J1Q
559 名前:デフォルトの名無しさん mailto:sage [2018/07/05(木) 16:31:37.58 ID:AeL6VB/V.net] J1Q
560 名前:デフォルトの名無しさん [2018/07/16(月) 14:08:24.67 ID:80hpbb9v.net] 1 2 3 の3つの文字を、順番不同で、必ず各々、1つ以上含む a23b1 → 真 1a2 → 偽 これは順番の組み合わせだから、正規表現で出来ますか?
561 名前:デフォルトの名無しさん [2018/07/16(月) 14:41:45.67 ID:/+vnEc6c.net] >>544 先読みが使えれば ^(?=.*1)(?=.*2)(?=.*3)
562 名前:デフォルトの名無しさん [2018/07/25(水) 19:56:10.60 ID:1XdhMp/e.net] サクラエディタで <>で囲まれていない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が沢山あるので変換しきれません 何とかならないでしょうか
563 名前:デフォルトの名無しさん mailto:sage [2018/07/25(水) 20:31:56.63 ID:AmPlbSPQ.net] []内のa取っ払って ぜんぶ変換できるまで何回もやったら? (>[^<]*?)aaa([^>]*?<)
564 名前:デフォルトの名無しさん mailto:sage [2018/07/25(水) 20:46:43.74 ID:AmPlbSPQ.net] aaa(?=[^>]*<) 前後に必ずタグがあるならこれなら一回
565 名前:デフォルトの名無しさん [2018/07/26(木) 09:15:37.25 ID:4NbdqkDU.net] >>547 >>548 できた!できました! ありがとうございます
566 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 09:53:04.64 ID:JxpitKP8.net] ● パターン1, (\d+)月(\d+)日 パターン2, (\d+)月(\d+)数字以外(\d+)日 これを一回で取得したい ●対象データ 7月1日 7月2〜4日 7月6から10日 7月12・13日 ●希望する結果 7,1 7,2,4
567 名前: 7,6,10 7,12,13 お願いします [] [ここ壊れてます]
568 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 10:18:20.53 ID:kCYuy8BN.net] 取得って何だよ変数に入ればいいのか置換結果として取得したいのか
569 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 10:49:28.56 ID:TzC7zb5n.net] >>550 ほんまにそれが希望する結果? 数字とりだしてるだけなんだけど。
570 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 10:59:44.43 ID:JxpitKP8.net] 取り出すだけでいいです。
571 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 11:42:16.30 ID:kCYuy8BN.net] 数字取り出して変数に入れるだけなら /(\d+)月(\d+)(?:\D+(\d+))?日/gu で仕舞いだが
572 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 11:45:23.47 ID:JxpitKP8.net] >>554 完璧です。 ありがとうございました。
573 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 11:49:24.17 ID:kCYuy8BN.net] 変数にキャプチャしたいのか置換で取り出したいのかくらい書こうな
574 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 11:57:08.75 ID:JxpitKP8.net] 失礼しました
575 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 20:55:52.79 ID:MOc1ccj1.net] C#で正規表現を使ってHTML内から文字コードをとってきたいのですが 以下の場合だと"UTF"としか取得できません。 "UTF-8"と取得する場合どうすればいいでしょうか? <[^>]*\bcharset\s*=\s*[""']?(?<charset>\w+)\b <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8">
576 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 21:30:40.27 ID:mMH07JtW.net] >>558 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 ぐらいか でもこれ後で読むのしんどいでしょ
577 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 21:47:08.19 ID:L571MbNB.net] >>559 神だ
578 名前:557 mailto:sage [2018/08/12(日) 21:53:09.85 ID:mMH07JtW.net] 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
579 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 22:00:37.17 ID:MOc1ccj1.net] >>559 ありがとうございます! 当方がやりたかったことは、HTMLをテキストデータとして大量に取得して、その中から特定のワードでの絞り込みです。 正しい文字コードでHTMLを落としてからパースしようと思ったのですが、確かにパーサでやる手もありそうですね 正規表現は今まで避けてきたので、読むのがシンドイっていうかチンプンカンプンですが 求めていた動作です。とても助かりました。 使わせてももらいます。ありがとうございました。
580 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 23:56:24.69 ID:2UQfVx23.net] HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理 <1><x></x><y></y></1> 開き・閉じタグで、前から一致させると、 <1></x> が対応してしまう ネストも無限にできるから、対応させるのは無理。 パーサを使うべき
581 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 00:16:51.60 ID:06GD6VnQ.net] キーワードと構成次第だろ
582 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 00:22:13.35 ID:LXDaPxOa.net] rubyキチやぞ
583 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 03:34:58.19 ID:EnLsbSTB.net] >>563 一部の環境では括弧等のネスト構造を取り扱いをサポートした正規表現があるよ PCRE(Perl 5.10以降)やruby(鬼雲)、Python,PHPなどでも C#の.NET Framework環境でもあったんじゃないかな
584 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:11:59.52 ID:4kav5HXR.net] .* 何にでもマッチさせることができる最強で万能な正規表現
585 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:26:33.22 ID:FR6Db0Vc.net] 改行にはマッチしないけどね [\s\S]*
586 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 02:29:36.02 ID:cgE41D9D.net] >>563 > HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理 そういうこともできるように拡張した正規表現があればいいのに さらに階層、treeも可
587 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 03:56:55.93 ID:k/tOxHF9.net] >>569 鬼雲使ってみれば?
588 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 10:28:37.49 ID:bF2ATmvV.net] BNF使えよ