はてなキーワード: 正規表現とは
私は熟女モノとか人妻モノは眼中にないのですが、なぜだか最近そっち系の作品が多くて閉口しています。
しかしFANZA側の検索システムはNOT検索できるようになっていません。そこで、検索結果から除外できそうなものを除外するブックマークレットを作ることにしました。
さいわい近年は内容の概要文をそのままタイトルにしたような作品ばかりなので、タイトルに含まれるキーワードで除外が簡単にできそうです。
「熟女」とか「五十路」のような単語を含む作品を非表示にしてしまえばよいのです。
javascript: (() => {
const r = /熟女|完熟|熟れ|四十路|五十路|六十路|人妻|奥様|妻|夫|母|ママ|おばさん|BBA|姑|嫁/;
const q = '#list>li';
document.querySelectorAll(q).forEach(l => {
if (r.test(l.textContent)) {
l.remove();
}
});
})();
javascript:(()=>{const r=/熟女|完熟|熟れ|四十路|五十路|六十路|人妻|奥様|妻|夫|母|ママ|おばさん|BBA|姑|嫁/;const q='#list>li';document.querySelectorAll(q).forEach(l=>{if(r.test(l.textContent)){l.remove()}})})()
このブックマークレットで、検索結果に含まれる熟女系作品の数を1/3くらいにまで減らすことができます。
ブックマークレットとは、ブックマークにURLではなくJavaScriptを登録して、閲覧中のページ上で自分(やほかの誰か)が作ったプログラムを実行できるしくみのことです。普通のブックマークと同じようにブックマークバーなどに並べておいて、クリックひとつで呼び出すことができて便利です。
①まず、どこのページでもいいので(今読んでいるこのページでもよい)ブックマークをひとつ作り、ブックマークバーなどの呼び出しやすいところに置きます。
②できたブックマークを右クリックして「編集...」を選びます。
③「名前」欄は、自分にわかりやすい名前に変更します。でも「FANZAフィルター」などあけすけな名前をつけると、誰かに画面を覗かれた時に困りますよ。
④「URL」欄に、上記したプログラムコードを入力します。ただし上記のコードは私向けのキーワード選定になっていますので、ご自身の好みに合わせたキーワード選定をしていただければよいかと思います。/単語1|単語2|単語3/
のように記述してください。
ふつうのソースコードと、改行・インデントなどを省いてミニファイ(最小化)したもの、どちらをコピペしても大丈夫です。
⑦このブックマークレットを起動します。すると、瞬時に検索結果が減ります。
キーワードだけが異なる複数のブックマークレットを登録しておいて、場面に応じて使い分けるなどの工夫もできるでしょう。
上記のスクリプトが何か悪さをするようなものではないことを説明するために、また、JavaScript を学習し始めたばかりの人のために、このシンプルなスクリプトの解説をします。
javascript:
URLの種類を示すスキーム名です。一般的なURLは https:
や mailto:
などで始まりますが、javascript:
と書くと、これに続くコードがプログラムとして実行されます。
(() => {
// 処理
})();
ここからが JavaScript です。まず処理全体をくるむ大きなカッコと最後に付け足された () は、自己実行無名関数という形式です。今回のブックマークレットは変数を含みますので、実行するページに元々ある変数たちとバッティングしないようこのようなかたちにします。
const r = /熟女|完熟|熟れ|四十路|五十路|六十路|人妻|奥様|妻|夫|母|ママ|おばさん|BBA|姑|嫁/;
除外したい単語を羅列した正規表現です。個人個人で設定が変わる部分なので、編集しやすいように切り出しておきました。
const q = '#list>li';
フィルター対象とするHTML要素群のクエリーセレクター文字列です。検索結果に一覧表示される、個々の作品要素を選択します。FANZAがシステム改修を行うと変わってしまう可能性がある部分なので、メンテしやすいようにここだけ切り出しておきました。
document.querySelectorAll(q).forEach(l => {
// 処理
});
クエリーセレクター q
に一致する要素 l
ひとつひとつについて反復して処理を行います。
if (r.test(l.textContent)) {
l.remove();
}
もし要素 l
内のテキストが正規表現 r
と一致していたら、要素 l
を取り除く、という処理です。正規表現 r
はキーワードの羅列ですので、テキストの一部にキーワードのどれかが含まれていたら一致したことになります。
正解が「数学的」に決まるところ。たとえば「1■1=2 のときに ■を答えなさい」というときに競プロは■を答えるだろうし、それを早く答えて悦に入るだろう。
それもいいけど、いちど数学的に答えが決まっちゃう問題はライブラリにまとめられて、一般的なコーダはなにも考えなくてもインポートして処理できちゃうわけ。上の例えだとふつーのプログラマなら「枯れたライブラリをインポートして、正しく答えが出ると確信できるなら『答えは正しいとか考えなくても』それを使って対処する」ので、データの振る舞いとか気にしないで済む。たとえば SQL なんて、実行時計画という「アルゴリズムを常に指定するなら不要な」話題があるのだけど、データ量によって適切なアルゴリズムが変化するから仕方ないし、概ね RDB は賢いのでヒューマンが考慮するのは問題がある場合だけなのだ。よって、競技プログラマが生産性を確実に上げるという根拠はない。
もちろん、アルゴリズム知識を身につけるのは大切だし、クヌース先生も書いてたけど分散処理アルゴリズムはフロンテイアだろうよ。というか、暗号分野やセキュリティの領域や、条件が過酷な場合(宇宙線の影響下とか、メモリの少ないエッジコンピューティングとか)だと、アルゴリズムの研究や追求は大切なのは今も同じだ。でも、競技プログラマが新規にアルゴリズムを開発したり、セキュリティに向上したという話は聞いたことがないが、レッドコーダー諸君は自前で創造して使われた実績はあるのだろうか?
ついでに聞いてみたいのだが、競技プログラマたちは「マルチスレッドなコードで早く書こうとしないのはなぜ?」「そもそも、競技プログラミングで使うコードは便利なスニペッツがあるけどそれってチートでは?」「ときどき正規表現で解く問題があるけど、そのときの計算量は無視してない?」という矛盾を抱えているのてはないか?と思うのだが如何か。
究極的には競技プログラミングに必要な知識というのは、産業用途で要求される知識の一部でしかないのが問題なんだと思うよ。ほら、アレだよ、むかし話題になった「数学だけデキる人向けの東工入試をやったら、英語ができなくて卒業できなかった」という童話に近いんだよ。競技プログラムってインとアウトしか見てないブラックボックステストだから、ここだけしか計算機科学の知識が無いというヤバ人材の育成しかなってないのだろうな。
単語をひとつだけ返すが、「ぬ」で始まらなかったり、「ん」で終わらなかったり。
「沼地(ぬまち)」とか。
「布団(ぬとん)」とか。
そのうちに、ないと言い出す。
ひとつ教えても、回答が安定しない。
あっさりとあきらめて、「ない」と答える。
あるでしょうと聞くと、教えて、と返してくる。
ひとつ教えると、それは返すが、他のは間違い。
名詞、動詞などに分類して、たくさん答えてくるが、「ん」で終わる単語がひとつもない。
問い返すと、カタカナで10個ほど返すが、「ヌ」で始まるものの「ン」で終わらないものも多く、
ChatGPT と似たような回答を返すが、同じじゃない。
「沼メン(ぬまめん)」がちょっと怪しいが、全て存在する単語。
すばらしい。
これに続けて、正規表現が使える辞書サイトを教えて、って聞いたんだけど、
全滅。
延々と正規表現自体を調べられるところを回答し続けたり、インチキな URL を返して来たり。
まだまだ、って感じ。
住民はもちろん自由に名乗るのだが、「安倍晋三」を名乗る住民が圧倒的多数派であるため安倍晋三以外を正規表現NGすることで掲示板がまともに機能するようになった。
(貶められる例:安倍を「カラーコーン」と呼ぶ(安倍銃撃現場に赤いカラーコーンが置かれ、墓標のようなそれに野田佳彦が合掌したことから)等)
嬉しい副作用として、安倍晋三を名乗るというバカのような踏み絵を行うことで、なぜだかスクリプト荒らしでないネトウヨ・ネトサポと呼ばれる自民・維新を擁護するレス、更にアフィリエイトまとめサイトが好むレス(男女対立分断、弱者男性系)が激減した。元々嫌われていたコテハンや、こういう時に名前欄で個性主張する住民(往々にしてつまらない)のレスも無視できるようになった。
これは安倍バリア、ABフィールド、アベガード等と呼ばれている。(エヴァのATフィールド、広告ブロックアプリのAdGuardが由来)
年単位で埋め立てスクリプトに荒らされていることでお馴染みの5chニュース速報(嫌儲)。
スクリプトは自動生成された文章と海外画像SNS(imgur)にアップされたグロ画像を織り交ぜて果てのない回線数(ワッチョイ)でレスしまくるため、NGワード・NGネーム・NG IDによって無視することは不可能であり住民には対抗手段がなかった。
運営がグルで荒らしてるとさえ思えるくらい、荒らしに対して運営は無策であった。
そこでつい先日発案されたのが嫌儲のデフォルト名無し「番組の途中ですがアフィサイトへの転載は禁止です」を住民個々がNGネーム登録し、それぞれが名前欄に別物を入力してレスするというもの。
デフォルト名無し(名前欄無記入)で荒らすスクリプトが名前欄変更に対応するまでのイタチごっこと思われたが、なぜだが対応してこない。
これにより、スレが埋められること自体は仕方ないものの、スクリプトを完全に無視して会話することが可能になった。
対応してこない理由には、スクリプトをどこかで拾ったまま使用しているからイジる技術がない説、荒らし業務受注先の許可が必要説(土日であるため)などがある。
住民はもちろん自由に名乗るのだが、「安倍晋三」を名乗る住民が圧倒的多数派であるため安倍晋三以外を正規表現NGすることで掲示板がまともに機能するようになった。
荒らしのブラックリスト方式から住民ホワイトリスト方式というわけだ。嫌儲の宿敵安倍晋三により個々の名前欄の文が鮮明に統一されるとは皮肉なものだ。
スクリプト荒らしは自民党委託のDAPPIによる業務説もあるため、住民を真似て安倍をバカにする名前欄には対応できないとの期待もあった。
昔から嫌儲による安倍への愛執は並々ならぬものがあり、安倍の亡き今でも安倍は親しまれ、貶められ、ネタとして崇められ、安倍語録がレスに使われ、生成AIにより新たな安倍画像が生まれていた。
(親しまれる例:安倍を「安倍ちゃん」と呼ぶ、意味もなく「安倍晋三」とレスする、スレタイに関連する安倍の画像を貼る等)
(貶められる例:安倍を「カラーコーン」と呼ぶ(安倍銃撃現場に赤いカラーコーンが置かれ、墓標のようなそれに野田佳彦が合掌したことから)等)
(崇められる例:安倍を「聖帝」と呼ぶ等)
(安倍語録レス例:意味のない○○だよ、くだらない○○で終わっちゃったね、○○すればいいというわけではない、○○したが○○していない、いわばまさに、非常にしつこい等)
嬉しい副作用として、安倍晋三を名乗るというバカのような踏み絵を行うことで、なぜだかスクリプト荒らしでないネトウヨ・ネトサポと呼ばれる自民・維新を擁護するレス、更にアフィリエイトまとめサイトが好むレス(男女対立分断、弱者男性系)が激減した。元々嫌われていたコテハンや、こういう時に名前欄で個性主張する住民(往々にしてつまらない)のレスも無視できるようになった。
これは安倍バリア、ABフィールド、アベガード等と呼ばれている。(エヴァのATフィールド、広告ブロックアプリのAdGuardが由来)
切り落としたメドューサを首を武器にした英雄ペルセウス、盾に猫をくくりつけて古代エジプト軍の戦意を削いだ古代ペルシア、処刑されたのに救世主として持ち上げられるキリスト、そして安倍昭恵の「思い出していただければ何よりの供養」という言葉も引用され、嫌儲では今日も安倍晋三はネタにされている。
本当にあった話だけど、JavaScriptでstrっていう変数にテキストが入っていて
その変数に'apple'とか'banana'とかが入ってるかどうかを判別するっていうロジックを作るときに
const re = new RegExp("apple") if(re.test(str)) console.log("match")
const re_apple = new RegExp("apple") const re_banana = new RegExp("banana") if ( re_apple.test(str) || re_banana.test(str) ) console.log("match")
っていうコードを書く人がおるんよ
別にプログラミング初めて3ヶ月の初心者じゃ無くて20年以上やってるようなベテランだったり
なんならチーフプログラマーとして若手指導してるような人でもこういうレベルの人って割といるわけ
これに対して
「正規表現でORを書くべき」
「includeで十分」
綺麗にコードを書くっていうのは
「これってappleとかbanana以外に増えたりしないの?」
「fruitsかどうかを判別するならその変数を作った方が良くない?」
っていうのを考えて実装するのが綺麗にコードを書くっていうことで
ちなみに
「正規表現でORを書きましょう」
「動いてるからいいじゃない」
「綺麗に書いても性能上意味ない」
「言ってることが良く分からない。何が違うのか」
とか言ってくるし
「アから始まってンで終わる6文字の日本語」という19文字の文字列から思いつく単語を並べてるだけだからだよ
ぼく「アから始まってンで終わる6文字の日本語をいくつか挙げてください。なお、これは正規表現/^......$/にマッチするものとします。」
正規表現 /^......$/ は正確に6文字の単語を意味します。そのため、「ア」から始まり「ン」で終わる6文字の日本語の単語は以下のようになります:
ぼく「アから始まってンで終わる日本語をいくつか挙げてください。なお、条件として、正規表現/^......$/にマッチするものとします。」
正規表現 /^......$/ は厳密に6文字の単語を指定します。したがって、「ア」で始まり「ン」で終わる6文字の日本語の単語は以下のとおりです:
ぼく「なるほど、では検証しましょう。それぞれの単語について「1文字目…ア、2文字目…ク」のように順番に当てはめて6文字目まで表示してください。」
もちろんです、それぞれの単語を一文字ずつ確認してみましょう。
1. アクション
1文字目: ア 2文字目: ク 3文字目: シ 4文字目: ョ 5文字目: ン 6文字目: (なし)
2. アルバム
1文字目: ア 2文字目: ル 3文字目: バ 4文字目: ム 5文字目: (なし) 6文字目: (なし)
(中略)
確認の結果、いずれの単語も「ア」で始まり「ン」で終わる6文字の単語の条件を満たしていません。私の誤りでした。失礼いたしました。
1. アルバン
1文字目: ア 2文字目: ル 3文字目: バ 4文字目: ン 5文字目: (なし) 6文字目: (なし)
2. アクアン
1文字目: ア 2文字目: ク 3文字目: ア 4文字目: ン 5文字目: (なし) 6文字目: (なし)
それぞれ「ア」から始まり「ン」で終わる4文字の単語となります。
申し訳ありませんが、日本語で「ア」から始まり「ン」で終わる6文字の単語は、ぱっと思いつく限りでは見つかりませんでした。ご希望に添えず申し訳ありません。
勝った…!AIに勝ったぞ…!
プログラミングをやめろ
大学4年間と大学院2年間プログラミングやったやつでもできないし、会社で毎日8時間を数週間プログラミングについやしてもできないやつはできないし、そもそも人類というのはプログラミングできない可能性がある。
少年少女たちに「プログラミングはいいぞ!自由にものが作れて達成感がある!頭が良くなった気分にもなれるし!」と吹聴してまわんのもいいけど、6年間情報科学について勉強したようなやつの大半がプログラミングできないんですよ。それもごくごく初歩的な部分。
野球とかサッカーなら、まあ友達との試合には参加できなくてもごく稀にバットにボールを当てたり、ボールを1回あらぬ方向に蹴ったり、ぶっちゃけ周りとのレベル差で楽しくなくてすぐやめちゃうだろうけど、なんとか基礎の一部ぐらいはできるじゃないですか。
ピアノとかダンスでも、猫踏んじゃったをごくごくゆっくり弾くぐらいはできるかもしんないし、学芸会の振り付けを10秒ぐらいは踊れたりできるかもしれない。その後やっぱ周りのレベル見て諦めちゃうかもしんないけどさ。
プログラミング、6年やってミットを頭にかぶってるバッターとか、鍵盤蓋の上から殴って音鳴らそうとするやつとか、まずそういうレベルのやつが大量発生するんですよ。だいたい7割ぐらいの率。どうすんだよこいつら。私の教育の問題か?マジで?本当に?
プロが練って考えて凝縮した本や授業、センパイたちによる指導。それらを結集して得られるはずのものが7割ぐらいどっかに消し飛んでる。無駄だろこれ。
今からプログラミングやろうとしてるやつ、お前は確実に向いてないからさっさと諦めて刺身にタンポポ乗せる仕事に戻ってくれ。参加しても鍵盤蓋叩き割るやつと同じ病室に入るだけだ。
プログラミングをやめろ。
ぼくはこう思うんですよ
そもそもなんで大の大人がそんな両手にバット持ってセカンドに立ったりゴールの方をボールのところまで動かす奇行に走るんだろうな。わかんねえや。
綺麗な分析はできないけど、いわゆる「できない」やつが共通して言ってたフレーズがある。
「ぼくはxxxだと思ってるんですけど、動かないんですよ」
うん、そうだね。そう思うんだ。でも動いてないじゃん。じゃあ違うんじゃない?モニターに「にらみつける」やってもバグは取れないし防御力下がるだけだぞ。
まず根本的に考えと事実が違ってるって結果出てるじゃん。じゃあもう考え変えちゃえば早くない?
名言の引用は好きではないけど、「プログラムは思った通りには動かない。書いた通りに動く」って言葉がある。実に名言だと思う。次点で好きなのが「ある問題を解決しようと正規表現を使うと問題が2つに増える」かな。
お前が何を思っているかはプログラミングにおいて一切影響しないんだよ。お前が何を書いて、コンピュータがどう処理したか、それが全て。
深く考えないことについてぎゃーぎゃーいうやつもいるけどプログラムなんてまず最初は動けばいいんだから何も考えずに次試せばいいだろ。んで3回ぐらいは自分で思い浮かんだの試して、全部ダメだったら調べるとか先生に聞いてみるとかさ。逆に1発で通ったら自分の思考見直して理解深めるとかさ。
ドキュメントとかあんまり理解できない初心者のうちは、とにかくお試しと修正のサイクル回すの重要で、「これがこうだから動くはず」というカードを3種類ぐらい作って全部片っ端から試すのが早いと思うよ。モニターをにらみつけるな。
お前がどう思ってるかよりも、まずはお前の書いたプログラムがどう動いているか(どう動いていないか)を確認するのが先だ。動かなかったら考えが違う、はい次のプラン、はいその次のプラン、はい次。
この「ぼくはこう思ってる」が出てくるの、なんの教育の成果なんだろうね。お前の気持ちなんてどうでもいいって現国でも数学で散々教えられただろ。