[過去ログ] Regular Expression(正規表現) Part16 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(4): 2021/11/03(水)19:50 ID:ebAE+z9+(1/4) AAS
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part15
2chスレ:tech

次スレは>>980宜しく
天ぷら等>>2以降
2
(4): 2021/11/03(水)19:51 ID:ebAE+z9+(2/4) AAS
スルーされにくい質問のテンプレと例

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

※ ^ はアンダーラインだそうな ^^;
3
(1): 2021/11/03(水)19:51 ID:ebAE+z9+(3/4) AAS
◆関連サイト
正規表現メモ
外部リンク[html]:www.kt.rim.or.jp
Perl正規表現雑技
外部リンク[htm]:www.din.or.jp

詳説 正規表現
外部リンク:www.oreilly.co.jp
正規表現クックブック
外部リンク:www.oreilly.co.jp

正規表現プログラミングFAQ
外部リンク[html]:capslockabcjp.kitunebi.com
.NET Framework の正規表現 | Microsoft Docs
外部リンク:docs.microsoft.com
正規表現 - JavaScript | MDN
外部リンク:developer.mozilla.org
鬼車
外部リンク:github.com
鬼雲
外部リンク:github.com
bregonig.dll(鬼雲の正規表現をサクラエディタ等で使用するためのライブラリ)
外部リンク[html]:k-takata.o.oo7.jp
Boost.Regex 1.45.0 (日本語訳)
外部リンク[pdf]:alpha.sourceforge.jp

秀丸: 複数行にまたがる検索について
外部リンク[html]:homepage2.nifty.com

サクラエディタ: 改行
外部リンク:d.hatena.ne.jp
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
4: 2021/11/03(水)19:54 ID:ebAE+z9+(4/4) AAS
正規表現技術入門
外部リンク:gihyo.jp

↑の著者の一人であり Onigmo(鬼雲)やbregonig.dll の作者でもあるtakata先生のツイとQiitaの記事
Twitterリンク:k_takata

鬼雲に非包含オペレータを実装した話
外部リンク:qiita.com
Twitterリンク:5chan_nel (5ch newer account)
5: 2021/11/03(水)20:59 ID:554LNcID(1) AAS
>>1
スレ立てありがとう

ところで、C++コンパイラごとにbasic_regex::replace()の置換後文字列のバックスラッシュがエスケープされたりされなかったりするのが厄介ですね
6: 2021/11/03(水)21:43 ID:K+2zXBgv(1) AAS
外部リンク[htm]:troutlurefishing.jp
外部リンク[html]:murashun.jp
外部リンク[html]:www.itmedia.co.jp
7: 2021/11/04(木)11:16 ID:JyTL4wpj(1) AAS
nifty の URL 死んでるな
8: 2021/11/04(木)11:42 ID:diIHvWke(1/2) AAS
DeNAが個人ブログから正規表現の表丸パクりしてたのワロタ
9
(1): 2021/11/04(木)11:59 ID:iRkMc3Gk(1) AAS
丸パクリならまだいい
改変もまともにできないのはヤバい

正規表現の例 マッチする例
Coo+el    Coopel

