19/09/16 22:25:47.75 enU8we0d.net
スルーされにくい質問のテンプレと例
●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
※ ^ はアンダーラインだそうな ^^;
3:デフォルトの名無しさん
19/09/16 22:45:50.99 UVYTIEdn.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リンク(www.geocities.jp)
鬼雲
URLリンク(github.com)
Boost.Regex 1.45.0 (日本語訳)
URLリンク(alpha.sourceforge.jp)
秀丸: 複数行にまたがる検索について
URLリンク(homepage2.nifty.com)
サクラエディタ: 改行
URLリンク(d.hatena.ne.jp)
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
4:デフォルトの名無しさん
19/09/17 01:53:27.68 JrU+31ml.net
正規表現技術入門
URLリンク(gihyo.jp)
↑の著者の一人であり Onigmo の作者でもあるtakata先生のツイ
URLリンク(twitter.com)
(deleted an unsolicited ad)
5:デフォルトの名無しさん
19/09/17 07:00:40.77 Au9Vzrnr.net
>>1-2
乙
6:デフォルトの名無しさん
19/09/21 18:08:57.67 oqO8j0PL.net
●Regular Expressionの使用環境
サクラエディタ bregoning.dll ver 3.06という記載があります
●検索か置換か?
置換
●説明
うしろに数字を付けたい。
あ
というのを
/(^.*)/$1/ で置き換えると
あ
になります(変わらない)。
これを、あ→あ00にするために
/(^.*)/$100/ とはできません。
$1等の直後に、数字を付け足すためにはどのように
表現したらよいか教えてください。
元の行の末尾に付け足すとは限らないので、
$1(実際はもっと多いのですが・・)の直後に数字を付け足す方法をお教えください。
7:デフォルトの名無しさん
19/09/21 19:27:26.83 3YukOVDp.net
>>6
/(^.*)/${1}00/
URLリンク(sakura-editor.github.io)
8:デフォルトの名無しさん
19/09/21 20:16:26.14 oqO8j0PL.net
>>7
ありがとうございます。
ヘルプを見るという基本がなってませんでした
もうしわけありません。
9:デフォルトの名無しさん
19/10/03 17:59:43.15 WLIOnQPh.net
正規表現クロスワードパズル。めっちゃおもろいww
URLリンク(regexcrossword.com)
10:デフォルトの名無しさん
19/10/03 22:01:07.23 ArP3YJIm.net
解き方がわかんねぇ・・・
URLリンク(regexcrossword.com)
[^SPEAK]+
HE|LL|O+
が交わるマスがなんで、Hになるんだ
11:デフォルトの名無しさん
19/10/03 22:18:27.45 gZNTfFgd.net
クロスワードの基本ルールと同様に各マス1文字だが、通常と異なり各ラインが単語になるとは限らない
縦のラインを横ラインをそれぞれ検索対象のテキストと見做して両方がマッチすればOK
ちなみに1回で1ライン全てにマッチする必要は無くて複数回検索して全マスにマッチする形でも良いみたい
12:デフォルトの名無しさん
19/10/03 22:25:40.75 TCa0Rrk0.net
>>10
まず
EP|IP|EF
の列を埋めてみよう。
13:デフォルトの名無しさん
19/10/03 22:54:32.85 ArP3YJIm.net
>>11
>>12
ありがと。わかったわ。
>縦のラインを横ラインをそれぞれ検索対象のテキストと見做して両方がマッチすればOK
クロスワードって考え方がスポーンと抜けてた。
枠外にある正規表現を、「縦のヒント」「横のヒント」としてみなすわけね。
for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;
do echo $i | egrep "縦条件" | egrep "横条件" #縦横逆も可
done;
的な考え方をしてたわ・・・
14:デフォルトの名無しさん
19/10/04 23:39:05.24 FCfJ1C/v.net
全制覇した。疲れた。本来はもっとのんびり楽しむものだよな。
15:デフォルトの名無しさん
19/10/05 09:26:56.80 oVPf95FK.net
すげえ!高難易度のやつ歯が立たないわ
16:デフォルトの名無しさん
19/10/05 16:01:21.83 8eaxbCO5.net
URLリンク(regexcrossword.com)
これとか解けるのは人間ではないと思うわ
17:デフォルトの名無しさん
19/10/05 16:35:39.41 +ss/CUcr.net
アカウント持ってないから login はできないけど
自分が解いた結果はまだ見られるな。
クッキーを削除したら見られなくなるんだろうか。
18:デフォルトの名無しさん
19/10/05 16:44:21.25 0WeqN8Y0.net
>>16
なんじゃこりゃwww
本末転倒だけどこれ数独ソルバーみたいにコンピューターに解かせられんの?
19:デフォルトの名無しさん
19/10/05 23:37:56.24 rOar3xCR.net
テキストエディタで試したら全27ラインマッチする状態になってるのに正解にならんなあ
20:デフォルトの名無しさん
19/10/06 00:08:45.90 IBgflZCa.net
どうもブラウザのせいだったようで、同じ内容を普段使ってないChromeで試したら正解扱いになった、よかった
作った人は凄いけど、解くのは1個1個できるところから埋め、条件を少しずつ絞りこんで行けば案外見た目ほど難しくはない
正規表現の可変長の書式の影響でクロスワードよりピクロスを解く感覚に似てる気がするのでその辺やってた人はちょっと有利かも
あと記憶力に余程の自身がなければ、ちょっと大きめに印刷して各マスに細かい条件を書きながらやったら大分楽になると思う
21:デフォルトの名無しさん
19/10/06 12:02:16.89 ONMi4OJn.net
●Regular Expressionの使用環境
※テキスト(csv)を成型するという目的なので、なんでもいいです。
フリー(ネットからDL可能)なものであれば環境を作ります。
●検索か置換か?
置換
●説明
csvファイルの第4フィールドに説明文的なものが入ってます。
ここに半角カンマが紛れています。これを全角文字(、)に置き換えたい。
第4フィールドにいくつカンマがあるかは不定です。(0の場合もあれば、2個、3個、場合によっては10個、それ以上など)
第4フィールド以外は種類は多いのですが特定の文字が入ります。また第4フィールド以外はカンマは入っていません。
各行のフィールド数は固定です。(実際は20フィールドあるのですが、省略のため5フィールドにしてます)
●対象データ
Field1,Field2,Field3,ここは説明文,Field5
Field1,Field2,Field3,説明文です,Field5
Field1,Field2,Field3,ここは説明文,ですよ,Field5
Field1,Field2,Field3,説明してる,フィールドですよ,Field5
●希望する結果
Field1,Field2,Field3,ここは説明文,Field5
Field1,Field2,Field3,説明文です,Field5
Field1,Field2,Field3,ここは説明文、ですよ,Field5
Field1,Field2,Field3,説明してる、フィールドですよ,Field5
よろしくお願いいたします。
22:デフォルトの名無しさん
19/10/06 13:19:25.82 MVlRtd/O.net
3つ目の,以降から,field5までの間をキャプチャ�
23:ナ良さそう。
24:デフォルトの名無しさん
19/10/06 21:18:49.15 QazjZrDG.net
>>21
perl -ne '($a,$b,$c)=m/^((?:[^,]+,){3})(.*[^,])((?:,[^,\n]+){1})$/; $b=~s/,/、/g; print "$a$b$c\n"' input.csv
先頭の三つはカンマの数を数えて取り出し
^((?:[^,]+,){3})
フィールド数は固定とのことなので末尾側もカンマの数で取り出せる
((?:,[^,\n]+){1})$
その間が置換対象
(.*[^,])
ということで数字(3 と 1)を調整すれば実際のデータにも適用できると思います
25:デフォルトの名無しさん
19/10/06 21:30:20.48 QazjZrDG.net
>>23
Python版
URLリンク(ideone.com)
26:デフォルトの名無しさん
19/10/07 01:52:14.06 iyJYb3kL.net
質問を読んで直ぐにこれを書けるのなら速いけど
もし自分だったらあれをこうしてこれをこうしてと考えて試してる
間にテキストエディタとエクセルを行ったり来たりしながら
タブの挿入と置換と削除を繰り返した方が速いところが
悩ましいw
27:デフォルトの名無しさん
19/10/07 03:37:15.45 21LgfgEW.net
Ruby で、下のコードを、script.rb に書いて、
入力ファイル名を、input.csv とすると、
端末で、ruby script.rb input.csv と入力する。
つまり、ruby スクリプトファイル名 入力ファイル名
require 'csv'
# 引数はファイル名
CSV.filter( File.open( ARGV[ 0 ] ) ) do |row| # 1行ずつ処理する
row[ 3 ] = row[ 3 ].tr( ",", "、" ) # 列4
end
28:26
19/10/07 04:17:44.92 21LgfgEW.net
>>26
修正
tr ではなく、tr! で、直接レシーバー(文字列)を変更できる
>row[ 3 ] = row[ 3 ].tr( ",", "、" ) # 列4
row[ 3 ].tr!( ",", "、" ) # 列4
29:デフォルトの名無しさん
19/10/07 08:59:18.56 fodStNL1.net
それ splice でできるんじゃね? と思ったのでやってみた。
perl -nF, -e 'splice( @F,3,0,join("、",splice( @F,3,@F-5+1))); print( join(",",@F));'
30:あ
19/10/07 21:08:31.31 cbxlkLVD.net
>>26
カンマでカラム分割してるからrow[3]にはカンマが含まれないよ
ARGF.each do |line|
line.match(/((?:.+?,){3})(.+)((?:,.+){1})/) do |match|
puts match[1] + match[2].gsub(",", "、") + match[3]
end
end
こういうのって力技で変換するよりも
CSV生成側でクウォートし直したほうがいいよね
31:デフォルトの名無しさん
19/10/07 22:07:48.83 fodStNL1.net
手間をかけたくないなら、そんなフィールドは末尾に置くのが良い。
そうしておけば何を書こうと邪魔にならない。
いつかは手作業の限界を感じるかもしれないが、それを遅らせることはできる。
32:デフォルトの名無しさん
19/10/07 23:06:48.69 gEYFs1Cq.net
AIDS治療みたいなもんか
33:26
19/10/07 23:29:10.22 21LgfgEW.net
>>29
>>26 は、CSV モジュールを使っているから、
列をクォートする事で、列内に、カンマが存在できる!
入力ファイル
a,b,c,"あ,い,う",d
require 'csv'
# 引数は入力ファイル名
CSV.filter( File.open( ARGV[ 0 ] ) ) do |row| # 1行ずつ処理する
p row[ 3 ] #=> "あ,い,う"
row[ 3 ].tr!( ",", "、" ) # 列4
end
出力
a,b,c,あ、い、う,d
34:デフォルトの名無しさん
19/10/07 23:56:45.43 cbxlkLVD.net
>>32
いやそりゃクウォートしてれば問題ないよ
a,b,c,あ,い,う,d
を
a,b,c,"あ,い,う",d
に
変換する処理が必要なわけで
そこができてないから困ってるんじゃないのかな
35:26
19/10/08 00:22:31.74 cRqslSem.net
クォートしてなかったら、そもそも、CSV にならない!
列内に、カンマが含められないから、列数も変動する
36:デフォルトの名無しさん
19/10/08 00:32:16.98 brYPe3Nc.net
それがわかってるから変形したいんじゃん。
37:26
19/10/08 02:16:13.41 cRqslSem.net
バグのほとんどが設計段階で生じる、典型的な例かw
バグを設計段階で修正せず、実装段階で修正しようとするから、
ますますダメになるという例w
SE・上流工程が馬鹿だと、こういうのが多いw
Ruby などで実装した事がないからだろうw
ダメな事をやる香具師が、あまりにも多いw
38:デフォルトの名無しさん
19/10/08 06:58:17.53 nEU/9wkt.net
なにこの人
要望・仕様を満たせないバグありのプログラムを書いておいて
それを指摘されたら「設計が悪い」と逆ギレしだしたよ
Ruby使う人ってこんなしょうもないおっさんに成り下がるのか
39:デフォルトの名無しさん
19/10/08 07:25:01.06 daf3ib6k.net
>>21
Vim
:%s/^\%([^,]*,\)\{3\}\zs\(.*\)\%(\%(,[^,\n]*\)\{1\}$\)\@=/\=substitute(submatch(0), ',', '、', 'g')/
Emacs
M-x query-replace-regexp
正規表現:
^\(\(?:[^,]*,\)\{3\}\)\(.*\)\(\(?:,[^,
]*\)\{1\}\)$
置換:
\1\,(replace-regexp-in-string "," "、" \2)\3
正規表現は>>23とほぼ同じだけど、空のフィールドに対応するよう + をすべて * に変更した
「第4フィールド」の内容がカンマだけの場合にも対応 (.*[^,]) → (.*)
40:デフォルトの名無しさん
19/10/12 19:38:36.96 vBnCHMzu.net
>>16
お題スレの人が総当たりソルバー作ってくれた
スレリンク(tech板:757番)
41:デフォルトの名無しさん
19/10/29 11:16:30.73 czk9+d/A.net
●Regular Expressionの使用環境
サクラエディタ bregoning.dll ver 4.12
●検索か置換か?
置換
●説明
をふくむ行(複数)を削除
●対象データ
A.jpg
B.jpg
C.jpg
●希望する結果
A.jpg
Bだけを削除するなら^.*B.*\nってわかるんですけど
B、Cを削除する方法がわかりません
誰か教えてください よろしくお願いします
42:デフォルトの名無しさん
19/10/29 11:28:33.00 Ef61zXRp.net
>>40
いまいちやりたいことがはっきりしないが、
Aのみ残したなら、^[^AA].*?jpg¥n
BCのみ消したいなら、^[BC].*?jpg¥n
Aのみ全角なのは故意なのか?
43:デフォルトの名無しさん
19/10/30 12:29:04.54 n2bLSC2q.net
を含む行を削除
でググればすぐに見付かるんだが
URLリンク(yanohirota.com)
キーワードを含む行(複数指定) ^.*(キーワード1|キーワード2).*$(\r\n|\r|\n)?
44:デフォルトの名無しさん
19/10/31 18:25:55.12 KC+T8umE.net
●Regular Expressionの使用環境
Mery
●検索か置換か?
置換
●説明
パターンにマッチする行までの全ての行をキャプチャしたい
●対象データ
20191001
吾輩は猫である
名前はまだ無い
……
20191002
親譲りの無鉄砲で
子供の頃から
損ばかりしている
……
●希望する結果
20191001[Tab]"吾輩は猫である
名前はまだ無い
……"
[改行]
20191002[Tab]"親譲りの無鉄砲で
子供の頃から
損ばかりしている
……"
日付と本文が交互に現れるテキストを日付と本文とに分けてキャプチャして置換したいのですが、上手く行きません。
最短一致を使用すると本文が一行しかキャプチャできないし、最長一致ですと最後の日付までの全行がキャプチャされてしまいます。
どうかご教示下さい。
45:デフォルトの名無しさん
19/10/31 20:12:39.29 qSOPmN+b.net
>43
検索
(^[0-9]{8})\n
置換
\n$1\t
46:デフォルトの名無しさん
19/11/01 00:19:13.27 l+SDkm5c.net
Ruby では、
text = <<"EOT"
20191001
あ
20191002
い
う
EOT
# キャプチャー部分の、#{ $1 } は、8桁の数字
p res = text.gsub( /^(\d{8})\n/ ) { "\n#{ $1 }\t" }
print res
出力
[空行]
20191001[Tab]あ
[空行]
20191002[Tab]い
う
47:デフォルトの名無しさん
19/11/01 08:08:52 TORoDjzQ.net
>>44
ご回答ありがとうございます。
すみません。本文部分を"で括りたくて、数字8桁に挟まれた部分にマッチさせたいのです。
48:デフォルトの名無しさん
19/11/01 09:29:10.19 M2kmurNA.net
>>46
CotEditorでドットが改行に一致する状態なら以下でできる
(^¥d{8})(.*(?=¥n¥d{8})|.*(?=$))
Meryは知らん
49:デフォルトの名無しさん
19/11/01 09:30:04.91 M2kmurNA.net
一応置換はこれ
$1¥t"$2"
50:デフォルトの名無しさん
19/11/01 11:19:24.96 XqhX+0kD.net
(^\d{8})\n((?~^\d{8}))$
\1\t"\2"
最後の行が改行されてると"がズレるからそこだけ手作業
51:デフォルトの名無しさん
19/11/01 11:25:13.23 zrbJp7o3.net
negative lookahead
URLリンク(regex101.com)
最下行に日付+改行を付け足せばORが一つ減って少し読みやすい
URLリンク(regex101.com)
52:デフォルトの名無しさん
19/11/01 13:33:34.02 i0nQhs53.net
>>43
^([0-9]{8})\n((?:(?!\n[0-9]{8}\n)[\S\s])+)
53:デフォルトの名無しさん
19/11/01 13:55:21.62 IH7Homqm.net
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\Z)
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\z)
↓
$1\t"$2"
54:デフォルトの名無しさん
19/11/01 14:05:57.48 zrbJp7o3.net
>>50
negative lookaheadとか書きつつ全然negativeじゃなかったわ
55:デフォルトの名無しさん
19/11/02 07:00:29.25 Y+w4hll1.net
皆様ありがとうございます
最短一致と先読みを組み合わせて
(\d{8})((?:.*\n)*?)(?=\d{8})
のような感じでマッチしました
単に.*だけだと行末までで止まってしまうので明示的に.*\nの繰り返しと指定しないといけなかったようです
56:デフォルトの名無しさん
19/11/18 01:09:59 B3FWH6HK.net
/(A|B*|C+|D?|E?|)+/ は /[A-E]*/ と同じなんだろうか。
57:デフォルトの名無しさん
19/11/23 19:09:02.72 S+7ZA2D+.net
=を含まない行を検索できる表現方法は?
58:デフォルトの名無しさん
19/11/23 21:06:16.66 8xX8HZu8.net
>>56
^[^=]*$
59:デフォルトの名無しさん
19/11/24 19:30:30.97 BlMs70wA.net
PCRE2 Version 10.34 21-November-2019
URLリンク(www.pcre.org)
60:デフォルトの名無しさん
19/12/07 04:27:54 Dhp88CPz.net
今でもアクティブに更新してるのってPCREの他はre2と鬼車系くらいなのかな
昔はライブラリの話も結構してた気がするけど
61:デフォルトの名無しさん
19/12/07 11:10:24 hNCBwRLG.net
Hyperscan
62:デフォルトの名無しさん
19/12/07 19:19:38.35 S05zsHBk.net
テキストエディタで見えないけど何かがある状態
MacのBBEditだと逆さまの赤い「?」が表示される状態なんですけど
こういうのを正規表現で捕まえる事って出来ないですか?
63:デフォルトの名無しさん
19/12/07 19:21:06.34 +kYKAjJc.net
否定で出来ない?
64:デフォルトの名無しさん
19/12/07 20:27:35.79 S05zsHBk.net
>>62
色々やってみたけど
非単語構成文字に含まれてしまい上手くこれだけ抽出出来ないです
一体こいつは何者なんだろう? もうちょい悩んでみます
65:デフォルトの名無しさん
19/12/07 20:32:56.16 tj55yZgB.net
そういうときはバイナリエディタで開いて該当部の文字コード引きなよ。
66:デフォルトの名無しさん
19/12/07 20:51:47.44 S05zsHBk.net
ありがとうです
\x{7F}
でいけました
67:デフォルトの名無しさん
19/12/07 21:19:40.77 b/g70Kck.net
ウムラウトなどのアクセント付きアルファベットにのみ一致させる正規表現をお教えください。
68:デフォルトの名無しさん
19/12/07 21:54:33.96 hNCBwRLG.net
正規表現だけではまだできないんじゃないかな?
一般的には各言語が持ってるUnicodeの正規化機能を使って検索対象を基底文字+結合文字の形に正規化してから、結合文字を検索する
69:デフォルトの名無しさん
19/12/07 22:53:57.20 /3OJwFPr.net
日本語なら、NKF というライブラリがあるように、
ウムラウトなら、その国のライブラリがあるかも知れない
知らないけど
まあ、日本人に聞いても、ムダだと思うw
使っている国の人に、聞いた方がよい
70:デフォルトの名無しさん
19/12/07 23:41:45 FrJsgiML.net
cpanライブラリの中に一般的な正規表現集めたものがあるから
その中にあるかもね
71:デフォルトの名無しさん
19/12/08 03:11:20.97 BNiynU8G.net
あるいは文字コードで標準ラテンのz(U+007A)よりあとを全て拾うように範囲指定するとか。
72:デフォルトの名無しさん
19/12/08 12:38:28.10 h14g0YSH.net
>>66
数は知れてるんだから普通に[ÄäÏï …]ってやればいいんじゃね?
73:デフォルトの名無しさん
19/12/08 14:00:42.26 0T/Za1/I.net
サクラエディタの正規表現ライブラリbregonig with Onigmoの場合、大文字小文字区別なしでßや\x{00DF}がssにヒットするので困る。
74:デフォルトの名無しさん
19/12/08 14:15:46.03 B7mwO2xN.net
>>71
見た目が同じäでも文字コードの表現は複数ある
文字の種類も含めてこれで全部といえる集合を作れるならそれでいける
日本語で濁音が含まれる文字にのみ一致させる正規表現を求めてるのと似てる
75:デフォルトの名無しさん
19/12/08 14:19:04.55 B7mwO2xN.net
URLリンク(i.imgur.com)
76:デフォルトの名無しさん
19/12/08 17:17:16.59 qQWD6Mfj.net
[=a=]
equivalence class
77:デフォルトの名無しさん
19/12/08 17:27:54.65 DxA2hCcs.net
●Regular Expressionの使用環境
鬼雲6.2.0 &Mery
●検索か置換か?
検索
●説明
行中の1個目の=にだけマッチさせたい
意味合いとしては
(?<=^[^=\n]+)=
なんだけど
>戻り読みの式は固定文字長でなければならない。
>しかし、最上位の選択子だけは異なった文字長が許される。
だそうで+はダメみたい
(?<=^(?~=))=
戻り読みの中に非包含もダメだった
(?<=^[^=\n]|^[^=\n]{2}|^[^=\n]{3}| .... |^[^=\n]{1000})=
とかすれば無理矢理出来そうだけどもっとスマートな書き方無いかな?
78:デフォルトの名無しさん
19/12/08 17:35:15.85 X/tkXkh9.net
^.*?\K=
79:デフォルトの名無しさん
19/12/08 17:45:34.12 DxA2hCcs.net
>>77
ありがとう
速っ。数日悩んであれこれ試してたのが嘘みたいなあっさり回答w
\Kとか意味分かってなかったけどこうやって使うんですね
重ね重ねありがとうございました
80:デフォルトの名無しさん
19/12/08 18:23:57.85 B7mwO2xN.net
>>75
それだとウムラウトついてないのも引っかかるよね
81:デフォルトの名無しさん
19/12/08 22:21:07.36 DSHI20Cf.net
\K
いいなそれと思ったけど自分の環境では使えなかった残念
82:デフォルトの名無しさん
19/12/09 17:04:00 o6YMciNa.net
>固定文字長で >最上位の選択子だけは異なった文字長
これはこういう意味かな
(?<=^[^=\n]{1,1000})=
83:デフォルトの名無しさん
19/12/09 21:21:57.03 wMFl4+9a.net
鬼車のは (?<=ab|cd) だけじゃなく (?<=ab|cde) みたいなのも可ってことだったと思う
戻り読みを本当に後戻りしながらマッチングしてる実装ってほとんどなくて
大抵は文字列を一旦n文字分巻き戻して先読み相当の処理をするって感じになってるんで
パターンコンパイル時に「n文字分」が確定できない表現は弾かれる
84:デフォルトの名無しさん
19/12/11 02:25:16.21 ue3GcKd8.net
グレップ坊や というソフト使ってますが
正規表現で、データだけ検索 データーを除外したい
どいう表記になりますか?
85:デフォルトの名無しさん
19/12/11 02:56:43.47 ivhCTlPt.net
データを表現する正規表現が基本
除外については反転オプションないの?
本家 grep には -v で反転する
86:デフォルトの名無しさん
19/12/11 13:45:29.55 Jxz7JQeN.net
データ(?!ー)
データ(?=[^ー])
否定先読みか先読みが使えるならこれで出来る
独自のものだと適切なエスケープが必要かも
VB6ランタイム必要とあるからたぶんVBだろうけど
87:84
19/12/14 01:37:01.84 atjDTluR.net
下のほうで行けました
88:デフォルトの名無しさん
20/01/02 13:19:03.26 MApT2CVk.net
●Regular Expressionの使用環境
sed-4.7-x64.exe
(Gnu sed4.7のwindows版 URLリンク(github.com))
Windows 8.1(64)のPowerShellで実行
●検索か置換か?
置換(削除)
●説明
行頭から6文字目を削除して、行頭から2文字目の後に一文字挿入したい
●対象データ
1229日 1400
1230月 1500
1231火 1500
●希望する結果
12/29日1400
12/30月1500
12/31火1500
sed.exe -e "s/(?<=^.{5})\s//" .\ファイル.txt
としたら6文字目のスペースが削除されるかと思ったけどうまくいかない
ファイルはUTF-8で改行はCRLFです
89:デフォルトの名無しさん
20/01/02 13:33:45.38 LqVuN/CI.net
>>87
> うまくいかない
なぜどううまくいかないのかを書かないの?
90:デフォルトの名無しさん
20/01/02 13:48:39.30 MApT2CVk.net
何も削除されずに元のファイルがそのままです。
エラー表示等はないです。
91:デフォルトの名無しさん
20/01/02 16:53:21.09 gZNl6+48.net
^(.{2})(.{3}).(.*)$
$1/$2$3
92:デフォルトの名無しさん
20/01/02 17:35:51.43 fx8yTANL.net
sed -i ?
93:デフォルトの名無しさん
20/01/02 18:35:38.12 gZNl6+48.net
sed -E "s/^(..)(...)\s(.*)/\1\/\2\3/" .\ファイル.txt
94:デフォルトの名無しさん
20/01/13 16:24:20.40 pG6qAwQV.net
●Regular Expressionの使用環境
正規表現の本・テキストで疑問に思った部分ですので特に環境は無いです
●対象データ
太郎はテニス部のキャプテンです。
太郎はサッカー部のキャプテンです。
太郎は野球部のキャプテンです。
太郎はバスケ部のキャプテンです。
●検索か置換か?
検索
●希望する結果
太郎はテニス部のキャプテンです。
太郎はサッカー部のキャプテンです。
太郎は野球部のキャプテンです。
●説明
通常の 太郎は(テニス|野球|サッカー)部のキャプテンです では無く
バスケ という単語を使い正規表現を作りたいのです
()を使った場合(使わなくても バスケ を用いた方法であれば良い)
の否定文・除くの書き方がわかりません
^ を使っってみましたが上手く行きませでした
太郎は(^バスケ)部のキャプテンです。 ・・ダメ
太郎は^(バスケ)部のキャプテンです。 ・・ダメ
太郎は(\^バスケ)部のキャプテンです。 ・・ダメ
バスケ を使った場合どの様に記述すれば良いのでしょうか?
95:デフォルトの名無しさん
20/01/13 16:54:41.37 omefpgVu.net
否定は、(?!文字列)
でも、太郎は(?!バスケ)部の、とは書けないよ
「太郎は」に続く「バスケでない任意の1文字以上の文字列」部のキャプテンという風に考えてみてくれ
96:デフォルトの名無しさん
20/01/13 17:05:50.06 KqHO+Fgo.net
>>93
正規表現だけでは否定を完全実現できない。
だからこそ、例えばgrepには -vオプションがある。いずれのライブラリやアプリも正規表現とは別の方法で否定を実現している。
97:デフォルトの名無しさん
20/01/13 17:19:50.81 isx+DaHv.net
太郎は(?!バスケ).*部のキャプテンです。
太郎は(?!バスケ).*
(?!.*バスケ)太郎は.*部のキャプテンです。
(?!.*バスケ)太郎.*
(?!.*バスケ).*
98:デフォルトの名無しさん
20/01/13 17:32:26.06 isx+DaHv.net
鬼雲 非包含
^(?~バスケ|\n)$
99:デフォルトの名無しさん
20/01/13 18:15:40.74 pG6qAwQV.net
太郎は(?!バスケ).*部のキャプテンです。
にて出来ましたが
(?!バスケ) の扱いを .* でさらに処理しなきゃいけないのは全く思いつかないです
今回のを参考に今後も学習してみます
皆様 >>94->>97 ありがとうございました
100:デフォルトの名無しさん
20/01/13 18:19:19.63 isx+DaHv.net
>>98
URLリンク(abicky.net)
101:デフォルトの名無しさん
20/01/14 22:34:44.82 kxfWTRop.net
^(?!.*バスケ)(?=.*キャプテン)(?=.*太郎).*
102:デフォルトの名無しさん
20/01/15 00:24:06 qFZTgD7k.net
'あ'.match(/[あ゙い゙ゔえ゙お゙]/u)
(環境依存文字ですが、[]の中身は濁点つきの「あいうえお」です)
'あ'は濁点なしなのでマッチさせたくないのですがしてしまいます
これってマッチしないようにする方法はないですか?
JavaScriptです
103:101
20/01/15 00:30:34 qFZTgD7k.net
>>101 自己解決しました
'あ'.match(/\u3099/u) //マッチしない
'あ゙'.match(/\u3099/u) //マッチする
104:デフォルトの名無しさん
20/01/15 12:08:15.81 lFvJ7mPZ.net
^(?!.*バスケ(?!ット(?!ボール(?!選手)))).*
バスケ ←不一致
バスケット ←一致
バスケットボール ←不一致
バスケットボール選手 ←一致
太郎はバスケットボール選手としてバスケ部に入部している ←不一致
太郎はバスケットボール選手としてバスケット部に入部している ←一致
105:デフォルトの名無しさん
20/01/15 14:36:24.87 mWwHDwCD.net
んなことよりバスケやろうぜ
106:デフォルトの名無しさん
20/02/09 22:06:03 XBEo77KP.net
マッチしたカッコ内の文字列をを利用する方法ってどうやるんでしたか?
URLリンク(hogehoge.jp)
http://(.*).jp
このアスタリスクの部分を利用するのはどうやるんでしたかね
t1ではないです
107:デフォルトの名無しさん
20/02/09 22:18:21.72 6++kPC7v.net
>>105
>>2
> スルーされにくい質問のテンプレと例
> ●Regular Expressionの使用環境
108:デフォルトの名無しさん
20/02/09 22:22:12.18 XBEo77KP.net
$1ですねどうも
109:デフォルトの名無しさん
20/02/09 22:34:23.16 XBEo77KP.net
同じ行にあるurlにhrefを加える正規表現はどうするのでしょうか
URLリンク(hoge1.jp)<)
↑これを
<a href="URLリンク(hoge1.jp">http:) <a href="URLリンク(hoge2.jp">http:)
こうしたいです
1つだけならこうできます
http://(.*).jp
110:デフォルトの名無しさん
20/02/09 22:34:49.85 XBEo77KP.net
URLリンク($1.jp)
を忘れていました
111:デフォルトの名無しさん
20/02/10 14:37:14 8D13KkA5.net
正規表現よりも、HTML パーサーの方がよい。
Ruby のnokogiri で、HTML をパースすると、
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html><body>
<a href="URLリンク(hoge1.jp">http:)
<a href="URLリンク(hoge2.jp">http:)
</body></html>
EOT
elements = doc.css( "a" )
# 属性・テキスト
elements.each { |elem| puts elem.get_attribute( "href" ), elem.text }
出力
URLリンク(hoge1.jp)<)
URLリンク(hoge2.jp)<)
112:デフォルトの名無しさん
20/02/10 18:02:57.53 cKG4UD69.net
>>110
>>108はHTMLをパースしたいんじゃなく
HTMLの一部を生成したいんじゃろ
113:デフォルトの名無しさん
20/02/11 07:15:58.31 Kcy+Q8b9.net
>>108
.jpが末尾につく行がリンクだと仮定してjavascript
/^(.+\.jp)$/gm
上記の正規表現で
<a hef=“URLリンク($1)<)
正規表現のフラグのmで複数行対応、gで複数の結果で対応出来ん?
114:デフォルトの名無しさん
20/02/11 13:30:47 yXLnwJ70.net
(https?://\S+)
<a href=“\1”>\1</a>
115:デフォルトの名無しさん
20/02/12 09:21:48 iIu6BAwU.net
1) (hoge)
2) (hoge, fuga)
3) (hoge, fuga, piyo)
2) のみにマッチする正規表現のご教示よろしくお願いいたします
鬼雲
116:デフォルトの名無しさん
20/02/12 10:28:49.15 bUEb5r3d.net
hogeとfugaを後で使うと仮定して
\((.+),(.+)\)
117:デフォルトの名無しさん
20/02/12 10:51:06 NK/UnlDo.net
>>115
それだと3)にもマッチするよ
118:デフォルトの名無しさん
20/02/12 11:05:14 W9U9giTl.net
>>114
a\)
119:デフォルトの名無しさん
20/02/12 15:06:59.76 bUEb5r3d.net
.を[^,]でどう?
120:デフォルトの名無しさん
20/02/12 15:37:27.75 iIu6BAwU.net
ID:bUEb5r3d 様
ありがとうございました。m(_ _)m
「\([^,]*,[^,]*?\)」で希望動作になりました
121:デフォルトの名無しさん
20/02/12 18:44:57 bUEb5r3d.net
どういたしまして。
ちなみに+じゃなくて*にしてるのは
(,)
にも一致させたいという事?
あと?は無くても動かん?
122:デフォルトの名無しさん
20/02/12 18:51:28 gdzQpnag.net
[^,]*だと改行と閉じ括弧を含んでしまい
次の行まで選択してしまうのでは?
123:デフォルトの名無しさん
20/02/12 19:37:56.96 bUEb5r3d.net
確かにこんなデータも想定するとアウトやね
((hoge,huga)piyo)
改行はオプション次第だね
124:デフォルトの名無しさん
20/02/18 23:17:54.25 TkHg8SjE.net
指定した2つの文字XYの間がn文字以下(0を含む)にマッチする検索方法教えてください
マッチ例n=3
XY
XaY
XabcY
NG
XabcdY
125:デフォルトの名無しさん
20/02/18 23:50:11.22 rgk/DkAY.net
X.{0,3}Y
とかかな、試してないけど
126:デフォルトの名無しさん
20/02/19 00:18:10 Y6/DCNeg.net
>>124
ありがとうございます
127:デフォルトの名無しさん
20/02/24 14:31:40.12 iLDNrypx.net
●Regular Expressionの使用環境
実際に使う環境は不明ですが、まずはサクラエディタで試そうと思います。
●検索か置換か?
検索。マッチ部分を抽出できる必要はなく、含むかだけわかれば良いです。
●説明
文章(サクラは複数行NGとのことなので、今は1行)の中に「市」という文字が入っているかを判定したいです。
しかし、「横浜市」のような地名が入っているかを判定したいので、「巨大都市」「姉妹都市」のような特定のワードは排除したいです。
>>103の前後が逆のパターンになると思うのですが、単純に「^(?!.*(?!(?!巨大都|姉妹都)市)).*」とすると何もマッチしなくなってしまいます。
(そもそも「^(?!.*(?!ット(?!ボール))).*」の時点で「バスケット」にマッチしません)
●対象データ・希望する結果
ここは巨大都市だ
(マッチなし)
ここは横浜市だ
^
ここは巨大都市の横浜市だ
^
128:デフォルトの名無しさん
20/02/24 14:48:12.43 iQYTd9Fe.net
>>126
(?<!巨大都|姉妹都)市
Negative Lookbehindを使う
URLリンク(regex101.com)
129:126
20/02/24 15:48:38.69 iLDNrypx.net
>>127
できました、ありがとうございます
後読みというのもあるんですね
130:デフォルトの名無しさん
20/03/21 15:01:32 Ycs9n4/m.net
どなたか教えてください。0が含まれる行のみ/以降を削除したいです。
(処理前)
2/3004
67//1
503/11/4
4/6/978
(処理後)
2
67//1
503
4/6/978
実際の文字列は数字とは限りません。可能かわかりませんがどうぞお願いします。
131:デフォルトの名無しさん
20/03/21 1
132:6:32:31.37 ID:S0XSDbOV.net
133:デフォルトの名無しさん
20/03/21 16:58:05.15 iWBNd/W/.net
^(?=.*0)([^/]*).*$
\1
134:デフォルトの名無しさん
20/03/21 18:17:29.30 Ycs9n4/m.net
>>131
すごい!完璧に希望どおりにできました!
アリガトウゴザイマス!!!
135:デフォルトの名無しさん
20/03/22 11:16:42 nQo0XPUd.net
●Regular Expressionの使用環境
VisualWorks 7.7NC Regex11パーセル
●検索か置換か?
検索
●説明
jpgファイルの連番部分を取り出したい
なお正規表現にいくつか制約があります
先読みと後読みはできません (?= (?! (?<= (?<! などが未実装
最小一致も実装されていません
グループやキャプチャは可能です
'.*:^isDigit:(:isDigit:+)¥.(:isAlphabetic:+)$' asRegex. などとやっていましたが
これだと3333.jpgなどのパターンに対応できないので
'.*:^isDigit:?(:isDigit:+)¥.(:isAlphabetic:+)$' asRegex.
とやるとそもそもマッチしません
正規表現だけでやるうまい方法が見出せませんでした
isDigitは ¥d
isAlphabeticは [a-z] と読み替えできます
●対象データ
0000_1111_2222_3333.jpg
_0000_1111_2222_3333.jpg
3333.jpg
●希望する結果
3333
3333
3333
136:デフォルトの名無しさん
20/03/22 11:49:39.63 feI8vnc9.net
0000などは連番扱いされないの?
137:デフォルトの名無しさん
20/03/22 11:55:19.77 zGmYOqdI.net
>>133
正規表現の方言がマイナー過ぎて難しい
:^isDigit: はPerl5でいう [^0-9] と等価という理解で合ってる?
138:デフォルトの名無しさん
20/03/22 12:16:09.69 loDgnmn0.net
ファイル名の最後の数字部分だけ取りたいなら (\d+).jpg とかじゃ駄目なん?
139:デフォルトの名無しさん
20/03/22 12:33:09.14 zGmYOqdI.net
>>133
そもそも :^isDigit: の前に .*は必要?
140:デフォルトの名無しさん
20/03/22 12:39:04.69 nQo0XPUd.net
>>134
その辺は捨てます
拡張子直前の数字だけを連番扱いです
>>135
それでいいです
書き方が変わってますが考え方は一緒です
>>137
ないとマッチしませんでした
141:デフォルトの名無しさん
20/03/22 12:41:01.29 nQo0XPUd.net
>>136
試しましたがマッチしません
142:デフォルトの名無しさん
20/03/22 12:43:52.41 nQo0XPUd.net
書き忘れましたが
ファイル名だけでなくファイルパスを含む場合があります・・
ex.
/a/b/c/d/_0000_1111_2222_3333.jpg
3333.jpgのようなパターンさえなければ対応できているのですが
これが来た場合にうまくいきません
143:デフォルトの名無しさん
20/03/22 13:22:29.93 ilL19jCu.net
>>139
>>136のだと
拡張子のピリオドがエスケープされてないから
(\d+)\.jpg
でキャプチャ箇所を抽出すればよいのでは?
144:デフォルトの名無しさん
20/03/22 13:27:20 nQo0XPUd.net
>>141
エスケープ付けてテストしてあります
145:デフォルトの名無しさん
20/03/22 13:29:10.24 aG3rJm5+.net
>>140
(/a/b/c/d/_0000_1111_2222_)?3333.jpg
146:デフォルトの名無しさん
20/03/22 13:33:55.99 nQo0XPUd.net
>>143
マッチします
147:デフォルトの名無しさん
20/03/22 13:53:17.55 7GTLasBi.net
>>138
メソッドは何を使っているの
メソッドによって「文字列の先頭で一致する」とか
「文字列の任意の場所で一致する」とかあるでしょ
前者を使っているのでは?
後者なら>>136の類で上手く行くと思う
さもなくば ^(|.*:^isDigit:)(:isDigit:+)\.(:isAlphabetic:+)$ でどうかな
148:デフォルトの名無しさん
20/03/22 14:25:12.02 HpFFHFhU.net
JavaScript なら、これで一致するので、
キャプチャー部分だけを取り出す
var re = /(\d+)\.jpg/g;
149:デフォルトの名無しさん
20/03/22 14:31:11.47 loDgnmn0.net
文字列の先頭からしかマッチできないんなら .*(\d+).jpg でいいんじゃね
ルールがローカルすぎてよくわからんが
150:デフォルトの名無しさん
20/03/22 14:42:52.35 I5Su+SV6.net
>>133
>これだと3333.jpgなどのパターンに対応できない
ORでそのパターンをカバーしてやればいいよね
151:デフォルトの名無しさん
20/03/22 14:50:15.15 loDgnmn0.net
(.*[^\d])?(\d+)\.jpg
152:デフォルトの名無しさん
20/03/22 15:07:09.29 nQo0XPUd.net
>>145
先頭からスキャンするメソッドしかないようです
試して見たところうまく行きそうなのでテストしています
あまり関係ないですがisDigitやisAlphabetic自体がメソッド名で
char.isDigit(); みたいに内部的に呼ばれています
>>147
それだと最長一致の関係で
3333のうち3だけ取り出されてしまいます
>>149
こちらもうまく行きそうです
後ほど結果ご報告致します
153:デフォルトの名無しさん
20/03/22 15:21:27 H4vT0xhv.net
(.*[^\d])?(\d+)\.jpe?g
\2
154:デフォルトの名無しさん
20/03/22 15:30:56.06 nQo0XPUd.net
一通り検査して全てパスできました
皆様ありがとうございました
それにしてもうまい方法があるものですね勉強になります・・
155:デフォルトの名無しさん
20/03/22 21:42:28 hAKSIWAv.net
>>133を見て何が何だかだわ
皆さんスゲーな
156:デフォルトの名無しさん
20/03/23 07:21:58.66 jGS2rL5b.net
VSCode なら、Regex Previewer という拡張機能がある
JavaScript, PHP の正規表現をテストできる
157:デフォルトの名無しさん
20/04/09 01:23:43 o0bB5yvE.net
正規表現の段位、級位みたい試験があると転職に役立つかな
正規表現3段所持みたいな
試験問題はほとんどパズルだな
当方は頭悪いので、複数の単純な正規表現使用派
158:デフォルトの名無しさん
20/04/09 14:34:47.92 67/p/Sga.net
正規表現必須!てな現場もそうそう無いだろうし
使えて当たり前、だけど高度過ぎる常人に思い付けないようなものが必要になる場面もまず無いだろうし
そうなったら出来る奴に丸投げすりゃいいし
プログラム内なら全て正規表現任せにせずに前処理した方が良いケースも多々あるからそれ絡めてのスキルだと思うし
方言が多い事や解が複数あり得る事も試験化には問題
マークシート選択方式では引っ掛け問題ばかりになるだろうし何か違う気がする
資格化したところで精々、文系脳の奴がどれだけ論理思考が出来るか?の目安とか雑なIQ判定くらいにしか役立ちそうにない
義務教育内でこんなのあるよ程度に最低限くらいは教えておいて欲しいけど資格化までは疑問かな
159:デフォルトの名無しさん
20/04/09 18:11:21 AINw40ik.net
>>156
君は正規表現の前に日本語の義務教育受けてこいw
160:デフォルトの名無しさん
20/04/09 21:20:08 HMI1Vo9o.net
日本語力に特段問題があるようには見えないが
161:デフォルトの名無しさん
20/04/09 21:34:35 +PEAWxOJ.net
俺もちゃんと何言ってるのか分かったし、特に読んでて疑問も覚えなかったね
162:デフォルトの名無しさん
20/04/09 22:20:15.44 zOdaCiQO.net
文章がくどいとは思う
163:デフォルトの名無しさん
20/04/09 22:26:46 BSAQTOUE.net
難題を解決したらあいつスゲーなとなるけど
なかなかその機会が訪れないよな
164:デフォルトの名無しさん
20/04/09 23:07:21.92 +PEAWxOJ.net
>>160
くどいというより接続詞で繋げすぎだね
165:デフォルトの名無しさん
20/04/10 05:35:38 OHa28c9H.net
論文とかの文章ならどうかと思うけど
こういう掲示板での改行の仕方とか含めての表現では
別に問題ないよなと思った
166:デフォルトの名無しさん
20/04/10 07:01:05.28 ZlkuoHXS.net
�
167:`務教育やり直せレベルにはみえない 雑文としては意味が通じないような文では無いだろう 157の日本語力が低杉なんじゃ?
168:デフォルトの名無しさん
20/04/10 08:59:24.36 sn6MPl7m.net
>>161
パズルとしてはいいけど業務でやられると保守できなくなるしな
169:デフォルトの名無しさん
20/04/10 09:02:57.81 sn6MPl7m.net
>>157フルボッコw
最初の方で「~し」を多用してるのがちょいウザいけど内容的にはまあ頷けるわな
170:デフォルトの名無しさん
20/04/10 11:44:30.56 BcRc61MP.net
>>161
そいつじゃないとできないっていう状況を会社は嫌がるからね
いつやめるかもわからんし
資産がゴミ化してしまうのを恐れる
171:デフォルトの名無しさん
20/04/10 14:42:19.38 k/YdHOe5.net
そもそも問題が複雑だから複雑な正規表現になってしまうのでは?
そういう場合はそいつじゃないとできないという状況になってしまうこともありうる
172:デフォルトの名無しさん
20/04/10 15:00:43 71OQfeOs.net
うん、そういう場合もあると思うけど
多くの人はそもそも正規表現で解決出来るかもという発想がなくて
手間と時間をかけて頑張るか、その仕事を断る
そんな場合が多い気がする
173:デフォルトの名無しさん
20/04/10 15:25:33 BcRc61MP.net
まあbison/flex使って片付けてたらそれはやめてくれとも言われたこともあるしな
引き継げないだろと
174:デフォルトの名無しさん
20/04/10 16:34:01.15 sn6MPl7m.net
>>168
一例として…
頑張れば1つにまとめられる
でも場合分けすればコードは長くなるし性能も劣化するけどわかりやすく書ける
って言うケースはそれなりにあると思うよ
175:デフォルトの名無しさん
20/04/10 23:03:46.23 ALVzSQYS.net
頑張りすぎちゃって誰もメンテできないような手に負えないSQLってたまに出くわすけど、
それと同じような要領で頑張りすぎちゃって誰もメンテできないような正規表現が出てきたら・・・・
自分だったらSQLのときよりもさらに全力で逃げ出すかなあ
正規表現ってただでさえ魔法のような暗号文化しがちだし(後で読解に困ることも多いし)
仕様を簡潔明瞭にコードに落とし込むスキルがないダメプログラマが
力技で正規表現ゴリゴリ書くことを考えるとかなりの恐怖
エスアイアーの現場ならむしろ安全のため正規表現全面禁止にしておくほうがマシなんじゃなかろうか
176:デフォルトの名無しさん
20/04/11 00:23:01.95 yLiBv2Sb.net
三項演算子でも同じ問題あるね
可読性と簡潔性は必ずしも両立しない
177:デフォルトの名無しさん
20/04/11 00:37:32 aIl7Qg1V.net
仕様がわかっていれば
ちゃんとしたドキュメントが残っていれば何とでもなる
暗号をわかりやすいプログラムに変換可能だから
とりあえず動いているので触りたくないというのどうにもならない
それはそのプログラムが近い将来破綻することを意味する
178:デフォルトの名無しさん
20/04/11 01:03:41.61 Ni1vKiQd.net
>>172
正規表現は仕様の分かるテストケース一式を必ず用意させれば問題ない
つまり難しい正規表現を使いこなす能力よりも
もれなくテストケースを書ける能力のほうが大事
179:デフォルトの名無しさん
20/04/11 05:53:16 qQ/s2VQN.net
>>175
あーあーそれはなんか分かる・しっくり来るな。完全同意だわ。
180:デフォルトの名無しさん
20/04/11 09:32:41.81 Qk2+GLy8.net
>>175
でもそれって正規表現使っているか否かに関わらず本来なされているべきことだよね
正規表現とか特定の機能を使ってるところだけ特別扱いして�
181:hキュメントやテスト仕様を残させるとか 絶対サボる人が出てきそう でもってサボったところに限って誰も直せないようなクソコードと化すパターン
182:デフォルトの名無しさん
20/04/11 16:30:10.27 Ni1vKiQd.net
>>177
仕様の分かるテストケースってのはテストコードのことね
正規表現は作る時に必ずマッチする例とマッチしない例を書いて確認するでしょ?
それを仕様の分かるテストコードにしてセットで扱えるようにしておくってこと
コードレビュー時も正規表現だけ見てレビューしても効果薄いから
テストコードとセットでレビューする
>でもそれって正規表現使っているか否かに関わらず本来なされているべきことだよね
これはそうでもないよ
複雑なSQLの場合は仕様の分かるテストコードを一式用意するのは結構難しくて
ある範囲を超えると手間に見合わないから仕様書とSQL自体のレビューだったり手動テストで補完する
正規表現は純粋関数として扱えるのでその辺の難しさがない
183:デフォルトの名無しさん
20/04/14 11:27:53 uSEs8eKP.net
足並み揃えないと不安で死んじゃう病
184:デフォルトの名無しさん
20/04/14 11:37:16 ARaCq1kB.net
人っていついなくなるかわからないからね
事故だったり勝手な理由で辞めたり
185:デフォルトの名無しさん
20/04/15 10:44:15.36 MMPwOLF/.net
●Regular Expressionの使用環境
grep (GNU grep) 2.20
●検索か置換か?
検索
●説明
今日から、14日間(位)を抜き出したい。
●対象データ
(前にもたくさん)
2020-03-14
2020-03-14
2020-03-15
2020-03-15
(中略)
2020-04-14
2020-04-14
2020-04-15
2020-04-15
(後も続く)
●希望する結果
14日前から2020-04-15を抽出できる事を希望します。
元ファイルに存在しない日付(3月33日があったり・・)などは無く、書式も必ず対象データに記載のもので出力されます。
また、30の月、31の月なども考慮しないでOKです。(できる限りシンプルな書式でお示しください)
サンプルお示しいただけたら、あとはググりながら自分で調べます。
ググったのですが、サンプルになるいい感じのシンプルな書式が見当たらず
どうにもうまく正規表現を作れずにおります。何卒宜しくお願い致します。
186:デフォルトの名無しさん
20/04/15 11:13:15.42 ajU4Q4+G.net
カレンダーは西向く侍があるから正規表現単独では無理では……
187:デフォルトの名無しさん
20/04/15 11:16:23.86 oU4wEPk/.net
>>181
意味がよくわからんが、
任意の日付から14日前(後?)を抜き出すってことなら
正規表現よりはscriptの領域だろ。
188:デフォルトの名無しさん
20/04/15 11:19:34.98 MMPwOLF/.net
>>182
大体でもできないでしょうか。
と書こうと思ったときに思いつきました。。。
実行速度に問題が出るかもしれませんが、
3月15日または、3月16日または、3月17日または・・・4月15日。
って力技でやってみます・・・。
もし、ほかにも「こういう方法があるよ」って素敵なアイデアお持ちのかた
いらっしゃいましたら、ぜひレスをください。宜しくお願い致します。
189:デフォルトの名無しさん
20/04/15 11:29:40.68 oU4wEPk/.net
>>184
そもそも4/15から14日前で何で3月が入るんだよ。
間飛んでる可能性があるって事?
だとすればなおさら正規表現向きではない。
190:デフォルトの名無しさん
20/04/15 11:31:48.22 MMPwOLF/.net
>>185
すみません、そこは書き間違えです。
awkってコマンドでできそうなので
もう少し調べてみます。
スレ汚し失礼いたしました。
191:デフォルトの名無しさん
20/04/15 11:48:04.80 oU4wEPk/.net
>>186
3/15~4/15限定での力技なら
2020(¥-03¥-(1[5-9]|2[0-9]|3[0-1])|¥-04¥-(0[1-9]|1[0-5]))
192:デフォルトの名無しさん
20/04/15 11:49:07.49 MMPwOLF/.net
>>183
ありがとうございます。
scriptというのが大きなヒントになり解決に至りました。
結果的にはこれでできました。
cat 対象ログファイル | awk '"2020-04-01" <= $2 && $2 < "2020-04-02"'
性器表現ばっかりにとらわれてました・・
ありがとうございます。
193:デフォルトの名無しさん
20/04/15 13:19:12 Ut6Mn670.net
何を言いたいのかエスパーでもわからん
オーダーはもっと正確に
194:デフォルトの名無しさん
20/04/15 16:37:41 h/7T7n1i.net
>>181
ちょっとだけややこしい検索にはawkがおすすめ
195:デフォルトの名無しさん
20/04/15 16:53:34 z6xNdPvI.net
性器表現って(i)みたいなのだろw
196:デフォルトの名無しさん
20/04/21 11:40:37.33 3ZBp0+Pn.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置き換え
●説明
pingの結果(成功)をtxtに収めたものから、
IPアドレスだけ抜き取りたい
●対象データ
Echo reply 1 from 192.168.0.1 time delay 99.999 ms
Echo reply 2 from 192.168.0.1 time delay 88.999 ms
Echo reply 1 from 192.168.0.2 time delay 88.999 ms
Echo reply 2 from 192.168.0.2 time delay 88.999 ms
以下同じように続く
●希望する結果
192.168.0.1
192.168.0.1
192.168.0.2
192.168.0.2
〇実際に得られた結果
2.168.0.1
2.168.0.1
2.168.0.2
2.168.0.2
よろしくお願いいたします。
197:デフォルトの名無しさん
20/04/21 11:41:25.90 3ZBp0+Pn.net
〇使用した正規表現(置換)
.*((([0-9]{1,3}\.){3})[0-9]{1,3}).*
$1
が抜けてました
198:デフォルトの名無しさん
20/04/21 12:43:11.20 iVBBDkGx.net
今の奴を少し手直しして
.*\b(([0-9]{1,3}\.){3}[0-9]{1,3}).*
とか
.* (([0-9]{1,3}\.){3}[0-9]{1,3}).*
必ずfrom~timeに挟まれるなら
.*from ([\d.]*) time.*
とか
199:デフォルトの名無しさん
20/04/21 13:08:13.53 bjfyOojV.net
>>193
とても意味がわかって書いているとは思えないが。
ログがそのパターンだけならこれでいけるでしょ。
¥d+¥.¥d+¥.¥d+¥.¥d+
頭が192.168.だけならそれで絞ってもいいし。
200:デフォルトの名無しさん
20/04/21 13:34:44 3ZBp0+Pn.net
>>194
両方ばっちりうまくいきました。
ありがとうございます。
\dとか\bとかいろいろあるんですね。
\t位しか知りませんでした。
ありがとうございます。
201:デフォルトの名無しさん
20/04/21 22:38:03.26 alPdontK.net
.* を [^0-9]* もしくは \D*
202:デフォルトの名無しさん
20/04/21 23:03:33 J0u+GdjC.net
推奨はしないけど、元の奴で、.*に?を追加して
.*?((([0-9]{1,3}\.){3})[0-9]{1,3}).*
203:デフォルトの名無しさん
20/05/16 15:22:19 hjibA7SH.net
ランダムな文字列によるコピペ荒らしで
12文字中の文字が最大で6種類しかない
ようなときどうすればいいでしょうか?
(.)\1*([^\1])\2*([^\1\2])\3*([^\1\2\3])\4*([^\1\2\3\4])\5*(
[^\1\2\3\4\5])\6 (.)\1*([^\1])\2*([^\1\2])\3*([^\1\2\3])\4*([^\1\2\3\4])\5*(
[^\1\2\3\4\5])\6*[\1\2\3\4\5\6]{6,}
こんな風にすると新たな種類の文字がキャプチャされていくように思えますが
既に登場した文字が再び登場するとマッチしなくなります
204:デフォルトの名無しさん
20/05/16 15:33:21 hjibA7SH.net
例を挙げると
↓慮↓鸞↑↓↓→慮↑←←↑→↑鸞↑→←→艪慮慮↑鸞鸞慮慮艪艪鸞→→↑慮↓→↓↓↑
慮鸞鸞艪艪→慮鸞艪鸞鸞↑慮艪慮艪慮↑←慮↑↑慮↑←艪→←鸞↑↓↑↑↓艪↓鸞慮→→
→艪←艪←↓↓←艪←↑→←←←鸞↓↓艪↑鸞←鸞←↓慮鸞←慮←慮↓慮慮慮慮↓↑艪
こんな感じの荒らしです
文字は毎回ランダムで変わります
登場する文字の種類が少ないという点でマッチさせたいと思っています
205:デフォルトの名無しさん
20/05/16 15:34:13 C+uyEXd2.net
(.)\1*([^\1])[\1\2]*([^\1\2])[\1\2\3]*([^\1\2\3])[\1\2\3\4]*([^\1\2\3\4])[\1\2\3\4\5]*
こんな感じ?
206:デフォルトの名無しさん
20/05/16 19:45:32 hjibA7SH.net
>>201
試したらそれだとほぼ全ての文章にも当てはまるみたいです
207:デフォルトの名無しさん
20/05/16 20:00:27.44 C+uyEXd2.net
^(.)+(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)*
文字クラス中で後方参照使えないなら否定先読みで代替
208:デフォルトの名無しさん
20/05/16 20:04:12.78 C+uyEXd2.net
訂正
試してなかった
^(.)\1*(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)*
209:デフォルトの名無しさん
20/05/16 20:19:48.01 vPXPesfb.net
無理だと思ったけどなんかできたわ
6種類以下の文字だけで行の頭から20文字
(?m:^)(?=(.)\1*+(?>(.)(?>\1|\2)*+(?>(.)(?>\1|\2|\3)*+(?>(.)(?>\1|\2|\3|\4)*+(?>(.)(?>\1|\2|\3|\4|\5)*+(.)?+)?+)?+)?+)?+)(?>\1|\2|\3|\4|\5|\6){20}
210:デフォルトの名無しさん
20/05/16 20:35:19.65 hjibA7SH.net
>>203-205
ありがとうございます!
後方参照難しいですね…
211:デフォルトの名無しさん
20/05/16 20:49:23.06 YcXGn5Zu.net
言ってる通りの条件でやると滅茶苦茶誤爆して使い物にならんと思う
例が7文字だし、ググって類似の荒らしが使っているものにマッチしつつ誤爆控え目にするように
110字以上のレスの最後まで7字以下というくらいの条件にしたらこんな感じか
^ *(?=.{110})([^<br> ])(?:[<br> ]|\1)*([^<br> ])(?:[<br> ]|\1|\2)*([^<br> ])(?:[<br> ]|\1|\2|\3)*([^<br> ])(?:[<br> ]|\1|\2|\3|\4)*
【改行】([^<br> ])(?:[<br> ]|\1|\2|\3|\4|\5)*([^<br> ])(?:[<br> ]|\1|\2|\3|\4|\5|\6)*([^<br> ])(?:[<br> ]|\1|\2|\3|\4|\5|\6|\7)*$
【改行】とその前の改行を削除
212:デフォルトの名無しさん
20/05/16 21:09:00 BiE2hTzx.net
別の判定要件にしないと誤爆頻発しそう...
例えば「特定コード範囲の文字が連続n回出現でNG」とかじゃダメなの?
213:デフォルトの名無しさん
20/05/16 21:23:17.44 hjibA7SH.net
>>208
確率的に連続しないケースが結構出ちゃいますよね
214:デフォルトの名無しさん
20/05/17 01:33:54 C/hIIgkx.net
文字→文字または文字パターン、でどうだろう
そのボットの仕様を把握してないし実際のレスも見たことないのでなんとも言えないけど、文字種の制約以外に傾向を見いだせないってこと?
215:デフォルトの名無しさん
20/05/17 03:28:48 EMK05c2V.net
>>210
こんな感じ
東大医学部医学科卒業、3年連続国試不合格のルシファーさん、偏差値95.3を取った模試の成績表をTwitterのヘッダーにしてしまう
スレリンク(poverty板)
電光掲示板的なAAによって正規表現NGを逃れようとしている
今のところ
(\S{0,10}\s){10,}
(?=(.)\1*+(?>(.)(?>\1|\2)*+(?>(.)(?>\1|\2|\3)*+(?>(.)(?>\1|\2|\3|\4)*+(?>(.)(?>\1|\2|\3|\4|\5)*+(?>(.)(?>\1|\2|\3|\4|\5|\6)*+(?>(.)(?>\1|\2|\3|\4|\5|\6|\7)*+(?>(.)(?>\1|\2|\3|\4|\5|\6|\7|\8)*+(.)?+)?+)?+)?+)?+)?+)?+)?+)(?>\1|\2|\3|\4|\5|\6|\7|\8){17,}
で完璧に対応出来てる
216:デフォルトの名無しさん
20/05/17 03:45:05.05 EMK05c2V.net
17文字もあるのに文字種が8種以内って
自然言語としては有り得ないわけですよ
そのエントロピー的な性質をターゲットにしてる
つまり完全ランダムじゃなくて電光掲示板的に嫌がらせメッセージを目立たせたいという意図を持ってるから可能になる手法
217:デフォルトの名無しさん
20/05/17 03:46:57.41 C/hIIgkx.net
>>211
なるほどw
218:デフォルトの名無しさん
20/05/17 04:00:56.20 EMK05c2V.net
こうかはばつぐんだ!
必死にNG逃れのためのスクリプト書いたのに全て通用しなくて発狂して逃げたww
219:デフォルトの名無しさん
20/05/17 04:36:26.20 zN/y7CUr.net
結果として片棒担がされてた訳か
スレリンク(poverty板:870番)
870 番組の途中ですがアフィサイトへの転載は禁止です (ワッチョイW 2bde-sAUE) 2020/05/17(日) 00:30:59.00 ID:LtSh5oo60
再度書き込みなっちまったけど、レスすんなよ
グズ正規表現野郎。
お前が煽ったせいで、さらにサキオタアンチがめんどくさくなった。
皆、ひっそり、IDやワッチョイと、少しの正規表現でNGしてた。
それらができない5chブラウザとかあるのに。
自分だけ調子に乗るなよクズ。
220:デフォルトの名無しさん
20/05/17 04:4
221:1:56.29 ID:EMK05c2V.net
222:デフォルトの名無しさん
20/05/17 04:45:15.72 zN/y7CUr.net
そうなのか
でもはたから見てると一緒だと思うよ
荒らし構うのはただの荒らしだよ
223:デフォルトの名無しさん
20/05/17 04:53:36.77 EMK05c2V.net
>>217
この荒らしは誰からも無視されてるのに何年も続けてる奴だからな
自分がターゲットにされて遊ばれて悔しいという体験は初めてだろうな
放置すれば荒らしが消えると思うのは間違い
キチガイは何年でも休まずに荒らし続ける
しかも手動で
そのキチガイの世界を壊してあげる作戦
224:デフォルトの名無しさん
20/05/17 05:51:07.31 zN/y7CUr.net
自粛警察みたいな奴だな
正義とか妄信しない方が良いぞ
225:デフォルトの名無しさん
20/05/17 05:52:32.20 EMK05c2V.net
アホを悔しがらせて頭の体操になるなんて最高やん
こんな快感なこと他にある?
226:デフォルトの名無しさん
20/05/17 13:46:59 2FMa8UuX.net
正規表現を自動生成するAIはまだ?
227:デフォルトの名無しさん
20/05/17 18:37:04.48 EMK05c2V.net
機械学習で正規表現を獲得するみたいなの出来ないですかね
228:デフォルトの名無しさん
20/05/17 20:33:27.11 MuJmPUno.net
他力本願+ノイズは一人前
229:デフォルトの名無しさん
20/05/29 08:30:19 /k2a15rY.net
*でも+でもどちらでもよいという場面では*にするのが慣例でしょうか?それとも文字通りどちらでもいいのかな?
230:デフォルトの名無しさん
20/05/29 11:43:39.33 //ihWgfL.net
このスレに来る奴って論理的思考をする人達だと思ってたけど、
慣例とか持ち出すような奴も来るんだな
意味が有って違うSyntaxなんだから適切な方を使え
231:デフォルトの名無しさん
20/05/29 12:20:15 KLwVXlC+.net
どっちでもいいってどういう場合だ
どっちかになるだろ
232:224
20/05/29 13:19:30 YZO921+1.net
例えば対象が1回以上の繰り返しだとします
0回以上には1回以上が含まれているのだから、どちらかが適切であるという積極的な理由が見つかりません
233:デフォルトの名無しさん
20/05/29 13:22:19 KLwVXlC+.net
一つも無くていいってのと一つは必ず無いといけないってのは両立する場面は無い
234:デフォルトの名無しさん
20/05/29 13:27:35 zvuAHZcb.net
「1回以上」ならつべこべ言わずに"+"だな
「0回は外したい」という意味を含むのであれば
"*"は仕様から外れる
個人的には"*"はできるだけ使わない
235:デフォルトの名無しさん
20/05/29 15:05:09 IKIHl4j2.net
1回以上であることが分かっているのであれば0回の可能性がないことを示しておけるというのが合理的理由だよ。
*でマッチさせられるとしても後からソース見て混乱するだけだ。慣例といえば慣例だが機能すればいいというものでもない。
236:デフォルトの名無しさん
20/05/29 19:24:39 ZvrYTh83.net
>>227
読む人(未来の自分含む)のことを考えれば、可能な限り対象を絞り込んだ方が(設計意図が読み取りやすくて)よい
237:デフォルトの名無しさん
20/05/29 21:22:17 VNOYZXTT.net
A+とAA*の効率化の話かと思った
AA*の方が最初のAで最適化される分だけ速いとかなんとか
238:デフォルトの名無しさん
20/05/29 21:49:09 dZOo8Hm0.net
>>232
オートマトンを組むので速度は変わらないと思うが
239:デフォルトの名無しさん
20/06/18 21:13:18.22 jAvldfC1.net
URLリンク(i.imgur.com)
上を下としたいのですが、2回に分けることは可能ですが、1回でやれますでしょうか?スラッシュが含まれる場合、そこをエスケープしたいのです
scriptタグ貼ると怒られますので、画像です(´・ω・`)、、、
240:デフォルトの名無しさん
20/06/18 22:17:30.24 3Q
241:D4/INi.net
242:デフォルトの名無しさん
20/06/18 22:21:10.54 3QD4/INi.net
環境によっては
置換: "$1\\$3"
としないとダメなこともあり
243:デフォルトの名無しさん
20/06/18 22:28:45.36 3QD4/INi.net
>>235 は.NET
>>236 はperl
sed だと
置換: "\1\\\3"
244:デフォルトの名無しさん
20/06/18 22:37:34.06 G7fdNfOT.net
<スクリプト>(ここが変化)</スクリプト>
って感じでスクリプトとスクリプトの間が変化するだけじゃない?
245:デフォルトの名無しさん
20/06/18 22:42:36.83 L9lBZl+g.net
間があるのなら通常1行ではないだろう
246:デフォルトの名無しさん
20/06/18 22:48:48.44 kZOKQ/+u.net
<script>([^\b]*?)</script>
"<script>\1<\\/script>"
247:デフォルトの名無しさん
20/06/19 02:59:23.82 yAdMpEG/.net
厚生労働省がガイドラインを発表…「副業」公認の時代が来た?
URLリンク(www.iza.ne.jp)
フリーランス向け報酬即日払いサービス『先払い』受付開始7ヶ月で申込件数1,000件突破
URLリンク(prtimes.jp)
副業プラットフォーム「Kasooku」が約1.9億円調達、マッチング件数は5000件突破
URLリンク(jp.techcrunch.com)
副業がしやすくなった?リモートワークを実施してよかったと思うことTOP5
URLリンク(dime.jp)
ポストコロナ時代の人生に副業は欠かせない
URLリンク(www.gentosha.jp)
副業が社員を強くする コロナ・ショックが加速する新しい雇用の形
URLリンク(business.nikkei.com)
4割以上が「副業意欲向上」「副業しやすくなった」と変化|
新型コロナウイルスの影響下における働き方の実態・意識調査
URLリンク(prtimes.jp)
248:デフォルトの名無しさん
20/06/19 05:44:59.40 LA4wBl0H.net
URLリンク(ideone.com)
ごめんなさい
scriptタグだけではないです
行頭と行末に"を挿入し、スラッシュをコメントアウトしたいのです、、、(´・ω・`)
249:デフォルトの名無しさん
20/06/19 07:43:33.01 b4DLgcmt.net
>>242
タグ内にタグ(正確には < )が入らないなら >>235さんので出来るよ
> 行頭と行末に"を挿入し
タグの間に改行が入ることは無いの?タグは関係なしに文字通りに行頭と行末?
環境も分からないし>>2のテンプレ通りに条件を例示して
250:デフォルトの名無しさん
20/06/19 10:22:50.49 ecFmQJtB.net
鬼雲
(?<!")(<([^>\s]++).*?>[^\b]*?<)(/\2>)(?!")
"\1\\\3"
制限
ネストの回数分、全置換の繰り返しが必要
<div id=a><div id=b>test</div></div> こういうのも行けるが
id=aの開始タグとid=bの終了タグの組み合わせで置換され次に
251:id=bの始、id=aの終で処理される <div id=a>"abc"<div id=b>test</div>"def"</div> タグの外側直近に"があるものは否定(先|戻り)読みで"を見ているので無理
252:デフォルトの名無しさん
20/06/19 11:06:15.25 LA4wBl0H.net
●Regular Expressionの使用環境
mery2.6.7です
●検索か置換か?
置き換えしたいです
●説明
先頭と行頭に"を追加し、/をエスケープしたいです
●対象データ
URLリンク(ideone.com)
>>243
了解です
直しました
複数回に分けてやるのが普通なんでしょうか?
253:デフォルトの名無しさん
20/06/19 11:47:09 x+g7YIVM.net
>>245
これダブルクォーテーションもエスケープしなきゃいけないんじゃないの?
254:デフォルトの名無しさん
20/06/19 12:02:33.17 LA4wBl0H.net
>>246
すみません、勘違いしていました
エスケープ対象は"で、/はエスケープ対象ではないです。
vscodeのスニペットに登録する際に、"をエスケープしないといけないんです
これ、なにげに面倒ですね
255:デフォルトの名無しさん
20/06/19 14:19:20.57 a2rlVyD0.net
>>247
HTMLが一般的ではないんだけど
通常はタグと閉じタグとが別の行になることが多いし
あるいは全てが一行というものもあるんだけど
こんな特殊なものにだけ対応でいいのか?
また各タグ毎に""だとダメなのか?
こうすれば行が違ってても大丈夫となるけど
【例】 <h1>h1</h1> → "<h1>"h1"</h1>"
256:デフォルトの名無しさん
20/06/19 16:14:22.39 /6wBUF7o.net
自分macなのでmery使えないの試せない
javascriptのマクロが使えるみたいじゃん
正規表現だけだと厳しいかも
var code =`<!DOCTYPE html> ~省略~ </html>`
var code = code.replace(/(<.*?>)\n/g, '"$1"\n').replace(/\//g, '\\\/')
console.log(code)
javascriptの置き換え部分だけ書くと上のでいけるはず
meryのマクロの体裁に整えればこれでいけると思う
環境によって\はバックスラッシュだし$もバックスラッシュです
257:デフォルトの名無しさん
20/06/19 16:33:24.58 x+g7YIVM.net
var2回もいらんし。
¥nは$にしないとそのスクリプト自体動作失敗してるでしょ。
258:デフォルトの名無しさん
20/06/19 16:45:53 /6wBUF7o.net
>¥nは$にしないと
へえそうなんだ
macだとそのままいけるんだよね
var 2回いらねはさすがに難癖だね
259:デフォルトの名無しさん
20/06/19 16:49:07 LA4wBl0H.net
>>248
vscodeのスニペット登録はそういうルールのようです
やはり複数回に分けるのが利口でしょうか
プログラムだって何回かに処理を分けますもんね
必須ではないですが、知識として知りたいなあと思った次第です
260:デフォルトの名無しさん
20/06/19 17:06:56 x+g7YIVM.net
>>251
無駄にプライドが高そうなタイプだなw
varの意味がわかってれば2回はつけんよ。
それだと最終行に¥nがなかったら処理されない。
URLリンク(ideone.com)
261:デフォルトの名無しさん
20/06/19 18:05:26.45 LA4wBl0H.net
>>249
自分はpythonでやってみますです
262:デフォルトの名無しさん
20/06/19 18:07:51.43 a2rlVyD0.net
ひょっとするけど
タグ関係なく単に各行を""で括るってだけなんじゃ?
263:デフォルトの名無しさん
20/06/19 18:24:29.90 a2rlVyD0.net
スニペット登録でググってみたら
jsonで記述と書かれてる
やっぱりタグは無関係で
行の前後を""で括るだけだし、カンマ区切りも要る
"Inner": {
"prefix": "in",
"body": [
"<section id=\"$1\">",
"\t<div class=\"inner\">",
"\t\t$2",
"\t</div><!-- .inner -->",
"</section>"
],
},
264:デフォルトの名無しさん
20/06/19 18:36:21.20 LA4wBl0H.net
え、そうなのですか、、、
265:デフォルトの名無しさん
20/06/19 18:57:56.53 a2rlVyD0.net
そもそもキー入力の
266:短縮だし、基本はテンプレート登録だ "Print to console": { "prefix": "log", "body": [ "console.log('$1');", "$2" ], "description": "Log output to console" あと、スニペット登録入力用のvscode拡張機能もあるようだ
267:デフォルトの名無しさん
20/06/19 21:44:28 q14TQ9ke.net
ggrks
URLリンク(www.google.com) スニペット 登録 拡張
268:デフォルトの名無しさん
20/06/20 00:03:50 D9McnEc6.net
#一行目
AAAランダム文字列1AAAランダム文字列2BBBランダム文字列3BBBランダム文字列4CCC
#二行目
AAAランダム文字列5BBB
このような文章があって
AAAランダム文字列2BBB
だけを1回の処理で抽出することは可能ですかね?
AAA~CCCで挟まれ、かつAAA~BBBの真の最短マッチというのでしょうか
二行目は抽出したくないです
AAA((?!AAA).)*CCC
↓
AAA((?!AAA|BBB).)*BBB
と2回の処理ではできたのですがどうも悔しいです
269:デフォルトの名無しさん
20/06/20 00:10:55 GUrzgoSo.net
>>260
AAA.*(AAA.*?BBB).*CCC
270:デフォルトの名無しさん
20/06/20 00:29:48.90 Spmc6WsU.net
ランダム文字列の最初(最後)の文字がA(B)だった時は?
271:デフォルトの名無しさん
20/06/20 00:44:31.03 Spmc6WsU.net
>>177
画像を右クリック、キャッシュ処理-NGファイル
リンクからでも出来るが再度取得しに行ってしまうのが無駄になるかも
272:デフォルトの名無しさん
20/06/20 00:44:59.32 Spmc6WsU.net
誤爆スマン
273:デフォルトの名無しさん
20/06/20 00:52:46 D9McnEc6.net
>>261
早速ありがとうございます
ですがそのやり方ですと自分が確認した限り最初のAAA~CCCまで全て抽出されてしまうようです
言い忘れてしまい申し訳ないのですがperl正規表現を使いgrepで抽出しようとしています
>>262
すいませんわかりやすくAAAと表記していますが実際はhttpsから始まるURLでBBBも複雑な固定文字列ですのでまず連続することはないと思います
あったとしてもそれは仕方ないのでここでは考えないものとしていただければ…
274:デフォルトの名無しさん
20/06/20 02:01:55.18 GUrzgoSo.net
>>265
それは正規表現の問題じゃなくgrepの使い方の問題で
キャプチャグループを取り出せてないだけだと思う
pcregrep -o1 'AAA.*?(AAA.*?BBB).*CCC' <input>
とか
grep -oP 'AAA.*?¥K(AAA.*?BBB)(?=.*?CCC)' <input>
とか工夫して
275:デフォルトの名無しさん
20/06/20 02:35:31.58 D9McnEc6.net
>>266
失礼しました
grepの使い方が悪かったのですね
そちらの方法で無事抽出できました
ありがとうございました
276:デフォルトの名無しさん
20/06/21 11:54:44 RSezRE5h.net
マークダウンのマッチのさせ方について
この2つのうち、上だけをマッチさせたいです
#半角スペースh1
#半角スペース半角スペース半角スペースh1
しかし
^# .*$
だと、両方マッチします。半角スペースが1つの場合のみマッチさせられるでしょうか
277:デフォルトの名無しさん
20/06/21 12:19:16.08 1s00JmZm.net
^# [^ ]
278:デフォルトの名無しさん
20/06/21 14:46:34 RSezRE5h.net
ありがとうございます
# h
の部分だけマッチします
一文字の繰り返しの部分は、どう指定してるんでしょうか?
279:デフォルトの名無しさん
20/06/21 14:58:06.74 wEwARBW2.net
[^ ]+
280:デフォルトの名無しさん
20/06/21 15:46:15.97 RSezRE5h.net
だとスペースがマッチしません
ありがとうございます
281:デフォルトの名無しさん
20/06/21 16:11:36.93 1s00JmZm.net
>>2
282:デフォルトの名無しさん
20/06/21 18:30:44.16 RSezRE5h.net
^#[ ]([^ ].*)$
これでいけたブリ
283:デフォルトの名無しさん
20/06/27 20:14:07.00 V+005EHj.net
chmateから改行コードが見えるレスのNGワードはどうやって登録すればいいですか?
URLリンク(i.imgur.com)
284:デフォルトの名無しさん
20/06/28 00:20:52.36 x4PVBa+w.net
chmateとやらのスレで聞いた方がいいと思うが
285:デフォルトの名無しさん
20/06/28 20:47:34.83 hqGvkXPW.net
わかる方教えてください
yyyy/mm/dd の形式で、下記のような0埋め処理をしたいのですが、一発処理方法がわかりません
�
286:蝸ハにあるファイルを秀丸にてgrep置換予定です。空白がジャマすぐる 今後も処理の必要があるので、できれば一発、無理なら2周かな… ex.) 2020/ 6/ 1 ⇒ 2020/06/01 ([0-9]{4})/( [0-9]|[0-9]{2})/( [0-9]|[0-9]{2}) これで全条件拾えるが処理できないし、下記だと3周しないといけないし ([0-9]{4})/ ([0-9])/([0-9]{2}) ⇒ \1/0\2/\3 //月のみ1桁 ([0-9]{4})/([0-9]{2})/ ([0-9]) ⇒ \1/\2/0\3 //日のみ1桁 ([0-9]{4})/ ([0-9])/ ([0-9]) ⇒ \1/0\2/0\3 //両方1桁 どなたか、お願いしますm(_ _)m
287:デフォルトの名無しさん
20/06/28 22:32:55.02 pbfRuAan.net
> 大量にあるファイルを
> 今後も処理の必要がある
スクリプトでやるものじゃね?
以下で2週で出来るが秀丸の正規表現は知らんからヒントにでもして
(?<=\d{4}/) (?=\d/[\d ]\d)
0
(?<=\d{4}/\d\d/) (?=\d)
0
(先|戻り)読みが使えないなら
(\d{4})/ (\d/[\d ]\d)
\1/0\2
(\d{4}/\d\d)/ (\d)
\1/0\2
288:デフォルトの名無しさん
20/06/28 22:57:55.61 CZLL+74z.net
>>277
秀丸は使えないのでうまくいくかは不明だが
検索文字列:\d{4}/\K (?=\d/(?:\d\d\D| \d\D))|\d{4}/\d\d/\K (?=\d\D)|\G\d{1,2}/\K (?=\d\D)
置換文字列:0
\Kがダメなら、(?<=\d{4}/)とかに変えてみる(3箇所)
ただし誤爆は起きるかもしれない
289:デフォルトの名無しさん
20/06/28 23:14:26.22 CZLL+74z.net
なお誤爆の可能性は、
1) ファイル先頭に、 6/28 xxx で始まっていた場合
2) 2020/ 6/28/ 9 xxx とか引き続き/ 9とかがある場合
3)ファイル末尾で、2020/ 6/28(改行コードなし)で終わっている場合は変換されない
まあ改良すれば3)は問題なくなるけど
290:デフォルトの名無しさん
20/06/28 23:16:24.29 CZLL+74z.net
2)は間違い 2020/ 6/ 8/ 9 とかの場合に訂正
291:デフォルトの名無しさん
20/06/28 23:19:24.85 CZLL+74z.net
あ、1)も間違ってる
6/ 8 xxxに訂正(空白なしで数字1文字で始まる場合)
292:デフォルトの名無しさん
20/06/29 00:31:06.80 G5zcTgI1.net
秀丸なら普通にマクロでプログラム書いた方が楽じゃない?
293:デフォルトの名無しさん
20/06/29 00:32:15.99 1iNHQcBG.net
1)は、\G(?!^)というふうに先頭の場合を除けばいける
残りの2)3)は工夫次第
294:デフォルトの名無しさん
20/06/29 16:30:01.33 sN5cgPC+.net
難しく考えなくても置換対象以外に"/ "が無いなら
/[ ]
/0
で一発
295:デフォルトの名無しさん
20/06/29 16:59:50.16 0ldK0o0F.net
これでできないかい?
FIND:(?<=¥d{4}/[ ¥d]¥d/) (¥d)|(?<=¥d{4}/) (¥d)(?=/)
REP:0$1$2
296:デフォルトの名無しさん
20/06/29 17:05:41.11 0ldK0o0F.net
こっちのほうが確実か。
FIND:(?<=¥d{4}/) (¥d)(?=/[ ¥d]¥d)|(?<=¥d{4}/[ ¥d]¥d/) (¥d)
REP:0$1$2
297:デフォルトの名無しさん
20/06/29 17:28:03.91 sN5cgPC+.net
>>287
それ試した?それが可能な処理系って何?
選択子で両方を対応するなら>>279の用に\G使わないとスペースが両方にある場合に失敗するぞ
298:デフォルトの名無しさん
20/06/29 17:41:18.50 0ldK0o0F.net
>>288
pythonでもCotEditorでもいけるが?
URLリンク(ideone.com)
299:デフォルトの名無しさん
20/06/29 17:54:20 TUm10+y/.net
277 です
皆さんありがとうございます!
レベルが低くて理解できないのもありますが、勉強のためにしっかり精査してみます
>>285
まさにそれですわ
てゆーか別に正規表現使わなくても実現できるという罠
勉強になりました m(_ _)m
改めましてありがとうございました。
300:デフォルトの名無しさん
20/06/29 18:05:49.23 sN5cgPC+.net
>>289
で?質問者はなんて書いている?
pythonとかCotEditorとか書いてあるかい?
質問者の環境で失敗する式を書くならせめて
pythonでならこれで出来る、くらい書けやks
301:デフォルトの名無しさん
20/06/29 18:09:28.38 0ldK0o0F.net
>>291
質問者が文句
302:を言うならともかく、なんでお前が切れてるんだよ。 自分が正解書いてるのに余計なこと書くなって言いたいのか?www カルシウムとっとけよ
303:デフォルトの名無しさん
20/06/29 18:13:56.28 sN5cgPC+.net
>>290
なんとなくそうじゃないかなーと思った
俺も昔同じ罠にハマった事あるからw
解決して何より
304:デフォルトの名無しさん
20/06/29 18:25:35.41 sN5cgPC+.net
>>292
あぁ?理由なら書いてんだろ
おまえのような底意地の悪いゴミカスが気に食わないからじゃ
さっさ死ね
305:デフォルトの名無しさん
20/06/29 23:31:59 G5zcTgI1.net
質問者そっちのけの場外乱闘にワロタ
306:デフォルトの名無しさん
20/06/30 01:41:09.48 ZFF7tVch.net
だが、そこがいい
307:デフォルトの名無しさん
20/06/30 13:15:03.17 tIigavUn.net
>>279で\Gの使い方が分かった。thx
308:デフォルトの名無しさん
20/07/02 02:54:39.72 fxvoVb8t.net
アプリからファイアウォールにまで使われる正規表現を標的にした「ReDoS攻撃」とは?
URLリンク(gigazine.net)
ネット中は正規表現を使わないではだめなのか
でもブラウザも中で使っているだろうし
309:デフォルトの名無しさん
20/07/03 10:38:52.53 fe+b4Rno.net
正規表現についてですが、このhtmlの置き換えは一発でできますか?
この前からいろいろ試してるんですが、、
URLリンク(ideone.com)
行頭と行末にダブルクォーテーションをつけ、urlの部分はエスケープしています。
vscodeでスニペットを登録する際に、このようにダブルクオーテーションを使用する必要があるのです。
310:デフォルトの名無しさん
20/07/03 11:07:40.28 cg7dcvev.net
(^<.*?)(".*?)(".*>)$
"$1¥¥$2¥¥$3"
↑vscode内の検索置換
それと全く同じパターンであれば可能だが、dqが複数出てくる場合はできない。
他のパターンも考えたら、
1.dqのみエスケープ、
2.行頭行末にdqをつける
の2アクションにするか、vscodeでそれ用のjsでも書いて処理するか。
スニペット登録したいものをまとめて書き出しておいて2アクションで処理しても大して手間は変わらんだろ。
311:デフォルトの名無しさん
20/07/03 12:32:41.29 fe+b4Rno.net
そうですね 2回でやります
312:デフォルトの名無しさん
20/07/03 13:00:37.53 hVBUXcHj.net
Ruby で、" を、\" に置換してから、
冒頭・末尾に、" を追加する
str = '"ja"'
str.gsub!( '"', '\"' )
puts '"' + str + '"'
#=> "\"ja\""
313:デフォルトの名無しさん
20/07/03 13:11:32.91 yfao6bm4.net
VScodeのプラグインにSnippet Generatorてのがあるみたいだがそれじゃダメなん?
314:302
20/07/03 14:28:11.33 hVBUXcHj.net
漏れなら、Ruby, PowerShell で、
クリップボード経由で変換するスクリプトを書いて、
ダブルクリックで起動できるように、起動部分をVBS で書くかな?
315:デフォルトの名無しさん
20/07/03 14:33:24.34 zEGBQA4b.net
正規表現よりもJSON.strinfigy()を使ったほうが簡単
スニペット用のJSONを出力すればいいだけだからJSでもRubyでも好きなの使えばいい
316:デフォルトの名無しさん
20/07/13 00:17:50.71 e/I4Ji0p.net
JavaScript
const kaoru = '薫'
'[薫子]'.match(`[${kaoru}]`)
'[薫子]'.match(`\[${kaoru}\]`)
'[薫子]'.match(new RegExp(`[${kaoru}]`))
'[薫子]'.match(new RegExp(`\[${kaoru}\]`))
全てマッチしてしまうようですが、マッチさせたくありません
[ や ] そのものを文字として扱って判定するにはmatchの引数をどうすればよいでしょうか
317:デフォルトの名無しさん
20/07/13 00:49:50.36 lkNbIdQ1.net
>>306
それはJSの質問やろ
RegExpコンストラク
318:ターを使って2回エスケープ
319:デフォルトの名無しさん
20/07/13 19:20:45.29 YirsSrYP.net
教えてください。基本的な質問で恐縮です。
20200706T030000Z
SUMMARY:打合せ
LOCATION:中野
DTEND:20200706T043000Z
から、
$1 0300
$2 打合せ
$3 中野
$4 0430
を抜き出すにはどのようにすればよいでしょうか。
320:デフォルトの名無しさん
20/07/13 19:49:46.79 GfOrWnDk.net
^\d{8}T(\d{4}).*+\nSUMMARY:(.*+)\nLOCATION:(.*+)\nDTEND:\d{8}T(\d{4})
321:デフォルトの名無しさん
20/07/14 13:34:31.12 h5j+nt7i.net
今まで何となくで使ってきたけどキャプチャの変数って式に対し1つしか用意されず
部分式呼び出しや量指定子の繰り返しで増やされずに上書きするみたいですね
^(?<y>2020[01]\d[0-3]\dT([0-2]\d[0-5]\d)00Z)(?:\n[^:\n]++:(.*+)){2}\n[^:]++:\g<y>
\1 \2 \3 \4 \5 \6
20200706T043000Z 0430 中野___
どの環境でもこういう仕様なの?
322:デフォルトの名無しさん
20/07/14 13:41:52 tlUY963U.net
>>310
深く考えてなかったがそういうもんだと思ってた
キャプチャグループが増殖するとは考えもしなかった
323:デフォルトの名無しさん
20/07/14 13:50:15.90 tlUY963U.net
もしキャプチャグループが増えるとして
与えられた文字列によって増える順番が異なってくることが考えられるしね
324:デフォルトの名無しさん
20/07/14 21:21:06.51 h5j+nt7i.net
キャプチャしたけりゃ繰り返しや\gで省略するなってことなんだろうけど
気になって出来る方法無いか調べてたら鬼雲で捕獲履歴参照なるものがあった
デフォでは無効になってるみたいだけど
URLリンク(github.com)
補記 5. 実装されているが、既定値では有効にしていない機能
+ 捕獲履歴参照
(?@...) と (?@<name>...)
例. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
使用方法は、sample/listcap.cを参照
有効にしていない理由は、どの程度役に立つかはっきりしないため
325:デフォルトの名無しさん
20/07/20 23:26:29.84 jWd+3fJB.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置き換え
●説明
3の倍数行あるテキストを、3行ごとに1行にまとめたい
●対象データ ※対象データは、必ず半角英数字です。
e
A8
11A9
c
2
LB5
3
d
8X5
●希望する結果
e A8 11A9
c 2 LB5
3 d 8X5
よろしくお願いいたします。
326:デフォルトの名無しさん
20/07/21 00:07:21.07 HQA5x8Lv.net
>>314
サクラエディタはよく知らないけど
一般的な正規表現なら /(.*?)¥n(.*?)¥n(.*?¥n)/g を "$1 $2 $3”で置換すればいいと思う
327:デフォルトの名無しさん
20/07/21 10:14:18.12 7bBDhy0Z.net
(?:^.*+|\G.*+[\r\n]+.*+)\K[\r\n]+(.*+)[\r\n]+
_\1_
"_" は半角sp
最終行末尾に改行が無くても可
328:デフォルトの名無しさん
20/07/21 10:18:39.84 7bBDhy0Z.net
[\r\n]+
は空行がある場合にズレるから使ってる改行文字に直して
CRLFなら\r\n
329:デフォルトの名無しさん
20/07/25 05:22:11.92 ygqLeqBq.net
質問です。デリミタが基本的に「/」が選ばれるのなぜですか?慣例だから?
330:デフォルトの名無しさん
20/07/25 08:47:52 1TMz0fAY.net
人間というのは楽をしようとする生き物なんだ
331:デフォルトの名無しさん
20/07/25 17:47:34.31 bnVhPJSY.net
>>318
ここに来るような人は論理的思考をすると思ってたんだけど、
慣例とか持ち出す奴まで来るのな
|や@なんかと比べれば分かるだろ
332:デフォルトの名無しさん
20/07/26 19:17:16.43 2z9rM+9+B
「ブラック企業社員」のお助けアプリが誕生 開発したのは22歳金髪大学生、開発のきっかけとは?
URLリンク(news.yahoo.co.jp)
レシート買い取りアプリONEの17歳起業家、サービス一時停止から「怒涛の3カ月」で気づいたこと
URLリンク(www.businessinsider.jp)
ビジネス版マッチングアプリ「yenta(イェンタ)」全国展開 開始!
URLリンク(prtimes.jp)
ギフティング「TANP」運営がGCPほかから5億円調達
1日1200件の「リアルギフト」送付も可能に、U25起業家の新たな挑戦
URLリンク(thebridge.jp)
人はこうすれば“ハマる”、源流はゲーマー視点の「幸せ」
URLリンク(project.nikkeibp.co.jp)
アプリ開発での起業は難しくない!成功するために覚えておくべきこと
URLリンク(www.biz.ne.jp)
【稼ぎ方が知りたい!】アプリの開発の収入って実際どれくらい?
URLリンク(itpropartners.com)
ネット関連事業で起業した成功例8選!ネットで成功するには○○が重要!?
URLリンク(www.official.or.jp)