正規表現道場 Part2
Google Apps Scriptなんですが ここの時系列データ(日付〜出来高まで)抽出したいのだけど、上手くいきません。 ttps://jp.investing.com/indices/vn-historical-data var myRe = /<td.*>(\d{1,2}月\d{1,2}日\d{4}年)<\/td><td.*>([\d,]+(\.\d+)?)<\/td><td>([\d,]+(\.\d+)?)<\/td> <td>([\d,]+(\.\d+)?)<\/td><td>([\d,]+(\.\d+)?)<\/td><td.*>([\d,]+(\.\d+)?)k<\/td>/g; 公開された、APIを使えば? 公開されていないのなら、jQuery などで、抜き出せばいい id が、results_box で、その子孫の<td> なら「#results_box td」 var tmp_id = "results_box"; var selector = "#" + tmp_id + " td"; console.log('selector = ' + selector); var jqObj = $(data).find( selector ); console.log('jqObj.length = ' + jqObj.length, '\n', jqObj); if ( 0 === jqObj.length ) { データなし } !で始まる行を除く半角英数字を正規表現で記述することはできますか? 否定先読みを使ってもうまくいきませんでした >>283 素人考えで下記のようにしてみました (?!^!.*\n)[!-~¥] 素養がないので質問をすること自体が恐縮ではありますが ご教授いただければと思います プログラム板の正規表現スレの方が、人が多い。 そっちへ書き込んだら? 半角英数字は、文字クラスで、簡単に表現できそう 問題は具体例がないから何を対象として或いは対象としたくないのかが分からんということだ そもそも半角英数字には、! は含まれていないから、 ^[A-Za-z0-9]+$ ABCとDEF という単語を両方含むレスをNGにする事はできますか? ABCだけが含まれるレスとDEFだけが含まれるレスはNGにせず、両方含まれる場合だけNGにしたいです 誰でも簡単にネットで稼げる方法など 参考までに、 ⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。 グーグル検索⇒『半藤のブブイウイウレレ』 A4BHVWGZK8 http://egg.5ch.net/test/read.cgi/applism/1509549074/800 このような、本文に何もないレスを非表示NGにしたいのですが、^$でも^\n$でも対処が出来ず。 …と言うより、一体どう投稿したのかさっぱり分からず…試しに任意の1文字を含む本文をNGにしても効果なく、ならば任意の1文字を含まない本文を…も効果なく、まるで正規表現のNGWordを一切受け付けない感じなのですが、なにか方法がありますでしょうか? >>294 あと、正規表現を使わずに文字列で をNGWordにしたところ、本文無しレスが1つと、多数の普通のレスが巻き添えで消えてしまいました。 消えずに残った、連投された本文無しレスのしぶとさと言ったらもう…。 とりあえずJaneStyleで動いたやつ ^(?i:<br(?: ?/)?>|\s|&#(?:x[0-9a-fA-F]+|[0-9]+);| )*$ 本文中に数値参照入ってるから面倒なんだな >>296 ,297 レスありがとうございます! ああっ、すみません! 使ってるのはChMateです。 >>297 せっかく教えて頂いたのに肝心な環境をお伝えしてなくて申し訳ありません。 スマホのAndroid 8でChMateと言う専ブラを使ってます。 お教え頂いた正規表現自体は入力エラーになりませんでしたが、効果はありませんでした。 2chmateだと環境無いし分からんな 改行の表現あたり直せば動くんじゃなかろか >>300 レスありがとうございます。 本文中に数値参照入ってる…と言う事は、私からは本文が見えないだけで、本当は何らかの本文があるんですね。 もう少しググってみて手掛かりを探してみます。 ありがとうございました。 >>301 >>297 で改行コードが<br>じゃなく\nでも、800は消えると思うんだが これで消えないとすると、(?i:)が解釈できないのかもしれない 5chのdat上は、改行は<br>しかあり得ないのでもっと簡略に書いてもいいし 文字参照の16進表記は無効なのでこれも必要ない ^(<br>|\s|&#[0-9]+;| )*$ これでダメなら、<br>のかわりに[\n\r]を書けばいい ところで、くだんのレスには、半角空白が文字参照で書かれているわけ &#32; (実際には&は半角の&) 5chで空白文字は、 &#32; &#160; &#8194; &#8195; &#8201; &#8203; &#12288; したらばで空白文字は &nbsp; &ensp; &emsp; &thinsp; &#160; &#8194; &#8195; &#8201; &#8203; なおしたらばで中身の無いレスは上記の表現では何故かNGできない(^$ならOK) http://jbbs.shitaraba.net/bbs/read.cgi/internet/8173/1426610041/659 >>302 レスありがとうございます。 そこまで親身になって頂いてとても嬉しく思います。 ですが、全てのパターンで試してみたものの、無情にも効果がありませんでした…。 ChMateはレスを長押しでNGに登録出来る機能もあるのですが、普通なら http://imgur.com/4eGdel7.png こんな風にNGWordを選択出来るのですが、あのレスでそれをすると http://imgur.com/pJn3HBT.png なんと選択肢からNGWordが消えてしまうという…。 これはもう、ChMateがNGWord出来ないレスですよと判断しているようなモノだと思って、諦めることにします。 とても参考になる解説まで教えて下さってありがとうございました。 ツイッターのハッシュタグ抽出したいんだけど、おすすめの正規表現教えてください >>304 >>1 > ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現の用語の英和対訳表みたいなのあったら教えてください 詳説正規表現(中古で買った第2版)読んでるんだけど、前後読み、先読み、後読みとういう用語で絵混乱しました。 というのは、例えば 日本語訳の、「前後読みの一つである先読みは」は原文では、 One type of lookaround, called lookahead になってます。 look aheadの意味はweblioによると (1) 前方を見る. (2) 未来のことを考える; 将来に備える. となってるので、 時系列の後先を意味する「先読み」ではなく、方向を示す「前方読み」だと分かってれば理解しやすいのに、と思ったからです。 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ 言語はjavascriptですがjavaの処理を借りて使ってるみたいです やりたいことは 「V2Cの書き込み時、URLに?があったら警告を出したいが、Youtubeサイトだけは除外したい場合」 正規表現でどう書けばいいかわからないので &&条件にして回避しましたが1つの正規表現で可能ですか? ソースはこれです var ph = java.util.regex.Pattern.compile('ttps?([-_.!~*\'()a-zA-Z0-9;:\@&=+\$,%#/]+)\\?'); var ph2 = java.util.regex.Pattern.compile('youtube');//除外サイト >>309 var ph = java.util.regex.Pattern.compile('(?!.*(youtube))ttps?([-_.!~*\'()a-zA-Z0-9;:\@&=+\$,%#/]+)\\?'); これにしたら出来ました 1つにまとめるのが必ずしもいいとは限りませんよ 処理スピードは確実に遅いですそれ.. 正規表現の否定は難しいので正規表現に不慣れならなるべく避けたほうが無難です Perl 5互換の正規表現エンジンで、 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 This is a pen. これを "ABCDEFGHIJKLMNOPQRSTUVWXYZ"|abcdefghijklmnopqrstuvwxyz 0123456789 This is a pen. としたいのですがどうすればいいのでしょうか? gオプションを外せば「[\r\n]」で初回の改行のみにマッチできるんですが それができないツールなので指定できません 他の方法で初回の改行だけにマッチさせる方法を教えてもらえないでしょうか よろしくおねがいします シングルラインモードで改行文字除外して先頭からマッチすればいいんじゃねーの? /^([^\x0A\x0D]+)(?:\x0D\x0A|[\x0A\x0D])/"$1"|/g https://regex101.com/r/TW7wpm/2 マルチラインモードしかダメってんなら /^((?:(?<!\x0A|\x0D).)+)(?:\x0D\x0A|[\x0A\x0D])/"$1"|/gm https://regex101.com/r/TW7wpm/1 あ, 開始デリミタあったな, マルチラインモードでもこれでいいや /\A([^\x0A\x0D]+)(?:\x0D\x0A|[\x0A\x0D])/"$1"|/gm https://regex101.com/r/TW7wpm/3 >>314 完璧に動作しました。 助かりました。 https://regex101.com/ で試していたのですが 結果までリアルタイムに見れることも気づいてませんでした 本当にありがとうございました。 教えてください 日付を処理するにあたり 2018-07-09 もしくは 7-9-18 のどちらがきても$1月$2日を7月9日にしたいと思っています。年は不要。 (?:20[12][0-9]-0?)?(1?[0-9])-0?([123]?[0-9])(?:-[12][0-9])? で一応うごいてるのですが、もっとスマートにできますでしょうか? PHPで一番最後のカギカッコとその先を消したい時 $text = 'あいうえお「かきくけこ」「さしすせそ」たちつてと'; ↓ $text = 'あいうえお「かきくけこ」'; $text = preg_replace("/「[^「」]*」.*/","",$text); では元の文字列のまま返されます。 しかし、さしすせそ の部分を sasisuseso にすると成功します。何が問題なのでしょうか? >>316 そもそも処理自体が正規表現に向いてないと思うんですけど >>317 それ全然ダメでしょ *はgreedyだから最初にマッチした括弧以降全部食う あとPHPならuオプション使うべき /(「[^「」]*」)(?:(?!(?1)).)*$/ https://regex101.com/r/AKpqav/2 何か正規表現でももっと賢い方法ありそうだけど思い浮かばなかった >>318 ありがとうございます。半分くらいしか分かりませんがうまくいきました。 $text = preg_replace("/(「[^「」]*」)(?:(?!(?1)).)*$/su","",$text); txtファイルで20文字目で改行したいのです。 20文字目で改行コードを挿入すればいいのかなと思ったのですが、 書き方がわかりません。 よろしければどなたか教えてください。 >>322 レスありがとうございます。 説明が足りず申し訳ありません。 例えばなんですが、秀丸エディタのような正規表現の置換に対応したテキストエディタで <置換前> あいうえおかきくけこさしすせそ たちつてとなにぬねのはひふへほ <置換後> あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ これは5文字目で改行させた場合の例ですが、これを20文字目で改行させたいということなんです。 で、<置換前><置換後>に正規表現でどのように書けばいいのかということなんですが、いかがでしょう? >>323 秀丸 タグ付き正規表現 で検索するといいかも? >>324 検索してみたら、そのものずばりがありました。 【秀丸エディタ】正規表現を用いて指定文字数で改行させる方法 https://nodoame.net/archives/4675 どうもありがとうございました。 書き込めないテスト IllustratorCS以降のスクリプトで縦中横を正規表現でしたいのですが ググっても見つからないので自作しようと 縦書きテキストの縦中横を自動処理 var matchStr = /[0-9]/ ; //これをベースに↓ htt p://d-p.2-d.jp/ai-js/pages/01_scripts/text/index.html#14_text_vertical_folder これだと半角1文字か2文字の数値のみで 小数点が間にあると1文字ずつバラバラに適用されてしまいます 半角数字2〜3文字(以上) かつ 途中に小数点ピリオド有無 を縦中横に 半角欧数字が1文字の場合は 全角に したいです JavaScript 数字とドットを判別する正規表現 ^[1-9][0-9]+$|^[1-9][0-9]+\.?[0-9]+$ htt p://lma ker.blo g17.f c 2.com/blo g-en try-169.html これだとうまく走りません 先頭数字が0でもかまわないので ^[0-9][0-9]+$|^[0-9][0-9]+\.?[0-9]+$ //や ^[0-9]+$|^[0-9]+\.?[0-9]+$ //を試してみましたが 駄目でした NGワードtest回避 頭にマイナス文字が来るのを忘れていました URLは5chのNGワードにひっかかってるみたいで すみません 直接の答えじゃなくてすまんけど。 正規表現で^は行の先頭を意味するけど、それは意図とあってる? 縦書きに紛れる数字って行の先頭とは限らないんじゃないかな。 一度に書けなくてすまん。 $も、あれは行末を意味するからそれも意図とあってるかな? 縦書きする日本語 数字部分 縦書きする日本語 という原稿なら俺のツッコミは余計なのでごめん。 逆に言うとそういう原稿じゃないと機能しないと思うよ。 >>333 ^が行の一番目から数字かどうかを見ていたから $が行末を見ていたから 下のは走らなかったんですね 文中の数字なので、そのご指摘であってます 初歩的な内容ですみません とりあえず頭と尻を取ってみてみます こんな過疎なのにありがとうございます /[0-9]+$|^[1-9][0-9]+\.?[0-9]+/ ; //では駄目でした…… 練習テスト 328nobodyさん2018/09/30(日) 10:50:04.80ID:??? この文字列を ↓こうしたい ヒット希望する箇所=【 】 【328】nobodyさん【2018】/【09】/【30】(日) 【10】:【50】:【04.80】ID:??? 386 や 38.6 みたいな数字だけのも試しましたが 386 には無効で 38.6 は 38 と ピリオド と 6 とに分けられて効きました 正規表現よりスクリプトの中身の処理なのかもしれません う〜ん いま手元に試せる環境ないけど、でもまだ環境を疑う前の状態、正規表現が完成してない状態だと思う。余裕あったら336の最後、試してみるね。 >>336 例文の328nobodyの328は必ず3桁? >>339 >>328 や >>330 の画像のように 必ず3桁とは限りませんですね 4桁以上のこともありますので >>341 プラスマイマスまで処理していただいて ありがとうございます システムのプログラムが本職ではないので こういうのが苦手でした 正規表現処理としては合っているのですが スクリプトは半角数字1〜2文字のみを処理するだけで 3桁数字もプラスもマイナスも小数点も駄目でした 本当にお手間をおかけしました 今回はあきらめてみます う〜ん…… 自分に対して「ガイジ」って言ってくる奴をNGみたいなの出来る? 無理だと思う。どのレス番が自分なのか予め分かってる必要があるけどそれが難しいんじゃないかな。 私たち日本人の、日本国憲法を改正しましょう。 総ム省の、『憲法改正國民投票法』、でググって みてください。拡散も含め、お願い致します。 perlをphp化しようとしています。 perlの$`や$'のようなマッチの前後の文字列を取り出すことはできますか? また、tr/A-Z/A-Z/のような変換は、変換則をいちいち配列で指定しないとできないのでしょうか。 >>346 後者は正規表現じゃなくてmb_convert_kanaじゃあかんの? スレ内のランダムで3回以上繰り返される同一の文章をNGできますか? 細かく説明するとスクリプトコピペ荒らしのコピペ内容が一定期間で変わってしまうというので困っています V2Cの正規表現で似たもの見つけましたが、janeでは使えませんでした。 (?:^|\n)(.{5,}\n(.*\n){0,2})\1{3} Janeはdatは取得したそのままで何も加工しないので 改行は\nではなくて<br>となる また、各行の先頭と末尾に半角空白が付加されている 実際にレスがどうなっているのかはdatを覗いてみるのが一番 JavaScriptで <table class="aaa" border="1" xxx="yyy" ...(略)> これを .replace( /class="(S+)"/g, '.$1' ) で、 <table .aaa border="1" ....> の形にすることができました。 今度は <table class="aaa bbb ccc (略)" border="1" xxx="yyy" ...(略)> これを、border以降を巻き込むことなく <table .aaa .bbb .ccc (略) border="1" ...> の形にしたいのですが、どうすればよいでしょうか…? 「=」を含まないようにすればいいんだとは思いますが、なんだかごちゃごちゃするばかりでうまくいきませんでした。 その後色々試して見た結果 replace( /class=["\s]((.+)+)"/g, '.$1' ) とすることで <table .aaa bbb ccc (略) border="1" ...> の形にすることができました。 しかし、.aaa .bbb .ccc のように繰り返して「.」を付加する方法がわかりません。 おとなしく2回に分けて置換するほかないのでしょうか? replace( /class="(.+\s)?(.+)(\s.+)?"/g, '.$2' ) …これだと1回しか置換できませんね… すいません質問させてください 専ブラアプリのchmateで連続投稿、連レスをNGに出来ませんか? 連続でなくても、同一IDで沢山書き込んでいるのをNGにしたいのです 毎日NGIDとして登録すれば済む話しなんですが‥ 正規表現で一定数以上の書き込みをNGにしたいのです よろしくお願いします 「あいう えお」 『かきくけ こ』 のような場合に改行を詰めたいのですが ^[」』](\r?\n) を置換して消そうとしてもうまくいきませんでした どうすれば詰めることができるでしょうか (使用環境はAutoHotkeyです) >>354 違ってたらごめんだけど、^の後に何がきても的な指定が足りてないんちゃう? 行頭、ほにゃらら、」または』、改行 とするのがいいんじゃないかなぁと。 >>355 あ、^は行頭ではなく、[]内の否定でした… 」や』で終わってたらOK(置換しない) 」や』以外で終わってたら、改行コードを削除して詰める という感じです ^(.+)[^」』]\r?\n なんか違いますね… 試しにこれでやってみると 「あいう」 『えお』 「かきく けこ」 が 「あいう」『えお』 「かきく けこ」 になるので逆っぽい… どうも[^]による否定ができていない気がします 一応、AutoHotKeyの正規表現でも[^]による否定はできるはずなんですけど 教えて下さい。 !と!に該当させたいけれど、!?と!?の場合は除外したい場合、 どのような正規表現になるでしょうか。 質問スレ2つもあるけどどっちかにまとめたほうがいいな Regular Expression(正規表現) Part14 https://mevius.5ch.net/test/read.cgi/tech/1489511075/ アドレスを編集しているんですけど :80だけ消してたとえば:8001,:6080とか 80が含まれる数字は残したいんですけどどうやればいいんでしょうか さくらエディターつかってます PHPで改行以外の制御文字を空文字に置換したいと思い次のように書きました。 preg_replace( '/(?!\n)[\p{Cc}]/u' , '' , $ver ); この場合、否定先読みで\nを指定しているのですが、\rも指定した方が良いのでしょうか。 詳しい方、アドバイスをください。 よろしくお願いします。 そういえば\Rは\rや\nにマッチするって見かけたけど、間にある垂直タブや書式送りにもマッチするよな 鬼太郎実況スレに現れる軍オタ荒しはどうNGすればいいんでしょうか 荒らす個々の文が違うのでやってもやっても消えません GreasemonkeyのスクリプトでニコニコのコメントをNGにするため 正規表現がうまく適用できなくて 任意の文字列が4字以上連続 .{4,} スクリプトのほうの問題ならあきらめます 「任意の一文字と複数のスペース」を3回以上繰り返す文に合致する正規表現 (.[[:blank:]]{2}){3} で↓の文にヒットしてくれないんだけど理由分かる方いる? や め ろ ー ! し ゅ ー く ん の が 画像のように他の文にはヒットしている https://i.imgur.com/mMhnds9.jpg >>370 ありがとう {2}を{2,}にしろってことだよね 上手く動きました! phpで掲示板を作っていてアンカーリンク作りたいと思い以下のように書きました preg_replace("/>>([0-9]+)/","<a href=\"?res=\\1\"> >>\\1</a>",$text); >>1 など単発の場合は↑でできましたが、>>1 ,2,3や>>1 ,2,3,10-15とやりたい場合どうしたら良いですか? 5ch閲覧にrep2を利用しています。 文末に「>>1 」が入っているレスを正規表現を利用してあぼーんしようとしました。 rep2だと行末に半角スペースが入るために (>>1 )\s$としたのですがうまくいきません。因みに「>>1 」を他の日本語に変更すれば 期待通りの結果は得られるのですが。どの表に表現すれば良いのか教えて頂けないでしょうか。 上の質問をしたものです。 &gt;&gt;1<\/a>\s$ を半角で記述すれば目的を達成することができました。 お目汚し失礼しました。 chmateのNG設定で 複数のワードを全て含む書き込みをNG (?s:^(?=.*ワード1)(?=.*ワード2)(?=.*ワード3)) の ?s:^ と?=はどういう意味ですか? >>375 超いまさらだけど一応 ?s:^は文章全体から検索するよって意味 ?=は、ワードを含む(検索する時にマッチする)って意味 (?=あいう)だったら「あいう」があるレスがマッチする # h1 ## h2 これにマッチする正規表現はどう書けばいいんでしょうか? # h1にマッチさせたい場合、以下のようにしましたが、h2にもマッチします # .* h1のみ、h2のみにマッチさせる書き方はどうしたらいいのでしょうか PLAN PLAN2 PLAN3 PLAN4 以上の4つを表す正規表現についてですが ^PLA(N|N[2-4]) で合ってますか? >>380 合ってるけど ^PLAN[2-4]? でいいんじゃないか ところで、後ろはどうするんだ PLAN5 とかでもPLANにマッチするけどいいのか スマホのブラウザ(Berry browser)での検索結果にでたYouTubeのリンクを NEWPIPEで開くようにする正規表現をおしえていただけませんか? 正規表現ってこういうのも出来ますか? あ い う え お が「順不同」で「全て含まれている」のを検出 (1) ヒット例 ーーーーあいうえおーーーー ーおーえーうーいーあーー ーーーおあーーいいええーーう (2) スルー例 ーあいうえーーーーー ーおういあーーーーー みたいなの1行の正規表現出来ますか? 複数文字列のANDの基本 ^(?=.*文字列1)(?=.*文字列2)(?=.*文字列3)・・・ これで行けました >>375 ありがとうございます ^.{0,20}$ 20文字以下の短文をNGにしたいんですけどアンカーが付いてるとスルーされてしまいます どうやって改善したら良いですか? 基礎的なことですみません、一応調べてはみたのですが JavaScriptで改行コードを消す場合 str.replace(/\r\n|\n|\r/g, '') は理解できますが str.replace(/[\r\n]/g, '') ではだめでしょうか? ChMateのNG機能で、レス本文に順不同で含まれる "あ" に5回マッチさせる際の書き方を教えていただきたいのです こんな↓感じの毎回微妙に違う意味のないレスをポイしたいのです うあいうえああえあかあたま read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる