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以降
449 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:23:34.33 ID:GgVv8IsN.net] >>437 全然ダメ 入力が [abc]def[ghi] なら全文がマッチする(量化指定子*はgreedyだから末尾手前まで全部食う)
450 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:34:31.04 ID:dBpGhFbZ.net] >>435 実行環境によってだけどコンパイルされて速くなったりするので さくっと一行で書けるならメリットはあるよ プログラム書いた方が良い場合もある ケースバイケース
451 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 18:30:54.06 ID:Q4bZpk0j.net] >>436 >>439 レスサンクスコ 今Pythonで作られているパッケージを保守してるんだけど、お約束のように最初に正規表現で抜いて後で編集してる 最初のパフォーマンスを考慮してるのかもだけど、読みにくくて一般人にはいいことないよ
452 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 19:13:24.69 ID:M8XJLm2H.net] >>435 ワンライナーで可読性保守性とか気にしない ストリームエディタで検索、ログの抽出が最たる用途じゃないか
453 名前:デフォルトの名無しさん [2018/02/16(金) 20:46:56.42 ID:d9VDf+sb.net] >>421 $# 「行頭部分にある 1 個以上の \[[^\]
454 名前:*\] を削除」と初見で思ったのだが、違うのか? $# それとも C# でどうやるかわからないという話? 申し訳ないが C# は知らない。 $ $cat a_in [ああ]おおおおお [いいい]こここここ [うう][ええ]そそそそそ ととととと[たた] [ええ]あああ[いい]うう $perl -pe 's/^(\[[^\]]*\])+//' < a_in おおおおお こここここ そそそそそ ととととと[たた] あああ[いい]うう $perl -0777 -pe 's/^(\[[^\]]*\])+//gm' < a_in おおおおお こここここ そそそそそ ととととと[たた] あああ[いい]うう $ [] [ここ壊れてます]
455 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 21:24:08.90 ID:nYHQACKk.net] >>438 Non-greedy(最短)なマッチ使えばいいだけじゃね? 使えない環境なの?
456 名前:デフォルトの名無しさん [2018/02/17(土) 05:30:35.08 ID:xZfN9pA3.net] 何を望んでいるのかを明確にする方が先かと……
457 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:13:15.50 ID:sN1lrGX4.net] >>443 none-greedyじゃ先頭しかマッチしない [abc][def]ghi の[abc]しか除去出来ない 反復適用すればいいというならその通りではあるが
458 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:27:08.57 ID:IU1gsQgu.net] [ab][cd][ef]ああ これは、繰り返しが入っている。 N回削除する必要がある [ab][cd][ef]ああ [cd][ef]ああ [ef]ああ ああ [〜] でグループ化すべき
459 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 12:22:01.47 ID:IU1gsQgu.net] /^\[[^\]]*\]/ =~ "[ab][cd]ああ" $& #=> [ab] Ruby で書いた。 行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある
460 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 12:32:03.69 ID:IU1gsQgu.net] /^\[[^\]]*\]/ =~ "[ab][cd]ああ" $& #=> [ab] $' #=> [cd]ああ /^\[[^\]]*\]/ =~ $' $& #=> [cd] $' #=> ああ /^\[[^\]]*\]/ =~ $' #=> nil Ruby で書いた。 行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある $& はマッチした部分で、$' はマッチした部分の後ろを表すから、 マッチを繰り返していけば、出来るけど
461 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 12:42:57.33 ID:IU1gsQgu.net] /^(\[[^\]]*\])+/ =~ "[ab][cd]ああ[ef]" $& #=> [ab][cd] やったー。Ruby で出来た \[ があり、\[ 以外の文字が、0以上続いて、\] がある。 これをグループ化して、1回以上繰り返す ただし、グループ外に、先頭からを指定する
462 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 07:04:41.40 ID:4dAbe4pu.net] 正規表現で使用される記号があるとワケわからなくなってくるから 適当な記号、例えばQなどに置き換えて試行錯誤して最後に元の記号に戻したりする
463 名前:デフォルトの名無しさん [2018/02/18(日) 11:53:19.92 ID:QWcmX5lk.net] 余計なバックトラックを防ぐために $s = qr/(?>\s*)/ ってやってパターンに埋め込むことならある。
464 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:29:48.73 ID:vtIXFjR6.net] (?s:^(?=.*ス)(?=.*プ)) CHmateで使う正規表現らしいんだけど最初の (?s:" の意味が検索してもわからないのですが教えていただけないでしょうか
465 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:45:42.10 ID:0zsudQHR.net] >>452 シングルラインモード >>349
466 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 00:35:55.07 ID:bvxyjlLF.net] >>453 ありがとございます 確認してなんとなく分かりました ところでこの正規表現の場合(?s:)って名前には改行はないので不要じゃないかと思ってしまうのですがどういう目的で使われているのでしょうか
467 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 01:37:05.64 ID:d6NztqhC.net] 書いたヤツの趣味じゃ? しかもかなりてきとう ワッチョイ名前ならおそらくドコモ判別?でもプだけではないitest.5ch.net/test/read.cgi/mango/1467623805/312 先読みなんてコストかけなくてもKOROKORO AAはSd固定 改行を無理矢理入れ込んでというシチュエーションでスとプでねらい打ちも違和感 本文で^(?=.*A)の類を使うとレス数後半のコストはかなりのもの これは名前だから大したことにはならないけど 深謀遠慮があるのかも知れんがそれこそ書いた本人へ
468 名前:デフォルトの名無しさん [2018/02/27(火) 15:54:44.12 ID:2v1tH105.net] C#で、 var rgx = new Regex("(.)+"); var str = "こんにちは。"; Console.WriteLine(rgx.Replace(str, "$1")); とすると「。」が出力されるのですが、なぜですか? $1は「。」になるのですか?「こ」だと思ったのですが、違いますか?
469 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 16:08:59.77 ID:u9k8VAiO.net] >>456 理由はここ読んで https://www.regular-expressions.info/captureall.html 短い説明は↓ここでも出てくる https://regex101.com/r/te5DBr/1
470 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 17:03:18.46 ID:VEiALCIH.net] どれどれ… javascript 'こんにちは。'.replace(/(.)+/, '$1'); => "。" ほんまや!知らんかった
471 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 19:34:07.35 ID:LuvO3mbW.net] >>457 配列に入れてくれればいいのに って思ったことあるわ
472 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 21:09:42.50 ID:PLAOSS1/.net] Ruby でも、 'こんにちは。'.gsub(/(.)+/, $1) #=> "。"
473 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 22:02:02.32 ID:u9k8VAiO.net] >>459 .NETはCaptureCollectionってのに入れてくれるみたいよ ただフルマッチとキャプチャリンググループと両方1度に必要なければ /(.){1}/みたいに正規表現変えれば配列に入れられるよね
474 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:03:30.09 ID:V9ixSdqS.net] >>457 すみません。 教えて頂いたサイトを見ても分かりません。 簡単に解説をお願いしたいのですが。
475 名前:デフォルトの名無しさん [2018/02/28(水) 22:05:09.20 ID:pxJOkH76.net] 単純に最後にマッチした部分ってことじゃないかな。赤ラクダにそう書いてある。 C# は知らない。誰か翻訳してあげて。
476 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 00:07:23.55 ID:UkKloD3U.net] >>462 キャプチャグループに量指定子がついてるとそのキャプチャグループの箇所に複数回マッチする可能性があるよね。 んで複数回マッチした場合は最後にマッチしたやつがそのキャプチャグループに入ってるってこと "こんにちは。”に対して、/(.)+/でマッチをかけると 最初にピリオドが“こ”にマッチしてそれをグループ1に入れて 次に+を見てまたマッチするか繰り返す 今度はピリオドに”ん”がマッチするからそれをグループ1に入れて、、、 あとは繰り返し “こんにちは。”が/(.)+/にフルマッチした時点でグループ1に入ってるのは”。”
477 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 00:17:03.42 ID:ikcjc59H.net] /(.+)/ =~ 'こんにちは。' $1 は、'こんにちは。' /(.)+/ =~ 'こんにちは。' $1 は、'。' 上は、1回しかマッチしていない、最長マッチ。 下は、1文字のマッチで、6回マッチして、最後のマッチが、'。'
478 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 00:55:21.78 ID:UkKloD3U.net] >>465 うーん、1文字マッチで6回マッチするのはどっちも同じじゃない? キャプチャグループに入れる回数の違い
479 名前:デフォルトの名無しさん [2018/03/01(木) 02:58:48.22 ID:ksBcbegD.net] >>464 なるほど。
480 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 05:29:23.47 ID:AobHbkwq.net] 詳細 ○○表現 尼での評価がよかったので買ってみたが全然 リファレンスにもならない やっぱり海外の訳本はだめだ、すくなくとも自分には良書でなかった
481 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 15:52:15.50 ID:UkKloD3U.net] フクロウ本のことかな 中の仕組みを理解するための本であって リファレンス本でも入門書でもないからね
482 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 09:24:29.36 ID:O5NS5hyG.net] >>466 そういうマッチャー自分で作る時はスキップするよう作るけど 正規表現エンジンはしないのか 複雑だとやってられないとかか
483 名前:デフォルトの名無しさん [2018/03/02(金) 13:01:46.53 ID:btKfsNEv.net] 試しに for pat in '([cd])+' '(.)+' '.*(.)' ; do perl -Mre=debug -e '$pat = shift; print "abcd" =~ /$pat/ ,"\n" ;
484 名前:' "$pat" ; done ってやってみた。最適化してそうだ。.*(.) は意味的には同じだと思うがバックトラックの分だけ不利。 Perl のソースコードを確認したわけではないので断定はしかねるが。 [] [ここ壊れてます]
485 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 08:34:43.98 ID:ooAwkD9v.net] 今はサンプルだからいいけど 長大な文章じゃスキップで最適化しないとやってられないよな
486 名前:469 [2018/03/03(土) 13:47:58.16 ID:GJwmn3yF.net] 個人的には (.)+ と書くべき理由が思い当たらない。
487 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 15:44:40.85 ID:QUMop1Gl.net] 正規表現とギターの速弾きが出来る奴は賢いと尊敬している
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,} [] [ここ壊れてます]