画像リンク[jpg]:pbs.twimg.com
10
(2): 2021/11/04(木)12:31 ID:B00ATyI8(1/2) AAS
>>9
どゆこと?
11
(1): 2021/11/04(木)12:38 ID:Gz31zHb0(1) AAS
>>10
oの1回以上の繰り返しじゃ
pにマッチするわけないです
12: 2021/11/04(木)12:48 ID:diIHvWke(2/2) AAS
元がgoogleを例にしてたからこうなったのかな
いずれにしてもワロタ
13: 2021/11/04(木)12:49 ID:iCxb5Ekd(1) AAS
>>10
外部リンク:regex101.com
14: 2021/11/04(木)14:21 ID:B00ATyI8(2/2) AAS
>>11
ああ、勝手に.入れてた
ほんとだひどいな
15: 2021/11/04(木)14:53 ID:/D1z+6Mc(1) AAS
劣化コピーだから責められてて
上品だったら叩けない訳か
16: 2021/11/05(金)08:20 ID:+Hevqd/d(1) AAS
本歌取りと言う言葉もありますし
17: 2021/11/05(金)11:40 ID:pLniUbgZ(1) AAS
オマージュ・インスパイア→胡散臭い
本歌取り→凄そう
18: 2021/11/05(金)12:37 ID:1iAtfRIf(1) AAS
本歌取りに良いイメージがあるのは、この行為が和歌の世界で伝統的に許されてきたからだ。
19
(1): 2021/11/06(土)20:39 ID:oKHbtIv+(1) AAS
祝☆ vim 3o+年
20: 2021/11/06(土)21:18 ID:G8Zn1Puj(1) AAS
>>19
スレ違い
21: 2021/11/07(日)00:36 ID:kpV1ZjX8(1) AAS
(/(>>1)/,'$1乙')
22: 2021/11/15(月)00:01 ID:5vPB6h42(1/2) AAS
今までに無いかつら、非包含オペレータ
外部リンク:bokete.jp
23: 2021/11/15(月)10:09 ID:xJpmlO5M(1) AAS
vimで文字列処理ってマイナーなのか?
UIでマッチをハイライトしながらパターンを書けるし、書いたパターンと処理はperlやsedのようにコマンドライン引数で渡してシェルスクリプトに組み込める(UI無し、非インタラクティブモード)

vimはバッファするからストリーム処理には向かないくて、パイプにはperlを使うけど、バッチ処理ならvimの方が速い

あと、個人的にアサーションの記法(\@<=等)も、()が深くなりがちなperl系の(?<=等)より好みだ
24: 2021/11/15(月)10:57 ID:Y0jbpZIM(1) AAS
惜しむらくは、マッチ後の単純でない処理を委託するvimscriptがクソなところだと思う、regex自体は十分パワフル
perlは任意のロジックをperl式に移譲するのが楽、パターンにも書けるし、大抵インラインで済む

vim9で大幅に言語変えるっぽいけど、どうなるやら
25: 2021/11/15(月)11:19 ID:vc2enCPn(1) AAS
()が減るケースって実用的にはあまり無いんじゃないか?アサーションの修飾対象がグループなら、どうせ()が必要になるわけだし

アサーションの\@が後置なのはperl系より一貫性があって良い設計だと思う、?,+,* etcと同列の修飾子とみなせる
26: 2021/11/15(月)21:36 ID:5vPB6h42(2/2) AAS
非包含オペレータの提案者の方の過去ログ漁ってたらすごいの出てきた
外部リンク[pdf]:www.a-k-r.org

これを使えば2次元の彼女が見つかりそう
27
(1): 2021/11/17(水)00:30 ID:pGjzwEdG(1/3) AAS
AA省
28
(1): 2021/11/17(水)00:32 ID:pGjzwEdG(2/3) AAS
上記で、分かりにくくてすみません、
>1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
この「1:」は気にしないでください。
また、re.subで上手く行ったのは、1つめに書いた [・ー└]|( ){3,} です
29
(16): 2021/11/17(水)01:31 ID:vtK5EVRE(1/3) AAS
AA省
30: 2021/11/17(水)02:52 ID:CiQU0O+7(1) AAS
( → (?:
31: 2021/11/17(水)04:06 ID:PbEjqT95(1) AAS
>>29
そもそも単文字なんだしグループにする必要なくね?
32: 2021/11/17(水)09:04 ID:GPq3lXDW(1/2) AAS
AA省
33: 2021/11/17(水)10:12 ID:A6BSd3Zu(1/2) AAS
正規表現に生の半角スペース使うのは一見気づきにくくて余り好きじゃないなぁ
\x20 にしない人多いのかな
34: 2021/11/17(水)10:36 ID:6wJ0temu(1/3) AAS
俺は生派
\sを使う人もいるけど俺は嫌
35: 2021/11/17(水)10:39 ID:GPq3lXDW(2/2) AAS
エディタの設定で可視化もできるしね。>半角スペース
36: 2021/11/17(水)10:39 ID:6wJ0temu(2/3) AAS
this is a pen

this\x20is\x20a\x20pen
とかも嫌
37
(1): 2021/11/17(水)10:56 ID:A6BSd3Zu(2/2) AAS
文章になってるものまで生で使わないと言うわけじゃないけどな
ブラケットの中で使う場合なんかは生は避けたいわ
[  ]とかよく見かけるけど、分かりづらい

なお、\sは半角スペースを含むけどそれ自体じゃないので普通は区別して使うでしょ
38: 29 2021/11/17(水)11:01 ID:vtK5EVRE(2/3) AAS
this[ ]is[ ]a[ ]pen

proxomitronのフィルタ職人をやってるときはこうやってた
今だと this\ is\ a\ pen かな? 使ったことないけどw
\s は環境によっては全角スぺにマッチするから気を付けないとね
39: 2021/11/17(水)11:32 ID:6wJ0temu(3/3) AAS
>>37
エディタ上でははっきりと区別がつくけど
こんな所へ貼る場合は確かに分かり難いね
まあこの場合は目的が分かってるので分かりやすいとも言えるけど
40: 2021/11/17(水)20:33 ID:vtK5EVRE(3/3) AAS
Jane用の正規表現を掲示板に貼るときにはタブ文字のところを 【tab】 って
書き換えて貼ってたなぁ、しかしJane自体が廃れて使うことが無くなった
41
(1): 27 2021/11/17(水)23:51 ID:pGjzwEdG(3/3) AAS
27です
こんなにも早く教えてくださってとても助かりました!
()が要らなかったんですね。勉強になります!
ありがとうございました!
42
(2): 29 2021/11/19(金)20:58 ID:rZqXBgxj(1/2) AAS
これの検証してみた

Absence operator is broken #150
外部リンク:github.com

・検証コード (ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32])
p /(?~a.*[bv].*c)/.match("000a111v222c333b444c555")

・結果
#<MatchData "000a111v222c333b444">

a〜v〜c を含んでしまってるのでバグで確定
原因は最初にマッチした段階で検索を打ち切ってしまっていて
別のパターンを見逃している

別のパターンを見つける必要があることは非包含オペレータ提案者さんの論文で
図付きで説明されてるけどこれを見落としてしまったオチ?

直すには論文通りに実装すれば良いだけなので直せないことは無さそう
自分がプログラミング出来れば直したいけどミジンコなので手も足も出ず..
-------------------------------------------------------
>>41 おつー
43: 29 2021/11/19(金)23:35 ID:rZqXBgxj(2/2) AAS
ついでにもう1つだけ

Use of \K when the string to match after \K can be empty #152
外部リンク:github.com

これは \K を使ってゼロ幅マッチになった場合に次の検索開始位置が
予期せず1つ進んでしまう問題のようだ

gsubの仕様かなと思ったけど (?<=\w) と \w\K の2つが違う結果になるのは
違和感ある、\K での ゼロ幅マッチ後の pos を進まないようにすれば直りそう

takata先生の代わりにちゃちゃっと始末してくれるスーパーハカーさん募集
44: 29 2021/11/20(土)00:06 ID:dCkHZW0G(1/2) AAS
\K より前で文字を消費していない場合は pos は進まないようだ
/\K/  → pos進まず
/.\K/ → 予期せずpos進んでしまう
45
(1): 2021/11/20(土)13:49 ID:S4adbGs3(1) AAS
>>42
イシュー150の起票者がオリジナルの鬼車作者さんやんけw
46: 29 2021/11/20(土)14:09 ID:dCkHZW0G(2/2) AAS
>>45 そうなんだよね、だから気になってた

-------------------------------------------------
>>42 とは別の検証をしてみた

p /(?~a.*b.*c|222)/.match("000a111b222c333")
#<MatchData "000a111b22">

これは期待通りにマッチした、これが正しく動くということは
論文の読み落としではないね、失礼しました

問題は同一posでマッチ文字数が最短になるマッチを見つけなければいけないが
それをしていないことみたいだ
この処理って結構な処理量になりそうだけど大丈夫なのかな?

オペレータ提案者さんのサンプルコードではどうなってるんだろ?
プログラムが読めないから対応出来てるのか分からない..

あまりに重いようなら量指定子を使えるようにしたほうが良いかもしれない
.* を .{0,1000} に書き換えて処理量を限定させるのと同じで
(?~abc){0,1000} みたいな指定が出来るようにすれば..
1-
あと 956 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s