21/11/03 19:51:06.60 ebAE+z9+.net
スルーされにくい質問のテンプレと例
●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
※ ^ はアンダーラインだそうな ^^;
3:デフォルトの名無しさん
21/11/03 19:51:26.32 ebAE+z9+.net
◆関連サイト
正規表現メモ
URLリンク(www.kt.rim.or.jp)
Perl正規表現雑技
URLリンク(www.din.or.jp)
詳説 正規表現
URLリンク(www.oreilly.co.jp)
正規表現クックブック
URLリンク(www.oreilly.co.jp)
正規表現プログラミングFAQ
URLリンク(capslockabcjp.kitunebi.com)
.NET Framework の正規表現 | Microsoft Docs
URLリンク(docs.microsoft.com)
正規表現 - JavaScript | MDN
URLリンク(developer.mozilla.org)
鬼車
URLリンク(github.com)
鬼雲
URLリンク(github.com)
bregonig.dll(鬼雲の正規表現をサクラエディタ等で使用するためのライブラリ)
URLリンク(k-takata.o.oo7.jp)
Boost.Regex 1.45.0 (日本語訳)
URLリンク(alpha.sourceforge.jp)
秀丸: 複数行にまたがる検索について
URLリンク(homepage2.nifty.com)
サクラエディタ: 改行
URLリンク(d.hatena.ne.jp)
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
4:デフォルトの名無しさん
21/11/03 19:54:20.40 ebAE+z9+.net
正規表現技術入門
URLリンク(gihyo.jp)
↑の著者の一人であり Onigmo(鬼雲)やbregonig.dll の作者でもあるtakata先生のツイとQiitaの記事
URLリンク(twitter.com)
鬼雲に非包含オペレータを実装した話
URLリンク(qiita.com)
(deleted an unsolicited ad)
5:デフォルトの名無しさん
21/11/03 20:59:16.79 554LNcID.net
>>1
スレ立てありがとう
ところで、C++コンパイラごとにbasic_regex::replace()の置換後文字列のバックスラッシュがエスケープされたりされなかったりするのが厄介ですね
6:デフォルトの名無しさん
21/11/03 21:43:29.56 K+2zXBgv.net
URLリンク(troutlurefishing.jp)
URLリンク(murashun.jp)
URLリンク(www.itmedia.co.jp)
7:デフォルトの名無しさん
21/11/04 11:16:22.06 JyTL4wpj.net
nifty の URL 死んでるな
8:デフォルトの名無しさん
21/11/04 11:42:25.33 diIHvWke.net
DeNAが個人ブログから正規表現の表丸パクりしてたのワロタ
9:デフォルトの名無しさん
21/11/04 11:59:17.47 iRkMc3Gk.net
丸パクリならまだいい
改変もまともにできないのはヤバい
正規表現の例 マッチする例
Coo+el Coopel
URLリンク(pbs.twimg.com)
10:デフォルトの名無しさん
21/11/04 12:31:32.50 B00ATyI8.net
>>9
どゆこと?
11:デフォルトの名無しさん
21/11/04 12:38:22.63 Gz31zHb0.net
>>10
oの1回以上の繰り返しじゃ
pにマッチするわけないです
12:デフォルトの名無しさん
21/11/04 12:48:06.96 diIHvWke.net
元がgoogleを例にしてたからこうなったのかな
いずれにしてもワロタ
13:デフォルトの名無しさん
21/11/04 12:49:09.54 iCxb5Ekd.net
>>10
URLリンク(regex101.com)
14:デフォルトの名無しさん
21/11/04 14:21:26.74 B00ATyI8.net
>>11
ああ、勝手に.入れてた
ほんとだひどいな
15:デフォルトの名無しさん
21/11/04 14:53:30.31 /D1z+6Mc.net
劣化コピーだから責められてて
上品だったら叩けない訳か
16:デフォルトの名無しさん
21/11/05 08:20:43.21 +Hevqd/d.net
本歌取りと言う言葉もありますし
17:デフォルトの名無しさん
21/11/05 11:40:57.68 pLniUbgZ.net
オマージュ・インスパイア→胡散臭い
本歌取り→凄そう
18:デフォルトの名無しさん
21/11/05 12:37:40.52 1iAtfRIf.net
本歌取りに良いイメージがあるのは、この行為が和歌の世界で伝統的に許されてきたからだ。
19:デフォルトの名無しさん
21/11/06 20:39:20.57 oKHbtIv+.net
祝☆ vim 3o+年
20:デフォルトの名無しさん
21/11/06 21:18:49.31 G8Zn1Puj.net
>>19
スレ違い
21:デフォルトの名無しさん
21/11/07 00:36:45.12 kpV1ZjX8.net
(/(>>1)/,'$1乙')
22:デフォルトの名無しさん
21/11/15 00:01:22.12 5vPB6h42.net
今までに無いかつら、非包含オペレータ
URLリンク(bokete.jp)
23:デフォルトの名無しさん
21/11/15 10:09:56.72 xJpmlO5M.net
vimで文字列処理ってマイナーなのか?
UIでマッチをハイライトしながらパターンを書けるし、書いたパターンと処理はperlやsedのようにコマンドライン引数で渡してシェルスクリプトに組み込める(UI無し、非インタラクティブモード)
vimはバッファするからストリーム処理には向かないくて、パイプにはperlを使うけど、バッチ処理ならvimの方が速い
あと、個人的にアサーションの記法(\@<=等)も、()が深くなりがちなperl系の(?<=等)より好みだ
24:デフォルトの名無しさん
21/11/15 10:57:59.40 Y0jbpZIM.net
惜しむらくは、マッチ後の単純でない処理を委託するvimscriptがクソなところだと思う、regex自体は十分パワフル
perlは任意のロジックをperl式に移譲するのが楽、パターンにも書けるし、大抵インラインで済む
vim9で大幅に言語変えるっぽいけど、どうなるやら
25:デフォルトの名無しさん
21/11/15 11:19:19.50 vc2enCPn.net
()が減るケースって実用的にはあまり無いんじゃないか?アサーションの修飾対象がグループなら、どうせ()が必要になるわけだし
アサーションの\@が後置なのはperl系より一貫性があって良い設計だと思う、?,+,* etcと同列の修飾子とみなせる
26:デフォルトの名無しさん
21/11/15 21:36:14.28 5vPB6h42.net
非包含オペレータの提案者の方の過去ログ漁ってたらすごいの出てきた
URLリンク(www.a-k-r.org)
これを使えば2次元の彼女が見つかりそう
27:デフォルトの名無しさん
21/11/17 00:30:09.97 pGjzwEdG.net
pythonで文字列分割をする時
1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
re.splitで、思いつく限りやってみましたが、うまく行きませんでした。
[・ー└]|( ){3,}
[・ー└( ){3,}]
[・ー└(( ){3,})]
試しにre.sub(〜, "", ・・・)で文字列が削除出来るかどうか試したときは半角スペース3つが消えました。
いくつかの文字 もしくは 特定の文字の繰り返し、で文字列を分解する書き方はありますでしょうか
28:デフォルトの名無しさん
21/11/17 00:32:30.60 pGjzwEdG.net
上記で、分かりにくくてすみません、
>1:・ー└等の1文字と、半角スペース3つ以上のいずれかで文字列を分解したい
この「1:」は気にしないでください。
また、re.subで上手く行ったのは、1つめに書いた [・ー└]|( ){3,} です
29:デフォルトの名無しさん
21/11/17 01:31:56.09 vtK5EVRE.net
[・ー└]|( ){3,} → 合ってる
[・ー└( ){3,}] → 間違い
[・ー└(( ){3,})] → 間違い
文字コードが uft-8 以外で書かれている文書を扱ってるとか?
そうなら python 文字コード でググって文書を uft-8 に変換してから split
30:デフォルトの名無しさん
21/11/17 02:52:26.84 CiQU0O+7.net
( → (?:
31:デフォルトの名無しさん
21/11/17 04:06:28.28 PbEjqT95.net
>>29
そもそも単文字なんだしグループにする必要なくね?
32:デフォルトの名無しさん
21/11/17 09:04:44.07 GPq3lXDW.net
>>28
上でも書かれているが()は要らんよ。
import re
s='これ・はテスートなの└かテ スト なの です'
print(re.split('[・ー└]| {3,}',s))
33:デフォルトの名無しさん
21/11/17 10:12:43.95 A6BSd3Zu.net
正規表現に生の半角スペース使うのは一見気づきにくくて余り好きじゃないなぁ
\x20 にしない人多いのかな
34:デフォルトの名無しさん
21/11/17 10:36:58.04 6wJ0temu.net
俺は生派
\sを使う人もいるけど俺は嫌
35:デフォルトの名無しさん
21/11/17 10:39:17.25 GPq3lXDW.net
エディタの設定で可視化もできるしね。>半角スペース
36:デフォルトの名無しさん
21/11/17 10:39:47.05 6wJ0temu.net
this is a pen
を
this\x20is\x20a\x20pen
とかも嫌
37:デフォルトの名無しさん
21/11/17 10:56:31.05 A6BSd3Zu.net
文章になってるものまで生で使わないと言うわけじゃないけどな
ブラケットの中で使う場合なんかは生は避けたいわ
[ ]とかよく見かけるけど、分かりづらい
なお、\sは半角スペースを含むけどそれ自体じゃないので普通は区別して使うでしょ
38:29
21/11/17 11:01:36.46 vtK5EVRE.net
this[ ]is[ ]a[ ]pen
proxomitronのフィルタ職人をやってるときはこうやってた
今だと this\ is\ a\ pen かな? 使ったことないけどw
\s は環境によっては全角スぺにマッチするから気を付けないとね
39:デフォルトの名無しさん
21/11/17 11:32:27.19 6wJ0temu.net
>>37
エディタ上でははっきりと区別がつくけど
こんな所へ貼る場合は確かに分かり難いね
まあこの場合は目的が分かってるので分かりやすいとも言えるけど
40:デフォルトの名無しさん
21/11/17 20:33:29.63 vtK5EVRE.net
Jane用の正規表現を掲示板に貼るときにはタブ文字のところを 【tab】 って
書き換えて貼ってたなぁ、しかしJane自体が廃れて使うことが無くなった
41:27
21/11/17 23:51:26.36 pGjzwEdG.net
27です
こんなにも早く教えてくださってとても助かりました!
()が要らなかったんですね。勉強になります!
ありがとうございました!
42:29
21/11/19 20:58:09.22 rZqXBgxj.net
これの検証してみた
Absence operator is broken #150
URLリンク(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
21/11/19 23:35:42.78 rZqXBgxj.net
ついでにもう1つだけ
Use of \K when the string to match after \K can be empty #152
URLリンク(github.com)
これは \K を使ってゼロ幅マッチになった場合に次の検索開始位置が
予期せず1つ進んでしまう問題のようだ
gsubの仕様かなと思ったけど (?<=\w) と \w\K の2つが違う結果になるのは
違和感ある、\K での ゼロ幅マッチ後の pos を進まないようにすれば直りそう
takata先生の代わりにちゃちゃっと始末してくれるスーパーハカーさん募集
44:29
21/11/20 00:06:32.69 dCkHZW0G.net
\K より前で文字を消費していない場合は pos は進まないようだ
/\K/ → pos進まず
/.\K/ → 予期せずpos進んでしまう
45:デフォルトの名無しさん
21/11/20 13:49:08.95 S4adbGs3.net
>>42
イシュー150の起票者がオリジナルの鬼車作者さんやんけw
46:29
21/11/20 14:09:45.26 dCkHZW0G.net
>>45 そうなんだよね、だから気になってた
-------------------------------------------------
>>42 とは別の検証をしてみた
p /(?~a.*b.*c|222)/.match("000a111b222c333")
#<MatchData "000a111b22">
これは期待通りにマッチした、これが正しく動くということは
論文の読み落としではないね、失礼しました
問題は同一posでマッチ文字数が最短になるマッチを見つけなければいけないが
それをしていないことみたいだ
この処理って結構な処理量になりそうだけど大丈夫なのかな?
オペレータ提案者さんのサンプルコードではどうなってるんだろ?
プログラムが読めないから対応出来てるのか分からない..
あまりに重いようなら量指定子を使えるようにしたほうが良いかもしれない
.* を .{0,1000} に書き換えて処理量を限定させるのと同じで
(?~abc){0,1000} みたいな指定が出来るようにすれば..
47:29
21/11/25 18:40:51.33 QsU6pq8j.net
Onigmo のバグの原因となった個所が判明したので書いておこう
正規表現における非包含オペレータの提案
URLリンク(staff.aist.go.jp)
この論文のサンプルコードに下記のメソッドがある
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 には導入出来ないのではないだろうか..
48:29
21/11/25 19:06:15.35 QsU6pq8j.net
論文3ページ目の右半分に 表3 がある
r1r2 | [:seq, r1, r2]
ここの :seq は r1 と r2 を連接するという意味で使われているが
サンプルコードでは :seq を使わず :cat になっている
ここで疑問なのが何故違う名前を使うことになったのか? である
(仮説1) 非包含オペレータ提案者さんは猫が好き
ごろにゃんしながらバックトラックにゃん である
(仮説2) cat は Unix でよく使われる連結コマンドであり catenate から由来する
これもなかなかの難問である
49:デフォルトの名無しさん
21/11/29 20:58:37.88 ZJywLyaD.net
ある短い英単語が文章に含まれているかどうかを判定したいのですが、
他の英単語の一部に含まれているようなときは除外したいです。
例:検索単語:ap、
○:ap is short of...
○:これはapです
NG:pen pineapple apple pen
つまり、『単語の前後に文字がある場合は、それらがアルファベットでない』という条件を加えたいのですが、
これの実現方法に詰まっています。
[^a-zA-Z]ap[^a-zA-Z]
の至るところに、.*や*や+を様々なパターン試したのですがうまく行かず。。。
うまく行ったと思っても、指定単語が文頭や文末に来て、前後のどちらかに文字がないときはうまく行きません。
どなたかご教授頂けませんでしょうか。
50:デフォルトの名無しさん
21/11/29 21:09:24.49 be+dUloq.net
>>49
(?<![a-zA-Z])ap(?![a-zA-Z])
もし英文のみなら
\bap\b
でも可
51:デフォルトの名無しさん
21/11/29 21:22:37.81 ZJywLyaD.net
こんなに早く教えていただいてありがとうございます。
試してみたのですが、うまく行きませんでした。検証方法間違ってますでしょうか?
----------------
value="abc ap abc"
pattern = "(?<![a-zA-Z])ap(?![a-zA-Z])"
re.match(pattern, value)
※何も取得できず
----------------
52:デフォルトの名無しさん
21/11/29 21:35:41.08 7mT4ej7+.net
re.matchじゃなくてre.search
matchは先頭位置からしかマッチするか調べない
53:デフォルトの名無しさん
21/11/29 21:41:33.24 be+dUloq.net
ところで
ap'sとかap-dataとかもろもろの扱いはいいのか?
54:デフォルトの名無しさん
21/11/29 22:02:03.30 ZJywLyaD.net
>>52
ありがとうございます!うまく行きました!
大変初歩的な間違い、失礼いたしました。。。ご助言ありがとうございます
>>53
ご指摘ありがとうございます。そこの考慮をしていませんでした。
今回はたまたま問題ありませんでしたが、これからは考えます。
ありがとうございました。
55:29
21/12/06 21:53:22.08 S5ugmQVz.net
rubyのコードが読めたから調子に乗って鬼車のソースからのインストールと
simple.c の実行に挑戦してみたら成功するまで10日くらいかかった
win10 パソコンで VMware を動かして中に ubuntu 20.04 を入れて
oniguruma 6.9.7 をインストした
あとは C言語で書かれたサンプルコードを解析すれば oniguruma の
色々なオプションを試せるようになる..
Unix も C言語 も知らないしプログラマでもないミジンコだけどググりまくれば
意外と何とかなりそうだ、次は Onigmo を入れよう..
56:29
21/12/07 02:27:56.29 gbEOg3vj.net
Onigmo もインスト出来たけど simple.c の実行結果がおかしい
// oniguruma の場合
match at 4
0: (4-14)
1: (5-13)
// Onigmo の場合
match at 4
0: (21474836484-55834574862)
1: (0-0)
インスト失敗か?
README_japanese に書いてある "onig-config --cflags" での構成確認は
oniguruma と Onigmo で同じコマンドだけど共通のコマンドなのかな?
両方入れたからどっちの構成を確認してるのか分からない
57:29
21/12/07 04:28:00.86 gbEOg3vj.net
↑の構成確認の件はOnigmo の README.ja の 111 ~ 114 行目 が
oniguruma の説明のままなだけだった、takata先生更新を..
.ja が付いてない英語版も同様です
github の Onigmo のトップページでは正しく
"onigmo-config --cflags" と書いてありました
58:29
21/12/07 15:13:24.06 gbEOg3vj.net
↑ の件ですが README.ja の 61 行目の
> 以下、鬼車の README.ja:
を見落としておりました、鬼車の説明書きのコピペだったのね..orz
>>56 の Onigmo の結果がおかしかったのも↓で正常動作しました
間違い: cc sample.c -L/usr/local/lib -lonig
正しい: cc sample.c -L/usr/local/lib -lonigmo
お騒がせして申し訳ありません m(__)m
59:29
21/12/14 23:52:24.48 hRBVXs3o.net
perl5と鬼車、鬼雲の動作を比べて遊んでたらperl5の変な挙動を発見
\d{1} の {1} を付けるか消すかで結果が変わる
---------------------------
my $str = '12';
$str =~ s/(?<name>\d{1}){0}(?&name)/<match=$&>/;
print "$str\r\n";
---------------------------
↓{0} での定義を (?(DEFINE) ... ) に変えると正常動作する
---------------------------
my $str = '12';
$str =~ s/(?(DEFINE)(?<name>\d{1}))(?&name)/<match=$&>/;
print "$str\r\n";
---------------------------
perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread
60:29
21/12/15 05:01:54.34 +lf8SrwJ.net
・ {0} での定義ではマッチせず
---------------------------
my $str = '123';
$str =~ s/(?<name>123){0}(?&name)/<match=$&>/;
print "$str\r\n";
・DEFINEを使うと正常動作する
---------------------------
my $str = '123';
$str =~ s/(?(DEFINE)(?<name>123))(?&name)/<match=$&>/;
print "$str\r\n";
---------------------------
perl5 では {0} で定義するのは想定外?
61:29
21/12/16 22:14:43.92 0VSoy2O4.net
onigurumaの非包含オペレータの動作が論文と違う
正規表現 ^(?~abc) をテキスト 0123abcd に対して検索して比較すると..
論文の動作 : 0123ab がマッチする
onigurumaの動作 : 0123 がマッチする
逆に Onigmo は分岐が含まれない正規表現なら論文通りに動作するので
この場合は論文と同じ動作をする
動作的には ((?!abc).)* と同じなので論文で指摘されているように
形式言語理論から逸脱しているし、後ろに続く正規表現によっては
マッチ出来ずに検索が終わってしまうケースが発生する 例、 ^(?~abc)c
非包含オペレータは提案から14年経ってもなお未完のままということに..
62:デフォルトの名無しさん
21/12/17 13:32:58.43 N/8v4GiQ.net
>>61
^(?~(?<=ab)c)
63:デフォルトの名無しさん
21/12/17 15:12:28.90 wvP9ttxM.net
記号が同じなだけで名称も説明上の動作も違うからそもそも似て非なる別物
ではなくて?
64:29
21/12/17 19:59:50.60 t+q3CK3B.net
>>62 それ反則w ちなみにこんなのもある
Perl正規表現雑技 : ある文字列を含まないものにマッチする正規表現
URLリンク(www.din.or.jp)
>>63 その解釈で間違ってないと思う、oniguruma の (?~abc) は仕様が
決まった時点で別物だね、(?:(?!abc).)* の拡張版と言ったほうがしっくりくる
実用上は oniguruma 版のほうが使いやすそうだしあえて変えたんだろうね
65:デフォルトの名無しさん
21/12/17 20:49:06.88 BDVQn7Pa.net
いやぁ、、ヒネくれちゃっただけでしょ
66:デフォルトの名無しさん
21/12/19 06:09:19.30 X6k+U6Sv.net
成果だけ横から頂いてこっちで改変流用するわwおまえ除名なwとか言われちゃったらまあ拗ねもするさ
67:デフォルトの名無しさん
21/12/19 08:57:20.74 hMGijQ8S.net
(?s:^(?=.*(?:トビラ|280|280|[内外]製|純正|公式))(?=.*(?:ガイジ|発狂|長文|必死|キチガイ|キチキチ)))
これが効かないんすけど何か間違えてますか?
スレリンク(android板)
68:デフォルトの名無しさん
21/12/19 10:54:25.85 mCvaVjB9.net
少なくともchmateだとマッチしてる
正規表現と文字列の切り替えの設定間違えてるんじゃないの
69:デフォルトの名無しさん
21/12/20 20:18:42.66 k8SAGnLj.net
●Regular Expressionの使用環境
サクラエディタ(bregoing.dll Ver4.20 with Onigmo 6.2.0)
●検索か置換か?
検索
●説明
IPv4アドレスに一致させたい
●対象データ
2021.12.19.06
192.168.1.1
●希望する結果
192.168.1.1
下の正規表現だと2021.12.19.06の021.12.19.06に一致していまいました。
/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/k
70:69
21/12/20 20:22:55.66 k8SAGnLj.net
すみません
対象データの訂正です
最初と最後に文字列があります
●対象データ
AB2021.12.19.06E
CD192.168.1.1E
71:デフォルトの名無しさん
21/12/20 20:25:28.02 cLNhpahP.net
URLリンク(www.google.co.jp)
72:デフォルトの名無しさん
21/12/20 20:55:56.04 k8SAGnLj.net
度々すみません
訂正があったので再度質問させてください
●Regular Expressionの使用環境
サクラエディタ(bregoing.dll Ver4.20 with Onigmo 6.2.0)
●検索か置換か?
検索
●説明
IPv4アドレスに一致させたい
条件
前後に何も含まない場合
前後に[]を含む場合
前後に半角を含む場合
●対象データ
A2021.12.19.06B
B192.168.1.01B
192.168.1.1
[192.168.1.1]
_192.168.1.1_ ←_は半角空白
●希望する結果
192.168.1.1
[192.168.1.1]
_192.168.1.1_ ←_は半角空白
下の正規表現だと2021.12.19.06の021.12.19.06に一致していまいました。
/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/k
よろしくお願いします
73:72
21/12/20 21:00:55.82 k8SAGnLj.net
希望する結果では[]や半角を含まずIP部分だけ一致させたいです
よろしくお願いします
74:デフォルトの名無しさん
21/12/20 21:13:35.36 cLNhpahP.net
(?<![.0-9])(IPv4の正規表現ggrks)(?![.0-9])
75:72
21/12/20 21:27:00.64 k8SAGnLj.net
>>74
ありがとうございます
それだとIPv4アドレスではない部分に一致してしまいダメ
(?<![.0-9])([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})(?![.0-9])
76:72
21/12/20 21:31:02.39 k8SAGnLj.net
>>74
こういった結果を希望しています
よろしくお願いします
●対象データ
A2021.12.19.06B
B192.168.1.01B
192.168.1.1
[192.168.1.1]
_192.168.1.1_ ←_は半角空白
●希望する結果
一致しない
一致しない ←.01という表記が正しくない為
192.168.1.1 ←一致
192.168.1.1 ←[]の中を一致
192.168.1.1 ←前後の半角を除いて一致
77:デフォルトの名無しさん
21/12/20 21:50:00.81 k8/KZn4u.net
[192.168.1.1_
78:72
21/12/20 22:36:54.07 azxFC8Fx.net
>>74
下の通りにしたら出来ました
ありがとうございました
/(?<![.0-9])(((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))(?![.0-9])/k
79:デフォルトの名無しさん
21/12/21 05:04:20.96 DlXpRfUq.net
(?<![.\d])(?:(2(?:5[0-5]|[0-4]\d)|1\d\d|[1-9]?\d)\.){3}\g'1'(?![.\d])
80:72
21/12/21 12:15:02.94 bLPLuUHJ.net
>>79
できました
ありがとうございました!
81:デフォルトの名無しさん
21/12/21 12:48:39.34 YqPiCVQe.net
(?<![.\d])(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.\g'1'){3}(?![.\d])
82:72
21/12/21 12:54:34.52 bLPLuUHJ.net
>>81
できました
ありがとうございます!
みなさん頭いいんですね・・・私は単純な正規表現しか分からず
83:72
21/12/21 13:04:04.34 bLPLuUHJ.net
ちなみに>>79さんや>>81さんの正規表現だと
こういった正規表現チェッカーでは一致しないのは何故なんでしょうか?
URLリンク(www.debuggex.com)
JavaScriptと表示されているリストをPythonに指定して試しました
84:デフォルトの名無しさん
21/12/21 16:35:44.32 fKMzp4yd.net
後方参照の記法絡みかなあ
85:デフォルトの名無しさん
21/12/21 16:46:05.57 ehDQ8UlO.net
¥をつかうか、$を使うかは、なかなか思い出せないから困る
86:デフォルトの名無しさん
21/12/21 18:31:43.92 2Q9XRXAv.net
>>79 >>81
サクラエディタ(というか鬼車や鬼雲、bregonig.dllの正規表現)
の\dは全角数字にもマッチするから
[0-9]で検索すべき
全角が含まれてしまう話は\s,\wなども同様
サクラエディタBBSでの高田先生の過去発言
URLリンク(sakura-editor.github.io)
87:72
21/12/21 18:47:26.57 bLPLuUHJ.net
>>86
なぜか分かりませんが全角には一致しなかったので大丈夫でした
88:72
21/12/21 18:54:30.58 bLPLuUHJ.net
>>86
よく確認したら全角にも一致していました
すみません
89:デフォルトの名無しさん
21/12/21 19:19:25.77 N0HCE/E4.net
左端に(?a)をつければ\dのままでも?
90:デフォルトの名無しさん
21/12/21 19:35:57.99 aQSGSn8P.net
Meryの\dは半角のみ
正規表現まわり含め検索はサクラよりMeryのが良いな
サクラは複数行検索不可だし
91:デフォルトの名無しさん
21/12/21 20:39:47.81 wzddSm6Q.net
●Regular Expressionの使用環境
サクラエディタ(bregoing.dll Ver4.20 with Onigmo 6.2.0)
●検索か置換か?
検索
●説明
IPv6アドレスに一致させたい
条件
●対象データ
2603:1096:0604:00bc:0000:0000:0000:0009
(2603:1096:0604:00bc:0000:0000:0000:0009) ←半角括弧の中だけに一致させたい
_2603:1096:0604:00bc:0000:0000:0000:0009_ ←_は半角スペースの中だけに一致させたい
2603:1096:604:bc::9
(2603:1096:604:bc::9)
_2603:1096:604:bc::9_
●希望する結果
2603:1096:0604:00bc:0000:0000:0000:0009
2603:1096:0604:00bc:0000:0000:0000:0009
2603:1096:0604:00bc:0000:0000:0000:0009
2603:1096:604:bc::9
2603:1096:604:bc::9
2603:1096:604:bc::9
○試した正規表現
下の正規表現だと最後の:以降(上の例だと最後の9)が一致しませんでした
(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?
よろしくお願いします
92:デフォルトの名無しさん
21/12/21 23:04:26.56 lAwv+hLw.net
>>86
鬼車なら、オプション指定(?D)でdigitをASCIIだけにで
93:きる (?D)..¥d..
94:デフォルトの名無しさん
21/12/22 00:48:17.09 zQqayV78.net
正直\dを[0-9]以外にもマッチさせる仕様ってどういう時に便利なのか今一つ分からん
95:デフォルトの名無しさん
21/12/22 03:24:15.78 dkzRMG/Q.net
[0-469bc:]++
96:デフォルトの名無しさん
21/12/22 09:44:58.18 dK2CjfaN.net
住所にしろ日付にしろ上から順に書いた方が齟齬が生じないだろうに
西洋文化圏のやつらは何が何でも省略しなきゃ気が済まないんだろうな
こんなもん略記許さない仕様の方が逆に全体的な効率は良いだろうに
フロッピーディスクの時代なら少しでも容量減らしたいのは分からなくも無いけど
97:91
21/12/22 10:25:10.40 giUFecUL.net
>>94
ありがとうございます
IPv6アドレス以外には一致させたくないのです
●対象データ
1
01
2603:1096:0604:00bc:0000:0000:0000:0009
(2603:1096:0604:00bc:0000:0000:0000:0009) ←半角括弧の中だけに一致させたい
_2603:1096:0604:00bc:0000:0000:0000:0009_ ←_は半角スペースの中だけに一致させたい
2603:1096:604:bc::9
(2603:1096:604:bc::9)
_2603:1096:604:bc::9_
●希望する結果
2603:1096:0604:00bc:0000:0000:0000:0009
2603:1096:0604:00bc:0000:0000:0000:0009
2603:1096:0604:00bc:0000:0000:0000:0009
2603:1096:604:bc::9
2603:1096:604:bc::9
2603:1096:604:bc::9
98:デフォルトの名無しさん
21/12/22 11:10:46.72 j6Uulo2p.net
>>95
個人的な本名や住所が先頭に来るのは西洋文化圏というよりイスラム圏も含めた地中海世界
プログラミング言語だと名前空間が上から順で統一されてるのに不思議だよね
99:デフォルトの名無しさん
21/12/22 11:53:44.33 dK2CjfaN.net
>>96
>>74と同じ手法でやればいいじゃない
100:91
21/12/22 12:01:15.82 giUFecUL.net
>>98
ありがとうございます
どういうことでしょうか?例えば>>94さんの例を元にして下の通りにしてもIPv6以外に一致してしまいます
(?<![.0-9])([0-469bc:]++)(?![.0-9])
101:デフォルトの名無しさん
21/12/22 16:45:06.37 rmiXIWtW.net
IP アドレスの正規表現ぐらい、公式が発表しているのでは?
102:デフォルトの名無しさん
21/12/22 17:23:12.37 Q/8wGtmi.net
>>99
最小がわからんので{8,}は適当だが、例文の限りではこれでいける。
ちょいと調べたら16進数とのことなので0-9,a-fなんでないの?
[0-9a-f:]{8,}
103:デフォルトの名無しさん
21/12/22 17:29:20.12 SKIY34Ty.net
IPv6を正確に捕捉するのは難しいだろ
2001:db8:0:0:1::1は×で、2001:db8::1:0:0:1が正しい
::ffff:c000:0280 = ::ffff:192.0.2.128
2001:db8:a::123/64
fe80::3%1
104:91
21/12/22 17:33:56.16 giUFecUL.net
>>101
ありがとうございます
それだと16:54:09みたいな日付にも一致してしまいました
105:デフォルトの名無しさん
21/12/22 17:41:16.95 Q/8wGtmi.net
>>103
そのパターン限定なら{8,}を{15,}とかで回避できる
106:91
21/12/22 17:52:56.27 giUFecUL.net
>>104
ありがとうございます
{9,}にしたら出来ました!
ちなみにこういうものに一致しないようにする方法はありますか?
:2603:1096:604:bc::9 ←先頭に:がある
こういう出現はないはずなんですが、もし簡単な正規表現の追加で出来たら嬉しいなあと
107:91
21/12/22 17:58:56.91 giUFecUL.net
>>105
出来た・・・と思ったんですが、文字数の調整で対応できない数字や英字の連続に一致してしまいダメでした
108:デフォルトの名無しさん
21/12/22 18:06:08.63 Q/8wGtmi.net
これでどう?
ただし頭:への対応は無理
([0-9a-f:]+:){4,}[0-9a-f]+
109:91
21/12/22 18:17:32.37 giUFecUL.net
>>107
度々ありがとうございます
それでも数字や英字の連続に一致してしまいダメでした
08d9c24701be
合ってるか分からないのですが、今のところ>>91の正規表現の末尾に[0-9]*を加えています・・・
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))[0-9]*
110:デフォルトの名無しさん
21/12/22 18:29:09.14 G1M4O4Y+.net
>>108
ところどころfe80とかffffみたいにベタ書きしてるのはなぜ?
111:デフォルトの名無しさん
21/12/22 21:01:48.91 ++/G/dKU.net
忘年会ネタにどうぞ
URLリンク(github.com)
URLリンク(github.com)
112:デフォルトの名無しさん
21/12/23 03:07:53.75 0XYH//o1.net
(?<!\h)(IPv6の正規表現ググレカス)(?!\h)
113:デフォルトの名無しさん
21/12/23 09:13:03.87 fgU7IqZ3.net
>>108
>08d9c24701be
([0-9a-f:]+:){4,}[0-9a-f]+
俺の環境ではマッチしないし、しないはずだけど?
114:デフォルトの名無しさん
21/12/23 09:14:21.91 fgU7IqZ3.net
>>108
ちなみにipv6の正規表現で検索して色々出てきたけど、下のやつから頭とお尻の(^$)とるとマッチするんだが、改行が含まれてしまう。
他は>>96がイレギュラーすぎてマッチしないのが多い。
URLリンク(tech-uh-oh.blogspot.com)
115:91
21/12/23 12:05:51.36 czwrZ62f.net
>>111
ありがとうございます
IPv6の正規表現も含めて教えてほしいです
>>112
ありがとうございます
すみません、もう一度試したところ08d9c24701beには一致しませんでした
これは対象データと希望する結果に書き忘れていたのですが、
教えてもらった([0-9a-f:]+:){4,}[0-9a-f]+だと2002:a05:622a:15cc::に一致しませんでした
116:91
21/12/23 12:10:08.55 czwrZ62f.net
>>113
度々ありがとうございます
そのURLにある正規表現だと長すぎてサクラエディタに登録できませんでした
117:デフォルトの名無しさん
21/12/23 12:30:01.85 fgU7IqZ3.net
>>114
([0-9a-f:]+:){4,}[0-9a-f:]+にすれば、それもマッチするけど
また要らないがマッチする可能性も出てくる。
118:91
21/12/23 12:52:17.35 czwrZ62f.net
>>116
何度もありがとうございます
1つの正規表現にまとめることにこだわらずに、
>>116で教えてもらったものと>>108の2つで対応したいと思います
どうもありがとうございました
>>108�
119:セと以下のようなものが一致せず困っていたので・・・ 2001:db8::1:0:0:1 2001:db8::0:1:0:0:1 2001:0db8::1:0:0:1
120:デフォルトの名無しさん
21/12/23 18:54:52.16 vyeaRFwP.net
(?<![\h:])(?:(\h{1,4}:)(?:(:\h{1,4}){1,6}|:)|\g'1'{2}(?:\g'2'{1,5}|:)|\g'1'{3}(?:\g'2'{1,4}|:)|\g'1'{4}(?:\g'2'{1,3}|:)|\g'1'{5}(?:\g'2'{1,2}|:)|\g'1'{6}(?:\g'2'{1}|:)|\g'1'{7}(?:\h{1,4}|:))(?![\h:])
121:91
21/12/23 18:57:04.64 czwrZ62f.net
>>118
わたし宛でしょうか?
それを試したら何にも一致しませんでした・・・
122:デフォルトの名無しさん
21/12/23 20:41:17.01 XObIp/CD.net
>>113
\sに改行が含まれるからでしょ
Rubyとかなら0x09~0x0D(水平タブHT,LF改行,垂直タブVT,改頁,CR改行)と0x20(スペース)
サクラエディタの鬼雲なら上記に加えて、
その他の改行種(NEL,PS,LS)や空白種(全角スペースやNBSPなど)
123:デフォルトの名無しさん
21/12/23 21:45:21.05 vyeaRFwP.net
([0-9a-f]{1,4}:)(?:(:[0-9a-f]{1,4}){1,6}|:)|\g'1'{2}(?:\g'2'{1,5}|:)|\g'1'{3}(?:\g'2'{1,4}|:)|\g'1'{4}(?:\g'2'{1,3}|:)|\g'1'{5}(?:\g'2'{1,2}|:)|\g'1'{6}(?:\g'2'{1}|:)|\g'1'{7}(?:[0-9a-f]{1,4}|:)
(?<![0-9a-f:])(?:([0-9a-f]{1,4}:)(?:(:[0-9a-f]{1,4}){1,6}|:)|\g'1'{2}(?:\g'2'{1,5}|:)|\g'1'{3}(?:\g'2'{1,4}|:)|\g'1'{4}(?:\g'2'{1,3}|:)|\g'1'{5}(?:\g'2'{1,2}|:)|\g'1'{6}(?:\g'2'{1}|:)|\g'1'{7}(?:[0-9a-f]{1,4}|:))(?![0-9a-f:])
(?<![0-9a-f])(?:([0-9a-f]{1,4}:)(?:(:[0-9a-f]{1,4}){1,6}|:)|\g'1'{2}(?:\g'2'{1,5}|:)|\g'1'{3}(?:\g'2'{1,4}|:)|\g'1'{4}(?:\g'2'{1,3}|:)|\g'1'{5}(?:\g'2'{1,2}|:)|\g'1'{6}(?:\g'2'{1}|:)|\g'1'{7}(?:[0-9a-f]{1,4}|:))(?![0-9a-f:])
124:デフォルトの名無しさん
21/12/24 07:37:01.80 MVBh4BeN.net
(([0-9a-f]{1,4}):){7}(?:\g'2'|:)|\g'1'{6}(?:(:\g'2')|:)|\g'1'{5}(?:\g'3'{1,2}|:)|\g'1'{4}(?:\g'3'{1,3}|:)|\g'1'{3}(?:\g'3'{1,4}|:)|\g'1'{2}(?:\g'3'{1,5}|:)|\g'1'(?:\g'3'{1,6}|:)
125:デフォルトの名無しさん
21/12/24 12:59:57.29 OtUQWwNp.net
短くするの?
(([0-9a-f]{1,4}):){7}(\g'2'|:)|(\g'1'()|(?=\5)(?!\6):()){1,6}\g'2'?(?=\6)
126:デフォルトの名無しさん
21/12/24 15:17:06.00 nz+3yICM.net
すげえw
()で文字間の位置をキャプチャ出来る事もそれを参照で先読みで使える事も知らなかったわ
127:デフォルトの名無しさん
21/12/24 16:07:46.99 TnoL0oNz.net
>>124
ごめん、先読みにする必要なかった
(([0-9a-f]{1,4}):){7}(\g'2'|:)|(\g'1'()|\5(?!\6):()){1,6}\g'2'?\6
128:デフォルトの名無しさん
21/12/24 16:09:42.73 TnoL0oNz.net
URLリンク(www.perlmonks.org)
129:デフォルトの名無しさん
21/12/24 23:23:23.50 zm3lCbTy.net
>>125
その表現だと↓みたいなポート番号にまで一致しちゃうYO!
2001:db8::1:80
これは表記がそもそも推奨されないからいいっちゃいいけど
130:デフォルトの名無しさん
21/12/25 12:25:23.75 e5f15Ru5.net
世界でもトップレベルの秀才たちが決めた規格なのになんでこんなに扱いづらいんだ?
そういえばメールアドレスの規格も酷かったな~(>>3の雑技を参照)
131:デフォルトの名無しさん
21/12/25 12:36:10.52 JZM3mrrs.net
むしろ 出来る人 は難しいかどうかが分からないからじゃない?
なんでこの程度の事でこの人たち四苦八苦してるんだろう、ってね
税制などと同じで敢えてややこしく作って仕事作ってるという側面もあるのかもね
132:デフォルトの名無しさん
21/12/25 12:50:35.23 e5f15Ru5.net
頭が良すぎるのも考えものだな、IT土方の気持ちなんて分からないだろうな
頭が良すぎる人の考える正規表現は大抵論理的に正しく動くが
検索効率を上げる書き方には興味が無いらしく強欲を使ったり
今回のIP6の例で言えば先頭に (?=[\h:]{6}) を置いて検索スピードを
上げようというIT土方ならではの実践的手法が使われないことが多い ex. >>125
133:デフォルトの名無しさん
21/12/25 13:00:34.13 Qk7G85M2.net
老舗旅館の増築みたいなもんでしょ
後方互換性を保とうとしたらそうならざるを得ない
MS-DOSをひきずるWindowsのようなもん
134:デフォルトの名無しさん
21/12/25 13:21:44.54 e5f15Ru5.net
windowsは増築しすぎてグシャっといきそうになってるね
135:デフォルトの名無しさん
21/12/25 13:46:31.03 JZM3mrrs.net
まあ俺も底辺ドカタの気持ちなんてさっぱりだわ悪いけどw
136:デフォルトの名無しさん
21/12/25 14:30:45.29 y5wYV+SA.net
ね
137:デフォルトの名無しさん
21/12/25 14:38:13.23 e5f15Ru5.net
たまにでいいからIT土方のことも考えて下さい
うちの会社で>>125みたいな正規表現を使ったら怒られます
チェック担当の子がヤムチャになっちゃったからやめてねって言われます
138:デフォルトの名無しさん
21/12/25 20:41:20.89 y5wYV+SA.net
無法地帯
139:デフォルトの名無しさん
21/12/25 22:12:05.75 e5f15Ru5.net
kkosさんここ見に来てるかな
URLリンク(github.com)
539行目
× + 不在停止 (?|...)
〇 + 不在停止 (?~|...)
来年はISO-2022-JPの年、今年も1年お疲れ様
140:デフォルトの名無しさん
21/12/26 10:52:57.40 XNM+0b8X.net
なんだこれ
鬼雲
URLリンク(ideone.com)
141:デフォルトの名無しさん
21/12/27 00:34:46.64 BHlowg/U.net
>>126
これやっと理解出来た、勉強になった、ありがとう
1、他の分岐に移っても捕獲したものは保持される
2、()が捕獲してないと\1は空文字列にマッチ出来ない
がキモになってるんだな
onigurumaの後方参照値有効性確認器でも同じことが出来そうだ
>>138
>>47
. は (?:a|b|c|........) と書き換えられる、すなわち分岐を含む正規表現だ
これだけじゃ説明付かない結果になってるけど . を使ってる以上考えても無駄かと
142:139
21/12/27 19:30:29.63 BHlowg/U.net
あれ、でも他の分岐に行っても保持されるのならどの分岐を抜けてきたかの
判断はどうやってするんだろう?
繰り返しをしてる中ですべての分岐で保持が成功していたら区別が付かない
まぁ正規表現でやらずにコード書けばいいだけだけど
143:デフォルトの名無しさん
21/12/28 01:38:40.34 e4meyx5L.net
高度IT人材、富士通は最大年収3500万円へ
「富士通年収3500万!」日本のIT企業の年収も、高額化してきました
AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ
【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材
来年度から副業解禁 人材多様化へ―大同生命次期社長
副業・兼務の解禁から4年、ロート製薬流で進めるキャリア支援
ロート製薬が副業をいち早く導入した「超人間的」な理由
ロート製薬会長が「副業を受け入れない会社は発展しない」と断言する理由
144:デフォルトの名無しさん
21/12/28 08:15:55.40 2qR0ux8Z.net
富士通は電子カルテがクソ
145:デフォルトの名無しさん
21/12/28 11:45:39.94 6tSOSnH1.net
捕獲したものを手放してnilに戻すメタ文字があればいいのか?
# \2, \3, \4 の中身をnilにするメモリクリア
\mc{2-4} or \mc{2,3,4}
中身をクリア出来るなら任意の文字列の代入も出来る
# \2, \3, \4の中身を書き換え
\m{2=foo,3=bar,4=hoge}
(?{code})が使えない環境では重宝する機能になる
当然名前付きのものも書き換えられるようにするのが望ましい
146:デフォルトの名無しさん
21/12/30 00:46:28.20 Z0Yaemgr.net
>>126
URLリンク(www.perlmonks.org)
これすご、理論屋さんの作った芸術作品て感じ
貪欲の繰り返しがどう動くかを分かってないとこれは書けないし
(*F)の入れ方も無駄がなくて素晴らしい
147:デフォルトの名無しさん
21/12/30
148:19:53:03.05 ID:Z0Yaemgr.net
149:デフォルトの名無しさん
21/12/30 20:19:42.39 Z0Yaemgr.net
そもそもIPを簡単に取り出せないようなデータというのはどんなデータだったんだろ?
普通はIPならIPと分かるようなデータの入れ方をする
非包含オペレータ (absence operator) (実験的)
URLリンク(docs.ruby-lang.org)
>例えば (?~abc) は "", "ab", "aab", "abb", "ccdd" などにはマッチしますが、
>"abc", "aabc", "ccabcdd" などにはマッチしません。
この説明では意味が伝わりにくいな
"例えば ^(?~abc)$ は" に修正したほうがいい
鬼雲は放置気味だけどこの先どうするのかな
150:デフォルトの名無しさん
21/12/30 22:40:15.48 HA6WwjkY.net
>>145
そうなんです
サクラエディタで使えないIPv6の正規表現方法なら見つかったのですが・・・
なので諦めて複数の正規表現で対応することにしました
151:デフォルトの名無しさん
21/12/30 23:19:26.02 Z0Yaemgr.net
>>147
これはperl等でパーサを作って検索すべき案件だろうから
テキストエディタではなかなか厳しいね
正規表現の基本的なことで分からないことがあったらまた聞きに来てね
上の正規表現の猛者たちよりも親切な回答を付けるよw
152:デフォルトの名無しさん
22/01/01 01:28:53.52 h8w5g6J4.net
[あ-うけてめでとおござします]+
153:デフォルトの名無しさん
22/01/01 18:17:24.41 bYLu/xf5.net
^(?~厄)$
154:デフォルトの名無しさん
22/01/01 21:13:00.82 ZbTXyVwF.net
.replace(/謹/g,'新年')
155:デフォルトの名無しさん
22/01/02 00:08:00.18 Ez7RAQeW.net
2022-01-01【ランダムな文字列】
の【ランダムな文字列】にマッチさせるにはどのように書いたら良いですか?
156:デフォルトの名無しさん
22/01/02 00:24:32.24 1LGQCNAT.net
テンプレを読めるようになってから出直そう
157:デフォルトの名無しさん
22/01/02 01:16:44.72 xTWkFa8M.net
Onigmo の非包含オペレータのバグを再現する方法
URLリンク(github.com)
>>152 正規表現エンジンは何?
158:デフォルトの名無しさん
22/01/02 01:27:24.76 4Qt0RmdX.net
(?<=^2022-01-01).++$
159:デフォルトの名無しさん
22/01/02 02:23:07.29 q3p7RZao.net
なんで強欲?
160:デフォルトの名無しさん
22/01/03 03:43:07.67 BhOVhgCg.net
サクラエディタおじさんなのだが
よほど古くなければ検索文字数に上限はほぼない
ただし履歴とウインドウ間共有には259文字の上限がある
再利用にはマクロにしておくべし
あとWindowsダイアログの1行エディットコントロールには文字列幅が32767pxを超えると真っ白になるバグがある
正規表現キーワードは1000文字
161:デフォルトの名無しさん
22/01/03 19:36:44.28 X+IIU15J.net
今時の正規表現エンジンを使えるエディタなら3000文字くらいは許容して欲しい
欲を言えば正規表現をテキストエディタ画面で作ってそのまま実行出来るように
なったらいいな、/x オプションが設定されるのがデフォで・・
Jane用に作った鬼雲用の正規表現は1600文字超だった
URLリンク(github.com)
162:デフォルトの名無しさん
22/01/03 21:53:14.12 Pucsg4jY.net
常用漢字表外漢字を検索する正規表現をお願いします!
163:デフォルトの名無しさん
22/01/03 23:25:26.42 Rgi2CjE6.net
テキストエディタをまた~り語ろう ver.25
URLリンク(pc11.2ch.net)
193 174 sage 2008/02/19(火) 03:19:25 ID:W6zn4Vm/0
K2Editorが検索テキストボックスに20000桁超の文字列入れられるから
正規表現「|」でつないだOR検索するのに便利ってだけなんだけどね
(秀丸はそもそもOR検索で「|」が10個くらいまでしか使えないという制限がある
サクラエディタは検索条件テキストボックスに258桁までしか入力できない)
他にはEmEditorが優秀な部類で検索条件に数千桁までは指定できたんだけど、
20000桁はさすがに無理でしたw
164:デフォルトの名無しさん
22/01/04 16:23:29.29 oLEgCIB5.net
2万文字じゃなくて2万桁か、入力して検索ボタン押したらエディタが凍りそう
こういうのをエディタでやろうとする人はスクリプト書けない人なのかな
165:デフォルトの名無しさん
22/01/04 16:26:30.10 3hJH9p5O.net
変な使い方すんなし
166:デフォルトの名無しさん
22/01/05 02:42:52.49 PfznQmjq.net
emEditorちゃんの新しいアピールポイント発見されたやん
作者さんに伝えたら喜ぶぞお~
167:デフォルトの名無しさん
22/01/05 03:17:14.08 rvz1fckd.net
otbeditをアップデートしたら正規表現が進化しててびっくりしたな
\=A で "選択範囲の先頭にマッチ" みたいな独自のものもあって面白い
ただ正規表現の入力ダイアログは変わってなさそう
複雑な正規表現を使うならperlでやっちゃうから結局は使わないんだけどね
168:デフォルトの名無しさん
22/01/15 15:07:39.96 LSXPKCTg.net
鬼車の更新きた、が>>137の件はそのままだった
作者氏のブログを読んでたらいつの間にか下山事件について調べてたw
この事件があったことは前に国鉄事故一覧を読んでたから知ってたけど
ミステリー要素に興味が無い自分はスルーしてた
169:デフォルトの名無しさん
22/01/15 20:13:16.46 YXcsuWEv.net
5chで化けるキャリア絵文字をNGにしたいんだけど、もっとマシな書き方ある?
&(hearts|#[0-9]{3,6});(?# キャリア絵文字NG)
170:デフォルトの名無しさん
22/01/16 21:51:20.72 9z0xsGVh.net
(^♣^)
171:デフォルトの名無しさん
22/01/17 07:41:03.81 a00LkpSK.net
>>165
kkosさんが5ちゃんねる見てるという情報はないしねえ
ちなみにk.takataさんの方はサクラエディタスレでbregonig.dllのデバッグ進めてたこともあるし
このスレ見てても不思議ではない
172:デフォルトの名無しさん
22/01/17 20:57:45.62 JTE3FsjP.net
>>168
kosako先生もブログのログによると2chをチェックされてたことが
あるようだけど今は見てないようですね
>>137程度のことでgithubに書き込むのは敷居が高いな・・
takata先生のほうはツイッターやメールで簡単に連絡取れるんですけどね
これからonigurumaをいじり倒す予定なので他に何かバグを見つけたら
一緒に報告しようと思います^^;
173:デフォルトの名無しさん
22/01/21 06:38:47.99 sXrjqYWb.net
Rubyの闇
URLリンク(kkos.hatenadiary.org)
174:デフォルトの名無しさん
22/01/21 18:07:28.01 kuE6phYE.net
闇でもなんでもなく松本の狭量さを示す事実だけだろ
175:デフォルトの名無しさん
22/01/21 18:44:15.58 0+co4YWB.net
onigurumaの話題を出すとこうなってしまうんならよそでやるか・・
ここでの書き込みはこれが最後です、スレ汚しすみませんでした
176:170
22/01/21 19:13:35.61 sXrjqYWb.net
>>172
私の方こそすみません
170は書くべきじゃありませんでした
個人的にtoncoさん(ですよね?)の書き込み好きなので
5chでonigurumaやonigmoの検証続けて下さい
177:170
22/01/21 19:16:55.46 sXrjqYWb.net
ちなみにこのツイートかなり気になります
Rubyの正規表現エンジンを鬼雲から鬼車に戻す構想があるのかな?
URLリンク(twitter.com)
P.S.
ツイートは鬼雲(Onigmo)のスペルを間違えています
(deleted an unsolicited ad)
178:デフォルトの名無しさん
22/01/22 01:55:21.54 OtRmDEvF.net
rubyは内部のエンコーディングを固定してないそうだから鬼車系から離れられないんじゃないか
re2はutf-8/iso-8859-1の2択だし
179:デフォルトの名無しさん
22/01/22 18:56:13.90 UcGEJ67s.net
いろいろあるんだな
180:デフォルトの名無しさん
22/01/24 20:07:59.38 nkigtwKI.net
メモ
URLリンク(regex101.com)
URLリンク(rubular.com)
URLリンク(ideone.com)
URLリンク(developer.android.com)
181:デフォルトの名無しさん
22/01/24 23:09:01.61 Kqmt+jMz.net
すみません空行を表すモノは「^\n」以外に何かありますでしょうか?
182:デフォルトの名無しさん
22/01/24 23:16:14.46 6TTx6Dab.net
言葉不足すぎて何も言えない
>>2のテンプレ通り書いて
183:デフォルトの名無しさん
22/01/24 23:35:46.42 9KZ/AsJf.net
^$ とか?
184:デフォルトの名無しさん
22/01/25 00:03:53.36 aASmTB60.net
\n{2,}
(?<=\n)\n+
185:デフォルトの名無しさん
22/01/25 00:05:00.68 FywNzPTU.net
>>179
すみません
●Regular Expressionの使用環境
会社(工場)で使っている親会社の人が作ったソフトに内蔵されているエディタです
特殊な用途で使うもので制作者に問い合わせは出来るけれど聞くところによりますと
Delphi純正の正規表現ライブラリでは「^\n」がヒットしないらしいです
TPerlRegEx という名前らしいので恐らく Perl 準拠らしい、です
「^」や「\n」と他の組み合わせは問題ないです
●検索か置換か?
検索も置換もです
●説明
空行を検索したい
●対象データ
複数行あるテキストデータです
>>180
「^$」は文頭にしかヒットしませんでした
186:デフォルトの名無しさん
22/01/25 00:06:24.26 FywNzPTU.net
>>181
うわ凄っ
(?<=\n)\n+
でヒットしました!
唐突でわちゃくちゃな質問におつきあいありがとうございました
187:デフォルトの名無しさん
22/01/25 00:15:07.84 /DnSxEx4.net
(?m)^\n
188:デフォルトの名無しさん
22/01/25 13:46:33.02 PQbOJgVd.net
解決してなによりだけど
親会社が作った特殊ソフトとか
親会社の担当に聞くべき案件なのでは
189:デフォルトの名無しさん
22/01/29 12:49:12.10 yDE0S1/7.net
JaneStyle
【 正規表現ライブラリ 】 bregonig.dll Ver.1.46 with Oniguruma 5.9.2
検索
競馬 競輪 競艇 競泳
競(?:馬|輪|艇|泳)
競[馬輪艇泳]
この場合 上、式集合 と 下、文字集合 どちらが好ましいでしょうか
190:186
22/01/29 13:01:44.15 yDE0S1/7.net
検索文字が増えていくので処理速度で考えるとどちらが速いでしょうか
191:デフォルトの名無しさん
22/01/29 13:32:54.07 HGXegLzO.net
予想でしかないけどパースは文字集合の方が簡単だろうし動作も文字集合の方が軽い気がする
基本的に出来ることが少ない方が処理は楽だから
まあよほど大量の文書を処理しないと認識できる違いが出るとは思えないけど
192:デフォルトの名無しさん
22/01/29 14:55:24.78 yDE0S1/7.net
>>188 ありがとうございます
194:デフォルトの名無しさん
22/01/31 21:41:49.66 TKYU0FmV.net
どうして[aa][aa][aa]や[aa]b[aa]ab[aa]にはならないのですか
URLリンク(ideone.com)
my $str = 'abab';
$str =~ s/(?<=\Ka)b/[$&]/g;
print ${str}; # [ab][ab]
my $str = 'aaaaaa';
$str =~ s/(?<=\K.)./[$&]/g;
print $str; # [aa]aaaa
my $str = 'aabaaabaa';
$str =~ s/(?<=\Ka)a/[$&]/g;
print $str; # [aa]b[aa]abaa
195:デフォルトの名無しさん
22/02/01 08:22:41.99 1FVHaQ2P.net
>>190
>>1
196:デフォルトの名無しさん
22/02/01 12:52:35.33 xlL1v7Ej.net
\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?<=\K <-- HERE a)b/
197:デフォルトの名無しさん
22/02/01 20:14:34.81 RFI3kyJu.net
>>192
ありがとうございました
URLリンク(perldoc.perl.org)
198:デフォルトの名無しさん
22/02/11 15:34:16.36 wiPjvtyL.net
[<"]{1,2}[^<>"].+[>"]{1,2}
と書いたのですが
"C:\Windows\System32\calc.exe"と"C:\Windows\System32\notepad.exe"
"と"←この部分もヒットしていまいます
この部分をヒットしないようにするにはどうしたらいいですか?
199:デフォルトの名無しさん
22/02/11 15:43:32.09 3fYQCkDW.net
最短マッチで上手くいきそう
200:デフォルトの名無しさん
22/02/11 15:47:22.25 XbmfRAz/.net
>>194
ドットいらない
201:デフォルトの名無しさん
22/02/11 15:50:16.57 iG9n81+f.net
"\w:[^"]++"
202:デフォルトの名無しさん
22/02/11 17:26:42.82 wiPjvtyL.net
>>196
有難うございます
上手く行きました
最短マッチも勉強します
203:デフォルトの名無しさん
22/02/11 18:08:03.21 yV5vo0tT.net
>>197
java以外では最長と強欲の挙動って一緒なのかな?
204:デフォルトの名無しさん
22/02/11 18:24:50.25 FMt4h3Z+.net
>>199
一緒だったらわざわざ別表記を作らないよ
205:デフォルトの名無しさん
22/02/24 15:01:33.70 hcs+VfLS.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
検索
●説明
指定した文字列を含む行と、それ以降の行を削除したいです
↓文字列がDの場合の例
●対象データ
ABCA
BCDAA
CABDA
●希望する結果
ABCA
行をまたぐので可能かはわかりませんが
よろしくお願いします
206:デフォルトの名無しさん
22/02/24 15:56:44.82 aUuEQTy2.net
置換では?
207:デフォルトの名無しさん
22/02/24 16:21:25.53 XVFOP1rX.net
ヘルプに書いてるでしょ
URLリンク(sakura-editor.github.io)
> (mオプションが付いていますが、改行をまたいだ検索はできません。)
可能にする方法はあるようだが今も使えるのかは知らない
URLリンク(sakura.qp.land.to)
素直に複数行検索置換出来るツールやエディタ使った方が良い
208:デフォルトの名無しさん
22/02/24 16:39:23.62 hcs+VfLS.net
>>203
失礼しました
これまでたまの置換えでしか使わなかったのでヘルプ読んでませんでした
また、別な無料のエディタで可能な正規表現があれば
セットで教えていただきたいです
ありがとうございました!
209:デフォルトの名無しさん
22/02/24 16:57:42.07 XVFOP1rX.net
Mery
^(?=.*D)(.*\n)++
210:デフォルトの名無しさん
22/02/24 18:04:56.22 hcs+VfLS.net
>>205
希望通りにできました。エディタまで教えていただき本当にありがとうございます!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
211:デフォルトの名無しさん
22/03/05 11:04:51.46 UMjr+RM8.net
URLリンク(github.com)
212:デフォルトの名無しさん
22/03/05 13:30:05.01 ST2bI6pB.net
よろしくおねがいします。
●Regular Expressionの使用環境
auto hot key
●検索か置換か?
置換
●説明
日本語URLを除去したい
%..* で一致するがPCRE書式化(AHK文法?)が解らず。。。
●対象データ
%00%00%00%00%00%00
00は数字2桁
213:デフォルトの名無しさん
22/03/05 14:39:44.43 CfflkLyE.net
(%\d\d)++
214:デフォルトの名無しさん
22/03/05 15:55:58.31 ST2bI6pB.net
>>209
早速ありがとうございます!
wiki記載の意味がやっと理解できました。
下記エラーになりました。
すいません対象データ誤りで英数字2桁のため\w\wにしてもだめでした。
Line Text: \d\d
Error: The leftmost character above is illegal in an expression.
※\w\wも同じ。
構文的には正しいようです。
URLリンク(i.imgur.com)
215:デフォルトの名無しさん
22/03/05 15:58:19.76 auOTeG9V.net
あれ、\dでいいの?文字コードだから16進じゃない?
216:デフォルトの名無しさん
22/03/05 16:23:02.27 vjAKKjP5.net
(?:%[:xdigit:]{2})+
では?
217:デフォルトの名無しさん
22/03/05 16:33:42.80 vjAKKjP5.net
(?:%[[:xdigit:]]{2})+
だった
218:デフォルトの名無しさん
22/03/05 18:13:24.65 ST2bI6pB.net
>>213
ありがとうございます上手くいきました!
何でそうなるのか.. wikiにらめっこしてみます。
が、正規表現テストツール上では上手くマッチしますが、MsgBoxで出力すると #_=_ がくっついてきます。スレチならすいません。
>>211
URLエンコードって16進数だったんですね。
219:デフォルトの名無しさん
22/03/06 00:13:11.29 6dwIIS19.net
wikiってどこのこと?
220:デフォルトの名無しさん
22/03/06 16:28:44.42 ez4sjEWa.net
>>215
URLリンク(sites.google.com)
221:デフォルトの名無しさん
22/03/13 17:17:27.89 dODqeNlh.net
URLリンク(github.com)
222:デフォルトの名無しさん
22/03/19 23:41:27.62 ur7rhOwp.net
URLリンク(www.kt.rim.or.jp)
>某巨大掲示板のとあるスレッドの情報によれば、 非包含オペレーターが
>期待通りに動かないパターンがあるようです。
おぬし、さてはここを見ておるな? azure
>>217
故意にこれが出来るならSEO対策としてライバル企業をやっつけられるな
企業間でそんな話が出てないということは出来ないということではないだろうか
223:デフォルトの名無しさん
22/03/20 07:35:08.60 AfbYOGC9.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
ある文字列Aを含む行のうち、ある文字列Bを含まない行を
すべて削除したいです
●対象データ(文字列Aを含む行のうち、Bを含まない行を削除。囲み数字はデータではなく単なる通し番号で入れています)
①ABCA
②FCAA
③CABA
④DBBC
⑤AFFC
⑥BABF
⑦FDFC
●希望する結果(Aが有って、Bが無い②⑤行を削除しました)
①ABCA
③CABA
④DBBC
⑥BABF
⑦FDFC
よろしくお願いいたします。
224:デフォルトの名無しさん
22/03/20 07:55:09.42 UyeAjpj2.net
^(?=.*A)(?!.*B)[\s\S]*
225:デフォルトの名無しさん
22/03/20 08:51:18.12 AfbYOGC9.net
>>220
いつも素早い回答をありがとうございます!うまくいきました!誠に感謝です。ありがとうございました!
226:デフォルトの名無しさん
22/03/20 19:15:12.05 ZHfPfLkc.net
>>221
219より一つ前にあなたがした質問はどれ?
227:デフォルトの名無しさん
22/03/22 18:15:19.98 CHL1FHKG.net
>>222
お返事が遅くなりすみません。このスレでは201のみです。
また今後もよろしくお願いします!
228:デフォルトの名無しさん
22/04/05 13:22:00.18 jmydyZMd.net
非包含オペレータのバグの詳細
URLリンク(github.com)
229:デフォルトの名無しさん
22/04/09 11:11:19.33 RvdBAddV.net
●正規表現環境: VS Code
●検索か置換か: 置換
●対象データ:24時間表記の時間
●説明:
24時間表記を12時間表記にしたい。
●例:
23:59:30 → 11:59:30
正規表現で可能ですか?
230:デフォルトの名無しさん
22/04/09 12:41:52.96 CVydPDGM.net
>>225
無理じゃね?
簡単なスクリプトを書いたほうが早い
231:デフォルトの名無しさん
22/04/09 12:49:55.79 FmMbp+0V.net
13:→1:
14:→2:
…
24:→12:
分と秒は正規表現でキャプチャ
みたいに高々12回置換すればええやん?
そういう意味じゃないんか
232:デフォルトの名無しさん
22/04/09 12:59:17.52 OC1bdbLm.net
愚直に12回置換すれば出来る
12(?=(?::[0-5]\d){2})
00
13(?=(?::[0-5]\d){2})
01
…
23(?=:[0-5]\d:(?:[0-5]\d|60))
11
233:デフォルトの名無しさん
22/04/09 14:50:47.61 CVydPDGM.net
a.m.やp.m.の情報は消えても大丈夫なのかな?
234:デフォルトの名無しさん
22/04/09 14:56:25.02 RvdBAddV.net
amやpmは無くてもokです
235:デフォルトの名無しさん
22/04/13 22:16:00.64 pxLJgBKP.net
URLリンク(github.com)
236:デフォルトの名無しさん
22/04/15 16:20:16.62 M7wVtHzF.net
Apacheのmod_rewrite(Perl互換)でルート直下の特定のディレクトリとその配下のみリダイレクトしない条件にヒットする正規表現を探しています
①/.well-known
②/.well-known/
③/.well-known/ランダムな文字列
この3つにヒットしてくれればいいのですが
・ルート直下なので行頭指定
・スラッシュのない方の.well-knownは行末を指定(完全一致)
・スラッシュのある方の.well-known/は配下のディレクトリへのアクセスも想定して行末を指定しない(前方一致)
を一行に収めようと考えた結果
^/\.well-known(/|$)
が思い浮かんだので使ってみたらなんとなく動いてるんですが
メタ文字の|って比較対象が行末の$だけでも機能するものなのでしょうか
完全一致+前方一致の書き方のお作法みたいなのがあればだれか教えてください…
237:デフォルトの名無しさん
22/04/15 21:37:03.46 GEApyL4S.net
それでOK。 ケチを付けるなら (?:/|$) にすれば無駄なキャプチャを防げる。
先読みを理解してるなら (?=/|$) でもOK。
238:デフォルトの名無しさん
22/04/16 06:02:27.62 mQZGE0o5.net
正規表現を使ってモンスターを討伐していくゲーム「Regex Hunting」をプレイしてみた - GIGAZINE
URLリンク(gigazine.net)
239:デフォルトの名無しさん
22/04/16 07:11:08.64 9DJ1ctMv.net
>>233
ありがとうございます
今は(?:/|$)にして先読みも勉強してみます
240:デフォルトの名無しさん
22/04/20 03:44:08.18 KwUP8MZL.net
正規表現道場スレに書きましたが過疎スレだったようでこちらで質問させていただきます
スマホのブラウザ(Berry browser)での検索結果にでたYouTubeのリンクを
NEWPIPEで開くようにする正規表現をおしえていただけませんか?
詳しく言語はなにかわかりません
241:デフォルトの名無しさん
22/04/20 03:46:48.26 hF4awL06.net
>>236
あっちで見せたスクショも見せてあげて
242:デフォルトの名無しさん
22/04/20 04:01:59.26 KwUP8MZL.net
URLリンク(i.imgur.com)
243:デフォルトの名無しさん
22/04/20 07:25:55.71 YedSEyAo.net
>>236
お前NewPipeスレでスレチだ言われても居座って、最後移動する時にすら謝罪もせずに投げっ放しじゃん
もう少しネットマナー守りなよ
244:デフォルトの名無しさん
22/04/20 13:23:33.24 0zdB9CsP.net
>>239
粘着警察
245:デフォルトの名無しさん
22/04/20 13:29:26.67 U0AnfaoX.net
.*YouTube.*
246:デフォルトの名無しさん
22/04/24 11:37:18.90 HhXo0urf.net
●Regular Expressionの使用環境
秀丸エディタ
●検索か置換か?
検索
●説明
台詞の行の後は1行改行を置いて、また台詞の行になるように整形したいです
もしも「からはじまる行が2行連続している場合、そこにヒットするような検索方法があるなら、
何卒、ご教示の程よろしくお願いいたします。
●対象データ
「ダミーテキストAダミーテキストAダミーテキストA」
「ダミーテキストBダミーテキストBダミーテキストB」
「ダミーテキストCダミーテキストCダミーテキストC」
「ダミーテキストDダミーテキストDダミーテキストD」
●希望する結果
「ダミーテキストAダミーテキストAダミーテキストA」
「ダミーテキストBダミーテキストBダミーテキストB」
「ダミーテキストCダミーテキストCダミーテキストC」
「ダミーテキストDダミーテキストDダミーテキストD」
247:デフォルトの名無しさん
22/04/24 13:45:54.53 rcB2xidb.net
>>242
\n+ を \n\n に置換すればいいんじゃね?
248:デフォルトの名無しさん
22/04/24 14:27:40.33 +3jFx4NA.net
したい事が検索と書いてあるのに、整形したいですってどういう事?
整形したいって事は置換なの?
249:デフォルトの名無しさん
22/04/24 15:00:10.62 K7LKRW48.net
整形したい!痴漢なんです
イケメンならこんな事しなくて済みます
250:デフォルトの名無しさん
22/04/24 15:27:14.57 HHIBSCEK.net
>>242
」¥n「 → 」¥n¥n「
とか
(.)¥n「 → $1¥n¥n「
とか
251:デフォルトの名無しさん
22/04/24 15:30:33.03 ioskjRP6.net
> 検索と書いてあるのに、整形したいですってどういう事?
秀丸から察しろよw
池沼でしょ
」\n「
」\n\n「
252:デフォルトの名無しさん
22/05/01 14:50:51.02 GoET9IZ/.net
CSVファイルのセパレータ以外にマッチさせる正規表現が分かればご教示ください
ダブルクォートの中のカンマはセパレータではないという条件が難しく難儀しています
253:デフォルトの名無しさん
22/05/01 15:35:29.51 Rd1MW222.net
>>248
csv 正規表現 でググれ
254:デフォルトの名無しさん
22/05/02 15:41:45.47 3wkltjCW.net
>>2のテンプレで環境や対象データ、希望結果のサンプルを書いてよ
255:デフォルトの名無しさん
22/05/03 04:52:31 UnZpzFGu.net
"あ,い
う'え""お"
これでも、1列しかない。
最初・最後のダブルクォーテーションで、1つの列内・要素を表す
その要素内では、カンマ・改行・シングルクォーテーション・ダブルクォーテーションも使える。
ただし、ダブルクォーテーションは2つ連続させて、1つのダブルクォーテーションと解釈される
だから、このダブルクォーテーションの規則が難しい。
例えば、ダブルクォーテーションに番号を振ると、1-23-45-6
連続したダブルクォーテーションを排除して、1-6 の形で、1つの要素を表す。
つまり、最後のダブルクォーテーションは偶数番目になる
もし、奇数番目で終わっていたら、形式エラー
256:デフォルトの名無しさん
22/05/03 12:12:48.00 aiGUnYt7.net
("[^"]*")+|[^,"\r\n]+|(?<=,)|^(?=,)
URLリンク(regex101.com)
257:デフォルトの名無しさん
22/05/03 14:14:16.35 t3Dpq+T6.net
(?=,|$)
258:デフォルトの名無しさん
22/05/13 22:38:19.25 8kGCIaIA.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置き換え
●説明
タブ区切りcsvファイルの列の順番を入れ替えたい
●対象データ
1\t2\t3\t・・・\t30
※実際は各フィールドは数字だけではなく、長さも一定ではありません。
フィールド数は30で固定です。
●希望する結果・・を出すために、
^(.*?\t)(.*?\t)・・・(.*)
$3,$8,$1・・・
のように書いて、一旦用は足りましたが
これをもっとスマートに書く方法はありますでしょうか。
よろしくお願いいたします。
259:デフォルトの名無しさん
22/05/14 01:45:41 rmaMAnUs.net
$30を別の場所に持ってくると右隣りとくっついてしまうな
260:デフォルトの名無しさん
22/05/14 05:36:59.01 NJOQ17Ts.net
テンプレ使っているようでテンプレ無視して実例挙げず
タブ区切りのはずが何故かカンマ+タブの区切りになっているがその説明も無し
261:デフォルトの名無しさん
22/05/14 08:03:49.09 qR2dE/b7.net
本当に タブ+カンマ にしたいとしても俺なら
^(.*?)\t(.*?)\t・・・(.*)$
$3\t,$8\t,$1\t・・・
って書くかな
262:デフォルトの名無しさん
22/05/14 09:56:07.44 /Fl6kBO1.net
俺が作るなら [^\t]* を使って誤爆の可能性を潰しておく
列が31以上ある異常データのときに置換しなくする
263:デフォルトの名無しさん
22/05/14 10:21:31.73 bJIgpLv6.net
処理対象ファイルが数十個あるとかなら別だけど、表計算ソフトや対応エディタでサクっと入れ替えた方が早そう
264:デフォルトの名無しさん
22/05/14 11:56:38.01 /Fl6kBO1.net
そういやそうだね、csvなんだしw
>>256
テンプレ自体が糞質問製造機になってるからテンプレいらね
俺は今回の質問に不備はないと思っている
265:デフォルトの名無しさん
22/05/16 18:46:22.01 nBhW9usr.net
探している正規表現の学習サイトがあります。
ネットスラング、小説などの蘊蓄を題材にした問題が置いてあるサイトです。
AAが問題の解説を行なっていた記憶があります
UIはシンプルながら、メタ文字から始まり、後方参照などの発展的な部分、総括したチャレンジ問題など結構ボリュームがある問題集でした。
久しぶりに見にいきたかったのですが、どうにも見つからず、
どなたかご存知でしたら教えていただけると幸いです。
よろしくお願いします。
266:デフォルトの名無しさん
22/05/24 04:21:55.25 SL15aOsO.net
質問させてください。
荒らし対策に「読点2回」を指定するNG表現を作ってみたのですが、一応機能しました
(.*\、.*\n*){2}
上記はもっと簡略化できるでしょうか?
267:デフォルトの名無しさん
22/05/24 04:27:32.12 7Wh7VSQ0.net
、.*?、
268:デフォルトの名無しさん
22/05/24 04:43:45.06 SL15aOsO.net
>>263
即答ありがとうございます
(10文字以上、){2}
のように「10文字以上、」が2回以上あったらNGというプログラムも教えてくれますか?
269:デフォルトの名無しさん
22/05/24 05:20:15.74 SL15aOsO.net
すみません、ありがとうございました。
270:デフォルトの名無しさん
22/05/25 21:16:43.73 rVRUpzpa.net
自分が書いた正規表現を半年後くらいに見たら
何の処理なのか思い出せない。
正規表現って便利だが、そう言う点が唯一のデメリットだよな。
271:デフォルトの名無しさん
22/05/25 21:33:08.27 JiQQrvQ9.net
>>264
(10文字以上、){2,}
272:デフォルトの名無しさん
22/05/25 22:10:02.21 SBYC3EV0.net
(?#何の処理)
273:デフォルトの名無しさん
22/05/26 10:08:16.60 Nn08GFXz.net
●Regular Expressionの使用環境
PowerShell 7.2.4
●検索か置換か?
置換(-replaceもしくは[regex]::Replace)
もしくは抽出(-match)
●説明
ドメインからサブドメインを取り除いた値が欲しい
●対象データ
www.example.com
hoge.www.example.com
hoge.hoge.www.example.com
●希望する結果
example.com
example.com
example.com
お願いします
274:デフォルトの名無しさん
22/05/26 10:11:53.48 Nn08GFXz.net
>>269
すいません、これだと「example.com$でいいだろ」になりますね
バラバラなURL、つまり
●対象データ
www.example.com
hoge.www.test.com
hoge.hoge.www.foo.com
●希望する結果
example.com
test.com
foo.com
でお願いします…
275:デフォルトの名無しさん
22/05/26 10:34:55.49 6qaNDFBW.net
powershellでの書き方は分からんが
[^.]++\.com$
276:デフォルトの名無しさん
22/05/26 10:51:21.71 Ax+O2qu3.net
>>271
それで得られるの.comドメインだけじゃね
277:デフォルトの名無しさん
22/05/26 11:26:16.23 JFz3AkL/.net
(?m:((?:[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*)\.[a-zA-Z]{2,})$)
278:デフォルトの名無しさん
22/05/26 13:28:50.78 DqYj7elt.net
[a-zA-Z0-9]
って、何かもっと短いパターンに置き換えられないのかな?
279:デフォルトの名無しさん
22/05/26 13:51:27.22 Nn08GFXz.net
>>272
ごめんなさい。私がちゃんと.com以外の例を出してませんでした。
>>273
ありがとうございます。
[regex]::Matchesの方で抽出できました。
もしよければ、今後のためにどういう意味の正規表現になってるかお教えいただけませんか
行末→$)
エスケープして.(ドット)+2文字以上の文字→\.[a-zA-Z]{2,})
までは分かるのですが、
(?:[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*)
と
(?m:
がよくわかりません…
280:デフォルトの名無しさん
22/05/26 14:03:59.49 Ax+O2qu3.net
>>274
/S
281:デフォルトの名無しさん
22/05/26 14:08:45.47 gYa8SY15.net
>>274
処理系にもよるけど\dと[0-9]は同等でないこともある(漢数字にもマッチする処理系や環境がある)
[:alpha:]は使えない処理系もある
>>275
ドメイン名の制約を正規化
mは行単位処理指定(一般的には不要)
282:デフォルトの名無しさん
22/05/26 14:26:21.96 SI03/myz.net
結局太古からの文字クラスが役に立つよな
283:デフォルトの名無しさん
22/05/26 14:57:41 0Pd9G99m.net
5ch.net
2345.com
284:デフォルトの名無しさん
22/05/26 19:34:14 DerQuI+6.net
8823
285:デフォルトの名無しさん
22/06/15 16:12:07.21 D17rKkfp.net
Pythonで、下記のような仕組みを作りたいと思っています。
1 テキストを入力する。
2 あらかじめ用意してある複数の正規表現のパターンでテキストを検索し、
それぞれのパターンにマッチする部分のテキストを色分けする。
3 それぞれの色ごとに、別々の処理をする。
こう言う表示をするためのフロントエンドというか、ライブラリというか、
そう言うものはないでしょうか。
例えば、VBAなら、エクセルやWordの文字プロパティを操作すればできると思うのですが、
そう言うもののPython版というか…
286:デフォルトの名無しさん
22/06/15 17:05:28.57 GqhFDJ5g.net
>>281
スレチ
287:デフォルトの名無しさん
22/06/15 20:56:26.63 bRSTMa0S.net
こういうの不思議なんだけど、
仕組みを作りたいと思っていて、ライブラリやフレームワークすら選べてないのに、
なんで使用言語は決まってるんだろうか
288:デフォルトの名無しさん
22/06/15 21:12:53.05 74xVOU49.net
そのライブラリはlispとprologとVHDLしかありませんって言われたら困るし
289:デフォルトの名無しさん
22/06/15 21:17:39.12 bRSTMa0S.net
そしたらその言語選ぶだけじゃないかな
290:デフォルトの名無しさん
22/06/16 02:58:48.52 5RJuUFJv.net
JSで作ってブラウザ上で動かすのがよさそう
291:デフォルトの名無しさん
22/06/24 15:59:53.62 P24pDyi3.net
●Regular Expressionの使用環境
python3
●検索か置換か?
検索
●説明
START~次のSTARTの直前までをマッチングさせたい
START含む行から文字列足して行けば同じ事は出来るんですが正規表現ではどのように書くのか分からないのでお願いします
●対象データ
START 1: abcd
hoge
fuga
START 2: efgh
hoge hoge
fuga fuga
piyo piyo
●希望する結果
START 1: abcd\nhoge\nfuga
292:デフォルトの名無しさん
22/06/24 16:36:46.31 ECcLc/fl.net
>>287
START(?:(?!START)[\S\s])*
293:デフォルトの名無しさん
22/06/24 16:39:49.07 P24pDyi3.net
>>288
早速の回答ありがとうございます
希望した結果が得れました
294:デフォルトの名無しさん
22/06/24 18:26:54.64 0z9KCe6G.net
template<>引数にはclassでない定数リテラルを指定できるのでtypenameのほうが名称としてしっくりくる
295:デフォルトの名無しさん
22/06/25 08:38:53.00 hlZoB8IO.net
Onigmoの非包含オペレータのバグFixが来た
Fix absence operator #163
URLリンク(github.com)
こういうのをサラっと直してしまう人はカッコイイね、nomotoさんありがとう!
296:デフォルトの名無しさん
22/06/25 10:59:37.90 23CjKpU2.net
>>290
スレリンク(tech板:294番)-295
297:デフォルトの名無しさん
22/06/28 22:14:32.48 r8H2D3+U.net
>>291
> n("(?~|abc)", "abc") # ???
> x2("(?~abc|)", "abc", 0, 1) # ???
けんちゃん最初から気付いてるし
298:デフォルトの名無しさん
22/06/30 19:21:01 EErfRwVa.net
●Regular Expressionの使用環境
python3
●検索か置換か?
検索
●説明
ErrorもしくはwarnもしくはInfoから始まり(CODE-xxx)で終わる最短の文字列を抜き出したいんですが
(Error|Warn|info):.*?\(\w+-\d+\)のように最短マッチを使っても1番最初のErrorから最後の(CODE-xxx)までが
マッチしてしまいます
●対象データ
Error: hoge
hoge
Warn: fuga
fuga
fuga
Info: hoge
fuga fuga (CODE-003)
●希望する結果
Info: hoge\n fuga fuga (CODE-003)
299:デフォルトの名無しさん
22/06/30 19:55:03.39 5rlmwso+.net
^(?:Error|Warn|Info)(?~^Error|^Warn|^Info)\(CODE-\d++\)
300:デフォルトの名無しさん
22/06/30 20:03:45.67 VljocFtJ.net
>>294
msg_type_re = r"(?:(?:Warn|Info|Error):)"
print(re.findall(rf"{msg_type_re}(?:(?!{msg_type_re}).)*?\(CODE-\d+\)", s, flags=re.S))
301:デフォルトの名無しさん
22/06/30 20:43:19.23 WhOCvrbe.net
^(?:Error|Warn|Info):.*(?:\n\ \ .*)*?\(CODE-\d+\)
URLリンク(regex101.com)
302:デフォルトの名無しさん
22/07/01 08:10:56.97 FKzEqydA.net
秋葉原店
専門店
住所
〒101-0021 東京都千代田区外神田4丁目3-3
↑の文字列を、置換で、
「秋葉原店,東京都千代田区外神田4丁目3-3」
と成形したいです。
思うに、
検索に、「店~~~~~~東京都」
置換に、「,」
とすれば出来そうですが、
「~~~~~~」には何を入れればよいでしょうか?
303:298
22/07/01 08:20:24.06 FKzEqydA.net
ようは、
「店」と「東京都」の間にあれば、改行を含み、どんな文字列が何個はいろうが、「,」に変えたいのです。
よろしくお願いします。
304:デフォルトの名無しさん
22/07/01 08:32:58.06 fIXdHuhM.net
テンプレガン無視するな
ここはお前の為の便利屋じゃねぇよ
305:298様専用の便利屋
22/07/01 08:56:54 6Nj9t6DP.net
環境を言わない質問にはオーソドックスな正規表現で答えれば良いと思う
検索
(店)[\s\S]*(東京都)
置換
$1,$2
306:298
22/07/01 17:16:41.56 FKzEqydA.net
>>300-301
すみません。 環境はwzエディター10 64bitです。
で、
(店)[\s\S]*(東京都)
これではダメでした。
307:デフォルトの名無しさん
22/07/01 17:18:10.65 wWlIpSvA.net
意地でもテンプレは使わない
308:デフォルトの名無しさん
22/07/01 17:27:00.65 iqig0nNh.net
スルーされにくいテンプレだから
スルーされてもいいんでしょう
309:298
22/07/01 17:28:06.12 FKzEqydA.net
>>301
教えてくれてありがとうございます。
で、
wzの置換のタブを見ると、「\を文字として検索」と書いてあってそこにチェックが入っていて、そのチェックは外せません。
310:298
22/07/01 17:33:49.42 FKzEqydA.net
>>303-304
すみません。 テンプレで質問すると、↓になります。
●Regular Expressionの使用環境
wzエディター10 64bit
●検索か置換か?
置換
●対象データ
秋葉原店
専門店
住所
〒101-0021 東京都千代田区外神田4丁目3-3
●希望する結果
秋葉原店,東京都千代田区外神田4丁目3-3
311:デフォルトの名無しさん
22/07/01 17:34:03.71 C/EjaQqR.net
別のエディタなりsed使え
312:デフォルトの名無しさん
22/07/01 17:48:08.39 iqig0nNh.net
>>306
Notepad++、Meryでは以下でいけた
(.+店)[\s\S]*〒\d{3}-\d{0,4}\s(.+)$
$1,$2
313:298
22/07/01 17:51:33.51 FKzEqydA.net
314: rel="noopener noreferrer" target="_blank" class="reply_link">>>308 ありがとうございます。しかしダメでした。
315:298
22/07/01 17:53:57.09 FKzEqydA.net
しかし、
(.+店)[\s\S]*
ここまで削ると食いついてきます。
316:デフォルトの名無しさん
22/07/01 17:58:53.83 Dqsnfi22.net
複数行な時点で環境限られるよね
317:298
22/07/01 17:59:18.72 FKzEqydA.net
ちなみに、Notepad++、Meryどちらも無料ですが、インストールするとするとどちらがよいでしょうか?