Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part15
https://mevius.5ch.net/test/read.cgi/tech/1568640311/
次スレは>>980宜しく
天ぷら等>>2以降
探検
Regular Expression(正規表現) Part16
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2021/11/03(水) 19:50:01.71ID:ebAE+z9+2021/11/03(水) 19:51:06.60ID:ebAE+z9+
スルーされにくい質問のテンプレと例
●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
※ ^ はアンダーラインだそうな ^^;
●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
※ ^ はアンダーラインだそうな ^^;
2021/11/03(水) 19:51:26.32ID:ebAE+z9+
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
詳説 正規表現
http://www.oreilly.co.jp/books/9784873113593/
正規表現クックブック
http://www.oreilly.co.jp/books/9784873114507/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
.NET Framework の正規表現 | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expressions
正規表現 - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
鬼車
https://github.com/kkos/oniguruma
鬼雲
https://github.com/k-takata/Onigmo
bregonig.dll(鬼雲の正規表現をサクラエディタ等で使用するためのライブラリ)
http://k-takata.o.oo7.jp/mysoft/bregonig.html
Boost.Regex 1.45.0 (日本語訳)
http://alpha.sourceforge.jp/devel/boost.regex_ja_1_45_0.pdf
秀丸: 複数行にまたがる検索について
http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html#RETURNS
サクラエディタ: 改行
http://d.hatena.ne.jp/myokoym/20101219/1292779058
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
詳説 正規表現
http://www.oreilly.co.jp/books/9784873113593/
正規表現クックブック
http://www.oreilly.co.jp/books/9784873114507/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
.NET Framework の正規表現 | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expressions
正規表現 - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
鬼車
https://github.com/kkos/oniguruma
鬼雲
https://github.com/k-takata/Onigmo
bregonig.dll(鬼雲の正規表現をサクラエディタ等で使用するためのライブラリ)
http://k-takata.o.oo7.jp/mysoft/bregonig.html
Boost.Regex 1.45.0 (日本語訳)
http://alpha.sourceforge.jp/devel/boost.regex_ja_1_45_0.pdf
秀丸: 複数行にまたがる検索について
http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html#RETURNS
サクラエディタ: 改行
http://d.hatena.ne.jp/myokoym/20101219/1292779058
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
2021/11/03(水) 19:54:20.40ID:ebAE+z9+
正規表現技術入門
https://gihyo.jp/book/2015/978-4-7741-7270-5
↑の著者の一人であり Onigmo(鬼雲)やbregonig.dll の作者でもあるtakata先生のツイとQiitaの記事
https://twitter.com/k_takata
鬼雲に非包含オペレータを実装した話
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd
https://twitter.com/5chan_nel (5ch newer account)
https://gihyo.jp/book/2015/978-4-7741-7270-5
↑の著者の一人であり Onigmo(鬼雲)やbregonig.dll の作者でもあるtakata先生のツイとQiitaの記事
https://twitter.com/k_takata
鬼雲に非包含オペレータを実装した話
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd
https://twitter.com/5chan_nel (5ch newer account)
2021/11/03(水) 20:59:16.79ID:554LNcID
6デフォルトの名無しさん
2021/11/03(水) 21:43:29.56ID:K+2zXBgv7デフォルトの名無しさん
2021/11/04(木) 11:16:22.06ID:JyTL4wpj nifty の URL 死んでるな
8デフォルトの名無しさん
2021/11/04(木) 11:42:25.33ID:diIHvWke DeNAが個人ブログから正規表現の表丸パクりしてたのワロタ
2021/11/04(木) 11:59:17.47ID:iRkMc3Gk
丸パクリならまだいい
改変もまともにできないのはヤバい
正規表現の例 マッチする例
Coo+el Coopel
https://pbs.twimg.com/media/FC7n-5zaUAETKej.jpg
改変もまともにできないのはヤバい
正規表現の例 マッチする例
Coo+el Coopel
https://pbs.twimg.com/media/FC7n-5zaUAETKej.jpg
2021/11/04(木) 12:31:32.50ID:B00ATyI8
>>9
どゆこと?
どゆこと?
2021/11/04(木) 12:38:22.63ID:Gz31zHb0
12デフォルトの名無しさん
2021/11/04(木) 12:48:06.96ID:diIHvWke 元がgoogleを例にしてたからこうなったのかな
いずれにしてもワロタ
いずれにしてもワロタ
2021/11/04(木) 12:49:09.54ID:iCxb5Ekd
2021/11/04(木) 14:21:26.74ID:B00ATyI8
15デフォルトの名無しさん
2021/11/04(木) 14:53:30.31ID:/D1z+6Mc 劣化コピーだから責められてて
上品だったら叩けない訳か
上品だったら叩けない訳か
2021/11/05(金) 08:20:43.21ID:+Hevqd/d
本歌取りと言う言葉もありますし
2021/11/05(金) 11:40:57.68ID:pLniUbgZ
オマージュ・インスパイア→胡散臭い
本歌取り→凄そう
本歌取り→凄そう
2021/11/05(金) 12:37:40.52ID:1iAtfRIf
本歌取りに良いイメージがあるのは、この行為が和歌の世界で伝統的に許されてきたからだ。
2021/11/06(土) 20:39:20.57ID:oKHbtIv+
祝☆ vim 3o+年
2021/11/06(土) 21:18:49.31ID:G8Zn1Puj
>>19
スレ違い
スレ違い
2021/11/07(日) 00:36:45.12ID:kpV1ZjX8
(/(>>1)/,'$1乙')
2021/11/15(月) 00:01:22.12ID:5vPB6h42
今までに無いかつら、非包含オペレータ
https://bokete.jp/odai/533281
https://bokete.jp/odai/533281
2021/11/15(月) 10:09:56.72ID:xJpmlO5M
vimで文字列処理ってマイナーなのか?
UIでマッチをハイライトしながらパターンを書けるし、書いたパターンと処理はperlやsedのようにコマンドライン引数で渡してシェルスクリプトに組み込める(UI無し、非インタラクティブモード)
vimはバッファするからストリーム処理には向かないくて、パイプにはperlを使うけど、バッチ処理ならvimの方が速い
あと、個人的にアサーションの記法(\@<=等)も、()が深くなりがちなperl系の(?<=等)より好みだ
UIでマッチをハイライトしながらパターンを書けるし、書いたパターンと処理はperlやsedのようにコマンドライン引数で渡してシェルスクリプトに組み込める(UI無し、非インタラクティブモード)
vimはバッファするからストリーム処理には向かないくて、パイプにはperlを使うけど、バッチ処理ならvimの方が速い
あと、個人的にアサーションの記法(\@<=等)も、()が深くなりがちなperl系の(?<=等)より好みだ
2021/11/15(月) 10:57:59.40ID:Y0jbpZIM
惜しむらくは、マッチ後の単純でない処理を委託するvimscriptがクソなところだと思う、regex自体は十分パワフル
perlは任意のロジックをperl式に移譲するのが楽、パターンにも書けるし、大抵インラインで済む
vim9で大幅に言語変えるっぽいけど、どうなるやら
perlは任意のロジックをperl式に移譲するのが楽、パターンにも書けるし、大抵インラインで済む
vim9で大幅に言語変えるっぽいけど、どうなるやら
2021/11/15(月) 11:19:19.50ID:vc2enCPn
()が減るケースって実用的にはあまり無いんじゃないか?アサーションの修飾対象がグループなら、どうせ()が必要になるわけだし
アサーションの\@が後置なのはperl系より一貫性があって良い設計だと思う、?,+,* etcと同列の修飾子とみなせる
アサーションの\@が後置なのはperl系より一貫性があって良い設計だと思う、?,+,* etcと同列の修飾子とみなせる
2021/11/15(月) 21:36:14.28ID:5vPB6h42
非包含オペレータの提案者の方の過去ログ漁ってたらすごいの出てきた
ttp://www.a-k-r.org/pub/2013-06-02-rubyhiroba-akr.pdf
これを使えば2次元の彼女が見つかりそう
ttp://www.a-k-r.org/pub/2013-06-02-rubyhiroba-akr.pdf
これを使えば2次元の彼女が見つかりそう
27デフォルトの名無しさん
2021/11/17(水) 00:30:09.97ID:pGjzwEdG pythonで文字列分割をする時
1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
re.splitで、思いつく限りやってみましたが、うまく行きませんでした。
[・ー└]|( ){3,}
[・ー└( ){3,}]
[・ー└(( ){3,})]
試しにre.sub(〜, "", ・・・)で文字列が削除出来るかどうか試したときは半角スペース3つが消えました。
いくつかの文字 もしくは 特定の文字の繰り返し、で文字列を分解する書き方はありますでしょうか
1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
re.splitで、思いつく限りやってみましたが、うまく行きませんでした。
[・ー└]|( ){3,}
[・ー└( ){3,}]
[・ー└(( ){3,})]
試しにre.sub(〜, "", ・・・)で文字列が削除出来るかどうか試したときは半角スペース3つが消えました。
いくつかの文字 もしくは 特定の文字の繰り返し、で文字列を分解する書き方はありますでしょうか
28デフォルトの名無しさん
2021/11/17(水) 00:32:30.60ID:pGjzwEdG 上記で、分かりにくくてすみません、
>1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
この「1:」は気にしないでください。
また、re.subで上手く行ったのは、1つめに書いた [・ー└]|( ){3,} です
>1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
この「1:」は気にしないでください。
また、re.subで上手く行ったのは、1つめに書いた [・ー└]|( ){3,} です
2021/11/17(水) 01:31:56.09ID:vtK5EVRE
[・ー└]|( ){3,} → 合ってる
[・ー└( ){3,}] → 間違い
[・ー└(( ){3,})] → 間違い
文字コードが uft-8 以外で書かれている文書を扱ってるとか?
そうなら python 文字コード でググって文書を uft-8 に変換してから split
[・ー└( ){3,}] → 間違い
[・ー└(( ){3,})] → 間違い
文字コードが uft-8 以外で書かれている文書を扱ってるとか?
そうなら python 文字コード でググって文書を uft-8 に変換してから split
2021/11/17(水) 02:52:26.84ID:CiQU0O+7
( → (?:
2021/11/17(水) 04:06:28.28ID:PbEjqT95
>>29
そもそも単文字なんだしグループにする必要なくね?
そもそも単文字なんだしグループにする必要なくね?
2021/11/17(水) 09:04:44.07ID:GPq3lXDW
2021/11/17(水) 10:12:43.95ID:A6BSd3Zu
正規表現に生の半角スペース使うのは一見気づきにくくて余り好きじゃないなぁ
\x20 にしない人多いのかな
\x20 にしない人多いのかな
2021/11/17(水) 10:36:58.04ID:6wJ0temu
俺は生派
\sを使う人もいるけど俺は嫌
\sを使う人もいるけど俺は嫌
2021/11/17(水) 10:39:17.25ID:GPq3lXDW
エディタの設定で可視化もできるしね。>半角スペース
2021/11/17(水) 10:39:47.05ID:6wJ0temu
this is a pen
を
this\x20is\x20a\x20pen
とかも嫌
を
this\x20is\x20a\x20pen
とかも嫌
2021/11/17(水) 10:56:31.05ID:A6BSd3Zu
文章になってるものまで生で使わないと言うわけじゃないけどな
ブラケットの中で使う場合なんかは生は避けたいわ
[ ]とかよく見かけるけど、分かりづらい
なお、\sは半角スペースを含むけどそれ自体じゃないので普通は区別して使うでしょ
ブラケットの中で使う場合なんかは生は避けたいわ
[ ]とかよく見かけるけど、分かりづらい
なお、\sは半角スペースを含むけどそれ自体じゃないので普通は区別して使うでしょ
3829
2021/11/17(水) 11:01:36.46ID:vtK5EVRE this[ ]is[ ]a[ ]pen
proxomitronのフィルタ職人をやってるときはこうやってた
今だと this\ is\ a\ pen かな? 使ったことないけどw
\s は環境によっては全角スぺにマッチするから気を付けないとね
proxomitronのフィルタ職人をやってるときはこうやってた
今だと this\ is\ a\ pen かな? 使ったことないけどw
\s は環境によっては全角スぺにマッチするから気を付けないとね
2021/11/17(水) 11:32:27.19ID:6wJ0temu
2021/11/17(水) 20:33:29.63ID:vtK5EVRE
Jane用の正規表現を掲示板に貼るときにはタブ文字のところを 【tab】 って
書き換えて貼ってたなぁ、しかしJane自体が廃れて使うことが無くなった
書き換えて貼ってたなぁ、しかしJane自体が廃れて使うことが無くなった
4127
2021/11/17(水) 23:51:26.36ID:pGjzwEdG 27です
こんなにも早く教えてくださってとても助かりました!
()が要らなかったんですね。勉強になります!
ありがとうございました!
こんなにも早く教えてくださってとても助かりました!
()が要らなかったんですね。勉強になります!
ありがとうございました!
4229
2021/11/19(金) 20:58:09.22ID:rZqXBgxj これの検証してみた
Absence operator is broken #150
https://github.com/k-takata/Onigmo/issues/150
・検証コード (ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32])
p /(?~a.*[bv].*c)/.match("000a111v222c333b444c555")
・結果
#<MatchData "000a111v222c333b444">
a〜v〜c を含んでしまってるのでバグで確定
原因は最初にマッチした段階で検索を打ち切ってしまっていて
別のパターンを見逃している
別のパターンを見つける必要があることは非包含オペレータ提案者さんの論文で
図付きで説明されてるけどこれを見落としてしまったオチ?
直すには論文通りに実装すれば良いだけなので直せないことは無さそう
自分がプログラミング出来れば直したいけどミジンコなので手も足も出ず..
-------------------------------------------------------
>>41 おつー
Absence operator is broken #150
https://github.com/k-takata/Onigmo/issues/150
・検証コード (ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32])
p /(?~a.*[bv].*c)/.match("000a111v222c333b444c555")
・結果
#<MatchData "000a111v222c333b444">
a〜v〜c を含んでしまってるのでバグで確定
原因は最初にマッチした段階で検索を打ち切ってしまっていて
別のパターンを見逃している
別のパターンを見つける必要があることは非包含オペレータ提案者さんの論文で
図付きで説明されてるけどこれを見落としてしまったオチ?
直すには論文通りに実装すれば良いだけなので直せないことは無さそう
自分がプログラミング出来れば直したいけどミジンコなので手も足も出ず..
-------------------------------------------------------
>>41 おつー
4329
2021/11/19(金) 23:35:42.78ID:rZqXBgxj ついでにもう1つだけ
Use of \K when the string to match after \K can be empty #152
https://github.com/k-takata/Onigmo/issues/152
これは \K を使ってゼロ幅マッチになった場合に次の検索開始位置が
予期せず1つ進んでしまう問題のようだ
gsubの仕様かなと思ったけど (?<=\w) と \w\K の2つが違う結果になるのは
違和感ある、\K での ゼロ幅マッチ後の pos を進まないようにすれば直りそう
takata先生の代わりにちゃちゃっと始末してくれるスーパーハカーさん募集
Use of \K when the string to match after \K can be empty #152
https://github.com/k-takata/Onigmo/issues/152
これは \K を使ってゼロ幅マッチになった場合に次の検索開始位置が
予期せず1つ進んでしまう問題のようだ
gsubの仕様かなと思ったけど (?<=\w) と \w\K の2つが違う結果になるのは
違和感ある、\K での ゼロ幅マッチ後の pos を進まないようにすれば直りそう
takata先生の代わりにちゃちゃっと始末してくれるスーパーハカーさん募集
4429
2021/11/20(土) 00:06:32.69ID:dCkHZW0G \K より前で文字を消費していない場合は pos は進まないようだ
/\K/ → pos進まず
/.\K/ → 予期せずpos進んでしまう
/\K/ → pos進まず
/.\K/ → 予期せずpos進んでしまう
2021/11/20(土) 13:49:08.95ID:S4adbGs3
>>42
イシュー150の起票者がオリジナルの鬼車作者さんやんけw
イシュー150の起票者がオリジナルの鬼車作者さんやんけw
4629
2021/11/20(土) 14:09:45.26ID:dCkHZW0G >>45 そうなんだよね、だから気になってた
-------------------------------------------------
>>42 とは別の検証をしてみた
p /(?~a.*b.*c|222)/.match("000a111b222c333")
#<MatchData "000a111b22">
これは期待通りにマッチした、これが正しく動くということは
論文の読み落としではないね、失礼しました
問題は同一posでマッチ文字数が最短になるマッチを見つけなければいけないが
それをしていないことみたいだ
この処理って結構な処理量になりそうだけど大丈夫なのかな?
オペレータ提案者さんのサンプルコードではどうなってるんだろ?
プログラムが読めないから対応出来てるのか分からない..
あまりに重いようなら量指定子を使えるようにしたほうが良いかもしれない
.* を .{0,1000} に書き換えて処理量を限定させるのと同じで
(?~abc){0,1000} みたいな指定が出来るようにすれば..
-------------------------------------------------
>>42 とは別の検証をしてみた
p /(?~a.*b.*c|222)/.match("000a111b222c333")
#<MatchData "000a111b22">
これは期待通りにマッチした、これが正しく動くということは
論文の読み落としではないね、失礼しました
問題は同一posでマッチ文字数が最短になるマッチを見つけなければいけないが
それをしていないことみたいだ
この処理って結構な処理量になりそうだけど大丈夫なのかな?
オペレータ提案者さんのサンプルコードではどうなってるんだろ?
プログラムが読めないから対応出来てるのか分からない..
あまりに重いようなら量指定子を使えるようにしたほうが良いかもしれない
.* を .{0,1000} に書き換えて処理量を限定させるのと同じで
(?~abc){0,1000} みたいな指定が出来るようにすれば..
4729
2021/11/25(木) 18:40:51.33ID:QsU6pq8j Onigmo のバグの原因となった個所が判明したので書いておこう
正規表現における非包含オペレータの提案
ttps://staff.aist.go.jp/tanaka-akira/pub/prosym49-akr-paper.pdf
この論文のサンプルコードに下記のメソッドがある
def try_alt(r1, r2, str, pos, &block)
try(r1, str, pos, &block)
try(r2, str, pos, &block)
end
これは正規表現で言うと r1|r2 の "|" にあたる動作をする部分のメソッドだが
このサンプルコードでは r1 のマッチが成功した後でも必ず r2 を試す仕様になっている
しかし Onigmo の検索方式では r1 がマッチした後に正規表現の最後までマッチが
成立した場合には r2 が試されない仕様になっている
これにより r2 を通る一部パターンが見落とされる結果となりバグとして出現した
論文中の非包含オペレータのメソッドである def try_absent(r, str, pos) は
上記の def try_alt を使う前提で書かれたものなのでこれをそのまま Onigmo には移植出来ない
サンプルコード方式での処理量を考えるとおそらくこれとはまったく別のアルゴリズムで動く
動作の軽いメソッドを自作しないと Onigmo には導入出来ないのではないだろうか..
正規表現における非包含オペレータの提案
ttps://staff.aist.go.jp/tanaka-akira/pub/prosym49-akr-paper.pdf
この論文のサンプルコードに下記のメソッドがある
def try_alt(r1, r2, str, pos, &block)
try(r1, str, pos, &block)
try(r2, str, pos, &block)
end
これは正規表現で言うと r1|r2 の "|" にあたる動作をする部分のメソッドだが
このサンプルコードでは r1 のマッチが成功した後でも必ず r2 を試す仕様になっている
しかし Onigmo の検索方式では r1 がマッチした後に正規表現の最後までマッチが
成立した場合には r2 が試されない仕様になっている
これにより r2 を通る一部パターンが見落とされる結果となりバグとして出現した
論文中の非包含オペレータのメソッドである def try_absent(r, str, pos) は
上記の def try_alt を使う前提で書かれたものなのでこれをそのまま Onigmo には移植出来ない
サンプルコード方式での処理量を考えるとおそらくこれとはまったく別のアルゴリズムで動く
動作の軽いメソッドを自作しないと Onigmo には導入出来ないのではないだろうか..
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 清涼飲料水から麻薬成分東京都が注意喚起 [おっさん友の会★]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- んなっしょい🍬禁止🈲のお🏡
- 【動画】男女混合レスリングのガチ試合の様子がこちら [738130642]
- 【悲報】ネトウヨが大田實中将の「沖縄県民斯く戦えり」って訣別電出しながら昔の沖縄県民は立派だったって嘆いてた😰 [616817505]
- 【日刊】暇空茜、また敗訴🥸 [359965264]
