◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

Regular Expression(正規表現) Part15 YouTube動画>7本 ->画像>12枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1568640311/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2019/09/16(月) 22:25:11.87ID:enU8we0d
Regular Expressionスレです。

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

前スレ
Regular Expression(正規表現) Part14
http://2chb.net/r/tech/1489511075/


次スレは>>980宜しく
天ぷら等>>2以降
2デフォルトの名無しさん
2019/09/16(月) 22:25:47.75ID:enU8we0d
スルーされにくい質問のテンプレと例

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

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

※ ^ はアンダーラインだそうな ^^;
3デフォルトの名無しさん
2019/09/16(月) 22:45:50.99ID:UVYTIEdn
◆関連サイト
正規表現メモ
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

鬼車
http://www.geocities.jp/kosako3/oniguruma/index_ja.html
鬼雲
https://github.com/k-takata/Onigmo
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
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
4デフォルトの名無しさん
2019/09/17(火) 01:53:27.68ID:JrU+31ml
正規表現技術入門
https://gihyo.jp/book/2015/978-4-7741-7270-5

↑の著者の一人であり Onigmo の作者でもあるtakata先生のツイ
https://twitter.com/k_takata
https://twitter.com/5chan_nel (5ch newer account)
5デフォルトの名無しさん
2019/09/17(火) 07:00:40.77ID:Au9Vzrnr
>>1-2
6デフォルトの名無しさん
2019/09/21(土) 18:08:57.67ID:oqO8j0PL
●Regular Expressionの使用環境 
サクラエディタ bregoning.dll ver 3.06という記載があります

●検索か置換か? 
置換

●説明 
うしろに数字を付けたい。


というのを
/(^.*)/$1/ で置き換えると

になります(変わらない)。
これを、あ→あ00にするために
/(^.*)/$100/ とはできません。

$1等の直後に、数字を付け足すためにはどのように
表現したらよいか教えてください。

元の行の末尾に付け足すとは限らないので、
$1(実際はもっと多いのですが・・)の直後に数字を付け足す方法をお教えください。
7デフォルトの名無しさん
2019/09/21(土) 19:27:26.83ID:3YukOVDp
>>6
/(^.*)/${1}00/
https://sakura-editor.github.io/help/HLP000089.html
8デフォルトの名無しさん
2019/09/21(土) 20:16:26.14ID:oqO8j0PL
>>7
ありがとうございます。
ヘルプを見るという基本がなってませんでした
もうしわけありません。
9デフォルトの名無しさん
2019/10/03(木) 17:59:43.15ID:WLIOnQPh
正規表現クロスワードパズル。めっちゃおもろいww
https://regexcrossword.com/
10デフォルトの名無しさん
2019/10/03(木) 22:01:07.23ID:ArP3YJIm
解き方がわかんねぇ・・・

https://regexcrossword.com/challenges/beginner/puzzles/1

[^SPEAK]+
HE|LL|O+

が交わるマスがなんで、Hになるんだ
11デフォルトの名無しさん
2019/10/03(木) 22:18:27.45ID:gZNTfFgd
クロスワードの基本ルールと同様に各マス1文字だが、通常と異なり各ラインが単語になるとは限らない
縦のラインを横ラインをそれぞれ検索対象のテキストと見做して両方がマッチすればOK
ちなみに1回で1ライン全てにマッチする必要は無くて複数回検索して全マスにマッチする形でも良いみたい
12デフォルトの名無しさん
2019/10/03(木) 22:25:40.75ID:TCa0Rrk0
>>10
まず
EP|IP|EF
の列を埋めてみよう。
13デフォルトの名無しさん
2019/10/03(木) 22:54:32.85ID:ArP3YJIm
>>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デフォルトの名無しさん
2019/10/04(金) 23:39:05.24ID:FCfJ1C/v
全制覇した。疲れた。本来はもっとのんびり楽しむものだよな。
15デフォルトの名無しさん
2019/10/05(土) 09:26:56.80ID:oVPf95FK
すげえ!高難易度のやつ歯が立たないわ
16デフォルトの名無しさん
2019/10/05(土) 16:01:21.83ID:8eaxbCO5
https://regexcrossword.com/playerpuzzles/59e565c95008d

これとか解けるのは人間ではないと思うわ
17デフォルトの名無しさん
2019/10/05(土) 16:35:39.41ID:+ss/CUcr
アカウント持ってないから login はできないけど
自分が解いた結果はまだ見られるな。
クッキーを削除したら見られなくなるんだろうか。
18デフォルトの名無しさん
2019/10/05(土) 16:44:21.25ID:0WeqN8Y0
>>16
なんじゃこりゃwww
本末転倒だけどこれ数独ソルバーみたいにコンピューターに解かせられんの?
19デフォルトの名無しさん
2019/10/05(土) 23:37:56.24ID:rOar3xCR
テキストエディタで試したら全27ラインマッチする状態になってるのに正解にならんなあ
20デフォルトの名無しさん
2019/10/06(日) 00:08:45.90ID:IBgflZCa
どうもブラウザのせいだったようで、同じ内容を普段使ってないChromeで試したら正解扱いになった、よかった

作った人は凄いけど、解くのは1個1個できるところから埋め、条件を少しずつ絞りこんで行けば案外見た目ほど難しくはない
正規表現の可変長の書式の影響でクロスワードよりピクロスを解く感覚に似てる気がするのでその辺やってた人はちょっと有利かも
あと記憶力に余程の自身がなければ、ちょっと大きめに印刷して各マスに細かい条件を書きながらやったら大分楽になると思う
21デフォルトの名無しさん
2019/10/06(日) 12:02:16.89ID:ONMi4OJn
●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デフォルトの名無しさん
2019/10/06(日) 13:19:25.82ID:MVlRtd/O
3つ目の,以降から,field5までの間をキャプチャで良さそう。
23デフォルトの名無しさん
2019/10/06(日) 21:18:49.15ID:QazjZrDG
>>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)を調整すれば実際のデータにも適用できると思います
24デフォルトの名無しさん
2019/10/06(日) 21:30:20.48ID:QazjZrDG
>>23
Python版
https://ideone.com/ApnsLv
25デフォルトの名無しさん
2019/10/07(月) 01:52:14.06ID:iyJYb3kL
質問を読んで直ぐにこれを書けるのなら速いけど
もし自分だったらあれをこうしてこれをこうしてと考えて試してる
間にテキストエディタとエクセルを行ったり来たりしながら
タブの挿入と置換と削除を繰り返した方が速いところが
悩ましいw
26デフォルトの名無しさん
2019/10/07(月) 03:37:15.45ID:21LgfgEW
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
2726
2019/10/07(月) 04:17:44.92ID:21LgfgEW
>>26
修正

tr ではなく、tr! で、直接レシーバー(文字列)を変更できる

>row[ 3 ] = row[ 3 ].tr( ",", "、" ) # 列4
row[ 3 ].tr!( ",", "、" ) # 列4
28デフォルトの名無しさん
2019/10/07(月) 08:59:18.56ID:fodStNL1
それ splice でできるんじゃね? と思ったのでやってみた。

perl -nF, -e 'splice( @F,3,0,join("、",splice( @F,3,@F-5+1))); print( join(",",@F));'
29
2019/10/07(月) 21:08:31.31ID:cbxlkLVD
>>26
カンマでカラム分割してるからrow[3]にはカンマが含まれないよ

ARGF.each do |line|
line.match(/((?:.+?,){3})(.+)((?:,.+){1})/) do |match|
puts match[1] + match[2].gsub(",", "、") + match[3]
end
end

こういうのって力技で変換するよりも
CSV生成側でクウォートし直したほうがいいよね
30デフォルトの名無しさん
2019/10/07(月) 22:07:48.83ID:fodStNL1
手間をかけたくないなら、そんなフィールドは末尾に置くのが良い。
そうしておけば何を書こうと邪魔にならない。
いつかは手作業の限界を感じるかもしれないが、それを遅らせることはできる。
31デフォルトの名無しさん
2019/10/07(月) 23:06:48.69ID:gEYFs1Cq
AIDS治療みたいなもんか
3226
2019/10/07(月) 23:29:10.22ID:21LgfgEW
>>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
33デフォルトの名無しさん
2019/10/07(月) 23:56:45.43ID:cbxlkLVD
>>32
いやそりゃクウォートしてれば問題ないよ

a,b,c,あ,い,う,d

a,b,c,"あ,い,う",d

変換する処理が必要なわけで
そこができてないから困ってるんじゃないのかな
3426
2019/10/08(火) 00:22:31.74ID:cRqslSem
クォートしてなかったら、そもそも、CSV にならない!

列内に、カンマが含められないから、列数も変動する
35デフォルトの名無しさん
2019/10/08(火) 00:32:16.98ID:brYPe3Nc
それがわかってるから変形したいんじゃん。
3626
2019/10/08(火) 02:16:13.41ID:cRqslSem
バグのほとんどが設計段階で生じる、典型的な例かw

バグを設計段階で修正せず、実装段階で修正しようとするから、
ますますダメになるという例w

SE・上流工程が馬鹿だと、こういうのが多いw
Ruby などで実装した事がないからだろうw

ダメな事をやる香具師が、あまりにも多いw
37デフォルトの名無しさん
2019/10/08(火) 06:58:17.53ID:nEU/9wkt
なにこの人
要望・仕様を満たせないバグありのプログラムを書いておいて
それを指摘されたら「設計が悪い」と逆ギレしだしたよ
Ruby使う人ってこんなしょうもないおっさんに成り下がるのか
38デフォルトの名無しさん
2019/10/08(火) 07:25:01.06ID:daf3ib6k
>>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フィールド」の内容がカンマだけの場合にも対応 (.*[^,]) → (.*)
39デフォルトの名無しさん
2019/10/12(土) 19:38:36.96ID:vBnCHMzu
>>16
お題スレの人が総当たりソルバー作ってくれた
http://2chb.net/r/tech/1564310397/757
40デフォルトの名無しさん
2019/10/29(火) 11:16:30.73ID:czk9+d/A
●Regular Expressionの使用環境
サクラエディタ bregoning.dll ver 4.12

●検索か置換か?
置換

●説明
をふくむ行(複数)を削除

●対象データ
A.jpg
B.jpg
C.jpg

●希望する結果
A.jpg

Bだけを削除するなら^.*B.*\nってわかるんですけど
B、Cを削除する方法がわかりません
誰か教えてください よろしくお願いします
41デフォルトの名無しさん
2019/10/29(火) 11:28:33.00ID:Ef61zXRp
>>40
いまいちやりたいことがはっきりしないが、
Aのみ残したなら、^[^AA].*?jpg¥n
BCのみ消したいなら、^[BC].*?jpg¥n

Aのみ全角なのは故意なのか?
42デフォルトの名無しさん
2019/10/30(水) 12:29:04.54ID:n2bLSC2q
を含む行を削除
でググればすぐに見付かるんだが

https://yanohirota.com/regex-delete-row/
キーワードを含む行(複数指定) ^.*(キーワード1|キーワード2).*$(\r\n|\r|\n)?
43デフォルトの名無しさん
2019/10/31(木) 18:25:55.12ID:KC+T8umE
●Regular Expressionの使用環境
Mery
●検索か置換か?
置換
●説明
パターンにマッチする行までの全ての行をキャプチャしたい
●対象データ
20191001
吾輩は猫である
名前はまだ無い
……
20191002
親譲りの無鉄砲で
子供の頃から
損ばかりしている
……

●希望する結果
20191001[Tab]"吾輩は猫である
名前はまだ無い
……"
[改行]
20191002[Tab]"親譲りの無鉄砲で
子供の頃から
損ばかりしている
……"
日付と本文が交互に現れるテキストを日付と本文とに分けてキャプチャして置換したいのですが、上手く行きません。
最短一致を使用すると本文が一行しかキャプチャできないし、最長一致ですと最後の日付までの全行がキャプチャされてしまいます。
どうかご教示下さい。
44デフォルトの名無しさん
2019/10/31(木) 20:12:39.29ID:qSOPmN+b
>43

検索
(^[0-9]{8})\n

置換
\n$1\t
45デフォルトの名無しさん
2019/11/01(金) 00:19:13.27ID:l+SDkm5c
Ruby では、

text = <<"EOT"
20191001

20191002


EOT

# キャプチャー部分の、#{ $1 } は、8桁の数字
p res = text.gsub( /^(\d{8})\n/ ) { "\n#{ $1 }\t" }
print res

出力
[空行]
20191001[Tab]あ
[空行]
20191002[Tab]い
46デフォルトの名無しさん
2019/11/01(金) 08:08:52.32ID:TORoDjzQ
>>44
ご回答ありがとうございます。
すみません。本文部分を"で括りたくて、数字8桁に挟まれた部分にマッチさせたいのです。
47デフォルトの名無しさん
2019/11/01(金) 09:29:10.19ID:M2kmurNA
>>46
CotEditorでドットが改行に一致する状態なら以下でできる
(^¥d{8})(.*(?=¥n¥d{8})|.*(?=$))

Meryは知らん
48デフォルトの名無しさん
2019/11/01(金) 09:30:04.91ID:M2kmurNA
一応置換はこれ
$1¥t"$2"
49デフォルトの名無しさん
2019/11/01(金) 11:19:24.96ID:XqhX+0kD
(^\d{8})\n((?~^\d{8}))$
\1\t"\2"
最後の行が改行されてると"がズレるからそこだけ手作業
50デフォルトの名無しさん
2019/11/01(金) 11:25:13.23ID:zrbJp7o3
negative lookahead
https://regex101.com/r/DBWwcI/1

最下行に日付+改行を付け足せばORが一つ減って少し読みやすい
https://regex101.com/r/R3MQz7/1
51デフォルトの名無しさん
2019/11/01(金) 13:33:34.02ID:i0nQhs53
>>43
^([0-9]{8})\n((?:(?!\n[0-9]{8}\n)[\S\s])+)
52デフォルトの名無しさん
2019/11/01(金) 13:55:21.62ID:IH7Homqm
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\Z)
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\z)

$1\t"$2"
53デフォルトの名無しさん
2019/11/01(金) 14:05:57.48ID:zrbJp7o3
>>50
negative lookaheadとか書きつつ全然negativeじゃなかったわ
54デフォルトの名無しさん
2019/11/02(土) 07:00:29.25ID:Y+w4hll1
皆様ありがとうございます
最短一致と先読みを組み合わせて
(\d{8})((?:.*\n)*?)(?=\d{8})
のような感じでマッチしました
単に.*だけだと行末までで止まってしまうので明示的に.*\nの繰り返しと指定しないといけなかったようです
55デフォルトの名無しさん
2019/11/18(月) 01:09:59.81ID:B3FWH6HK
/(A|B*|C+|D?|E?|)+/ は /[A-E]*/ と同じなんだろうか。
56デフォルトの名無しさん
2019/11/23(土) 19:09:02.72ID:S+7ZA2D+
=を含まない行を検索できる表現方法は?
57デフォルトの名無しさん
2019/11/23(土) 21:06:16.66ID:8xX8HZu8
>>56
^[^=]*$
58デフォルトの名無しさん
2019/11/24(日) 19:30:30.97ID:BlMs70wA
PCRE2 Version 10.34 21-November-2019
https://www.pcre.org/
59デフォルトの名無しさん
2019/12/07(土) 04:27:54.74ID:Dhp88CPz
今でもアクティブに更新してるのってPCREの他はre2と鬼車系くらいなのかな
昔はライブラリの話も結構してた気がするけど
60デフォルトの名無しさん
2019/12/07(土) 11:10:24.58ID:hNCBwRLG
Hyperscan
61デフォルトの名無しさん
2019/12/07(土) 19:19:38.35ID:S05zsHBk
テキストエディタで見えないけど何かがある状態
MacのBBEditだと逆さまの赤い「?」が表示される状態なんですけど
こういうのを正規表現で捕まえる事って出来ないですか?
62デフォルトの名無しさん
2019/12/07(土) 19:21:06.34ID:+kYKAjJc
否定で出来ない?
63デフォルトの名無しさん
2019/12/07(土) 20:27:35.79ID:S05zsHBk
>>62
色々やってみたけど
非単語構成文字に含まれてしまい上手くこれだけ抽出出来ないです
一体こいつは何者なんだろう? もうちょい悩んでみます
64デフォルトの名無しさん
2019/12/07(土) 20:32:56.16ID:tj55yZgB
そういうときはバイナリエディタで開いて該当部の文字コード引きなよ。
65デフォルトの名無しさん
2019/12/07(土) 20:51:47.44ID:S05zsHBk
ありがとうです
\x{7F}
でいけました
66デフォルトの名無しさん
2019/12/07(土) 21:19:40.77ID:b/g70Kck
ウムラウトなどのアクセント付きアルファベットにのみ一致させる正規表現をお教えください。
67デフォルトの名無しさん
2019/12/07(土) 21:54:33.96ID:hNCBwRLG
正規表現だけではまだできないんじゃないかな?

一般的には各言語が持ってるUnicodeの正規化機能を使って検索対象を基底文字+結合文字の形に正規化してから、結合文字を検索する
68デフォルトの名無しさん
2019/12/07(土) 22:53:57.20ID:/3OJwFPr
日本語なら、NKF というライブラリがあるように、
ウムラウトなら、その国のライブラリがあるかも知れない

知らないけど

まあ、日本人に聞いても、ムダだと思うw
使っている国の人に、聞いた方がよい
69デフォルトの名無しさん
2019/12/07(土) 23:41:45.44ID:FrJsgiML
cpanライブラリの中に一般的な正規表現集めたものがあるから
その中にあるかもね
70デフォルトの名無しさん
2019/12/08(日) 03:11:20.97ID:BNiynU8G
あるいは文字コードで標準ラテンのz(U+007A)よりあとを全て拾うように範囲指定するとか。
71デフォルトの名無しさん
2019/12/08(日) 12:38:28.10ID:h14g0YSH
>>66
数は知れてるんだから普通に[ÄäÏï …]ってやればいいんじゃね?
72デフォルトの名無しさん
2019/12/08(日) 14:00:42.26ID:0T/Za1/I
サクラエディタの正規表現ライブラリbregonig with Onigmoの場合、大文字小文字区別なしでßや\x{00DF}がssにヒットするので困る。
73デフォルトの名無しさん
2019/12/08(日) 14:15:46.03ID:B7mwO2xN
>>71
見た目が同じäでも文字コードの表現は複数ある
文字の種類も含めてこれで全部といえる集合を作れるならそれでいける
日本語で濁音が含まれる文字にのみ一致させる正規表現を求めてるのと似てる
74デフォルトの名無しさん
2019/12/08(日) 14:19:04.55ID:B7mwO2xN
Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
75デフォルトの名無しさん
2019/12/08(日) 17:17:16.59ID:qQWD6Mfj
[=a=]
equivalence class
76デフォルトの名無しさん
2019/12/08(日) 17:27:54.65ID:DxA2hCcs
●Regular Expressionの使用環境
鬼雲6.2.0 &Mery
●検索か置換か?
検索
●説明
行中の1個目の=にだけマッチさせたい
意味合いとしては
(?<=^[^=\n]+)=
なんだけど
>戻り読みの式は固定文字長でなければならない。
>しかし、最上位の選択子だけは異なった文字長が許される。
だそうで+はダメみたい
(?<=^(?~=))=
戻り読みの中に非包含もダメだった

(?<=^[^=\n]|^[^=\n]{2}|^[^=\n]{3}| .... |^[^=\n]{1000})=
とかすれば無理矢理出来そうだけどもっとスマートな書き方無いかな?
77デフォルトの名無しさん
2019/12/08(日) 17:35:15.85ID:X/tkXkh9
^.*?\K=
78デフォルトの名無しさん
2019/12/08(日) 17:45:34.12ID:DxA2hCcs
>>77
ありがとう
速っ。数日悩んであれこれ試してたのが嘘みたいなあっさり回答w
\Kとか意味分かってなかったけどこうやって使うんですね
重ね重ねありがとうございました
79デフォルトの名無しさん
2019/12/08(日) 18:23:57.85ID:B7mwO2xN
>>75
それだとウムラウトついてないのも引っかかるよね
80デフォルトの名無しさん
2019/12/08(日) 22:21:07.36ID:DSHI20Cf
\K
いいなそれと思ったけど自分の環境では使えなかった残念
81デフォルトの名無しさん
2019/12/09(月) 17:04:00.86ID:o6YMciNa
>固定文字長で >最上位の選択子だけは異なった文字長
これはこういう意味かな
(?<=^[^=\n]{1,1000})=
82デフォルトの名無しさん
2019/12/09(月) 21:21:57.03ID:wMFl4+9a
鬼車のは (?<=ab|cd) だけじゃなく (?<=ab|cde) みたいなのも可ってことだったと思う

戻り読みを本当に後戻りしながらマッチングしてる実装ってほとんどなくて
大抵は文字列を一旦n文字分巻き戻して先読み相当の処理をするって感じになってるんで
パターンコンパイル時に「n文字分」が確定できない表現は弾かれる
83デフォルトの名無しさん
2019/12/11(水) 02:25:16.21ID:ue3GcKd8
グレップ坊や というソフト使ってますが
正規表現で、データだけ検索 データーを除外したい
どいう表記になりますか?
84デフォルトの名無しさん
2019/12/11(水) 02:56:43.47ID:ivhCTlPt
データを表現する正規表現が基本
除外については反転オプションないの?
本家 grep には -v で反転する
85デフォルトの名無しさん
2019/12/11(水) 13:45:29.55ID:Jxz7JQeN
データ(?!ー)
データ(?=[^ー])
否定先読みか先読みが使えるならこれで出来る
独自のものだと適切なエスケープが必要かも
VB6ランタイム必要とあるからたぶんVBだろうけど
8684
2019/12/14(土) 01:37:01.84ID:atjDTluR
下のほうで行けました
87デフォルトの名無しさん
2020/01/02(木) 13:19:03.26ID:MApT2CVk
●Regular Expressionの使用環境
sed-4.7-x64.exe
(Gnu sed4.7のwindows版 https://github.com/mbuilov/sed-windows)
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です
88デフォルトの名無しさん
2020/01/02(木) 13:33:45.38ID:LqVuN/CI
>>87
> うまくいかない
なぜどううまくいかないのかを書かないの?
89デフォルトの名無しさん
2020/01/02(木) 13:48:39.30ID:MApT2CVk
何も削除されずに元のファイルがそのままです。
エラー表示等はないです。
90デフォルトの名無しさん
2020/01/02(木) 16:53:21.09ID:gZNl6+48
^(.{2})(.{3}).(.*)$
$1/$2$3
91デフォルトの名無しさん
2020/01/02(木) 17:35:51.43ID:fx8yTANL
sed -i ?
92デフォルトの名無しさん
2020/01/02(木) 18:35:38.12ID:gZNl6+48
sed -E "s/^(..)(...)\s(.*)/\1\/\2\3/" .\ファイル.txt
93デフォルトの名無しさん
2020/01/13(月) 16:24:20.40ID:pG6qAwQV
●Regular Expressionの使用環境
正規表現の本・テキストで疑問に思った部分ですので特に環境は無いです 

●対象データ
太郎はテニス部のキャプテンです。
太郎はサッカー部のキャプテンです。
太郎は野球部のキャプテンです。
太郎はバスケ部のキャプテンです。

●検索か置換か?
検索

●希望する結果
太郎はテニス部のキャプテンです。
太郎はサッカー部のキャプテンです。
太郎は野球部のキャプテンです。

●説明
通常の 太郎は(テニス|野球|サッカー)部のキャプテンです では無く
バスケ という単語を使い正規表現を作りたいのです
()を使った場合(使わなくても バスケ を用いた方法であれば良い)
の否定文・除くの書き方がわかりません
^ を使っってみましたが上手く行きませでした

太郎は(^バスケ)部のキャプテンです。 ・・ダメ
太郎は^(バスケ)部のキャプテンです。 ・・ダメ  
太郎は(\^バスケ)部のキャプテンです。 ・・ダメ

バスケ を使った場合どの様に記述すれば良いのでしょうか?
94デフォルトの名無しさん
2020/01/13(月) 16:54:41.37ID:omefpgVu
否定は、(?!文字列)
でも、太郎は(?!バスケ)部の、とは書けないよ
「太郎は」に続く「バスケでない任意の1文字以上の文字列」部のキャプテンという風に考えてみてくれ
95デフォルトの名無しさん
2020/01/13(月) 17:05:50.06ID:KqHO+Fgo
>>93
正規表現だけでは否定を完全実現できない。
だからこそ、例えばgrepには -vオプションがある。いずれのライブラリやアプリも正規表現とは別の方法で否定を実現している。
96デフォルトの名無しさん
2020/01/13(月) 17:19:50.81ID:isx+DaHv
太郎は(?!バスケ).*部のキャプテンです。
太郎は(?!バスケ).*
(?!.*バスケ)太郎は.*部のキャプテンです。
(?!.*バスケ)太郎.*
(?!.*バスケ).*
97デフォルトの名無しさん
2020/01/13(月) 17:32:26.06ID:isx+DaHv
鬼雲 非包含
^(?~バスケ|\n)$
98デフォルトの名無しさん
2020/01/13(月) 18:15:40.74ID:pG6qAwQV
太郎は(?!バスケ).*部のキャプテンです。
にて出来ましたが
(?!バスケ) の扱いを .* でさらに処理しなきゃいけないのは全く思いつかないです
今回のを参考に今後も学習してみます

皆様 >>94->>97 ありがとうございました
99デフォルトの名無しさん
2020/01/13(月) 18:19:19.63ID:isx+DaHv
>>98
https://abicky.net/2010/05/30/135112/
100デフォルトの名無しさん
2020/01/14(火) 22:34:44.82ID:kxfWTRop
^(?!.*バスケ)(?=.*キャプテン)(?=.*太郎).*
101デフォルトの名無しさん
2020/01/15(水) 00:24:06.58ID:qFZTgD7k
'あ'.match(/[あ゙い゙ゔえ゙お゙]/u)

(環境依存文字ですが、[]の中身は濁点つきの「あいうえお」です)
'あ'は濁点なしなのでマッチさせたくないのですがしてしまいます
これってマッチしないようにする方法はないですか?
JavaScriptです
102101
2020/01/15(水) 00:30:34.00ID:qFZTgD7k
>>101 自己解決しました

'あ'.match(/\u3099/u) //マッチしない
'あ゙'.match(/\u3099/u) //マッチする
103デフォルトの名無しさん
2020/01/15(水) 12:08:15.81ID:lFvJ7mPZ
^(?!.*バスケ(?!ット(?!ボール(?!選手)))).*
バスケ          ←不一致
バスケット        ←一致
バスケットボール    ←不一致
バスケットボール選手 ←一致
太郎はバスケットボール選手としてバスケ部に入部している ←不一致
太郎はバスケットボール選手としてバスケット部に入部している ←一致
104デフォルトの名無しさん
2020/01/15(水) 14:36:24.87ID:mWwHDwCD
んなことよりバスケやろうぜ
105デフォルトの名無しさん
2020/02/09(日) 22:06:03.00ID:XBEo77KP
マッチしたカッコ内の文字列をを利用する方法ってどうやるんでしたか?

http://hogehoge.jp
http://(.*).jp

このアスタリスクの部分を利用するのはどうやるんでしたかね
t1ではないです
106デフォルトの名無しさん
2020/02/09(日) 22:18:21.72ID:6++kPC7v
>>105
>>2
> スルーされにくい質問のテンプレと例
> ●Regular Expressionの使用環境
107デフォルトの名無しさん
2020/02/09(日) 22:22:12.18ID:XBEo77KP
$1ですねどうも
108デフォルトの名無しさん
2020/02/09(日) 22:34:23.16ID:XBEo77KP
同じ行にあるurlにhrefを加える正規表現はどうするのでしょうか

http://hoge1.jp http://hoge2.jp
↑これを
<a href="http://hoge1.jp";>http://hoge1.jp<;/a> <a href="http://hoge2.jp";>http://hoge2.jp<;/a>
こうしたいです

1つだけならこうできます
http://(.*).jp
109デフォルトの名無しさん
2020/02/09(日) 22:34:49.85ID:XBEo77KP
http://$1.jp
を忘れていました
110デフォルトの名無しさん
2020/02/10(月) 14:37:14.41ID:8D13KkA5
正規表現よりも、HTML パーサーの方がよい。
Ruby のnokogiri で、HTML をパースすると、

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<html><body>
<a href="http://hoge1.jp";>http://hoge1.jp<;/a>
<a href="http://hoge2.jp";>http://hoge2.jp<;/a>
</body></html>
EOT

elements = doc.css( "a" )

# 属性・テキスト
elements.each { |elem| puts elem.get_attribute( "href" ), elem.text }

出力
http://hoge1.jp
http://hoge1.jp
http://hoge2.jp
http://hoge2.jp
111デフォルトの名無しさん
2020/02/10(月) 18:02:57.53ID:cKG4UD69
>>110

>>108はHTMLをパースしたいんじゃなく
HTMLの一部を生成したいんじゃろ
112デフォルトの名無しさん
2020/02/11(火) 07:15:58.31ID:Kcy+Q8b9
>>108
.jpが末尾につく行がリンクだと仮定してjavascript

/^(.+\.jp)$/gm

上記の正規表現で

<a hef=“http://$1”>http://$1<;/a>

正規表現のフラグのmで複数行対応、gで複数の結果で対応出来ん?
113デフォルトの名無しさん
2020/02/11(火) 13:30:47.89ID:yXLnwJ70
(https?://\S+)
<a href=“\1”>\1</a>
114デフォルトの名無しさん
2020/02/12(水) 09:21:48.77ID:iIu6BAwU
1) (hoge)
2) (hoge, fuga)
3) (hoge, fuga, piyo)

2) のみにマッチする正規表現のご教示よろしくお願いいたします

鬼雲
115デフォルトの名無しさん
2020/02/12(水) 10:28:49.15ID:bUEb5r3d
hogeとfugaを後で使うと仮定して
\((.+),(.+)\)
116デフォルトの名無しさん
2020/02/12(水) 10:51:06.48ID:NK/UnlDo
>>115
それだと3)にもマッチするよ
117デフォルトの名無しさん
2020/02/12(水) 11:05:14.78ID:W9U9giTl
>>114
a\)
118デフォルトの名無しさん
2020/02/12(水) 15:06:59.76ID:bUEb5r3d
.を[^,]でどう?
119デフォルトの名無しさん
2020/02/12(水) 15:37:27.75ID:iIu6BAwU
ID:bUEb5r3d 様
ありがとうございました。m(_ _)m

「\([^,]*,[^,]*?\)」で希望動作になりました
120デフォルトの名無しさん
2020/02/12(水) 18:44:57.81ID:bUEb5r3d
どういたしまして。

ちなみに+じゃなくて*にしてるのは
(,)
にも一致させたいという事?
あと?は無くても動かん?
121デフォルトの名無しさん
2020/02/12(水) 18:51:28.08ID:gdzQpnag
[^,]*だと改行と閉じ括弧を含んでしまい
次の行まで選択してしまうのでは?
122デフォルトの名無しさん
2020/02/12(水) 19:37:56.96ID:bUEb5r3d
確かにこんなデータも想定するとアウトやね

((hoge,huga)piyo)

改行はオプション次第だね
123デフォルトの名無しさん
2020/02/18(火) 23:17:54.25ID:TkHg8SjE
指定した2つの文字XYの間がn文字以下(0を含む)にマッチする検索方法教えてください

マッチ例n=3
XY
XaY
XabcY

NG
XabcdY
124デフォルトの名無しさん
2020/02/18(火) 23:50:11.22ID:rgk/DkAY
X.{0,3}Y
とかかな、試してないけど
125デフォルトの名無しさん
2020/02/19(水) 00:18:10.76ID:Y6/DCNeg
>>124
ありがとうございます
126デフォルトの名無しさん
2020/02/24(月) 14:31:40.12ID:iLDNrypx
●Regular Expressionの使用環境
実際に使う環境は不明ですが、まずはサクラエディタで試そうと思います。

●検索か置換か?
検索。マッチ部分を抽出できる必要はなく、含むかだけわかれば良いです。

●説明
文章(サクラは複数行NGとのことなので、今は1行)の中に「市」という文字が入っているかを判定したいです。
しかし、「横浜市」のような地名が入っているかを判定したいので、「巨大都市」「姉妹都市」のような特定のワードは排除したいです。
>>103の前後が逆のパターンになると思うのですが、単純に「^(?!.*(?!(?!巨大都|姉妹都)市)).*」とすると何もマッチしなくなってしまいます。
(そもそも「^(?!.*(?!ット(?!ボール))).*」の時点で「バスケット」にマッチしません)

●対象データ・希望する結果
ここは巨大都市だ
(マッチなし)
ここは横浜市だ
     ^
ここは巨大都市の横浜市だ
          ^
127デフォルトの名無しさん
2020/02/24(月) 14:48:12.43ID:iQYTd9Fe
>>126
(?<!巨大都|姉妹都)市

Negative Lookbehindを使う
https://regex101.com/r/kP6luP/1
128126
2020/02/24(月) 15:48:38.69ID:iLDNrypx
>>127
できました、ありがとうございます
後読みというのもあるんですね
129デフォルトの名無しさん
2020/03/21(土) 15:01:32.98ID:Ycs9n4/m
どなたか教えてください。0が含まれる行のみ/以降を削除したいです。

(処理前)
2/3004
67//1
503/11/4
4/6/978

(処理後)
2
67//1
503
4/6/978

実際の文字列は数字とは限りません。可能かわかりませんがどうぞお願いします。
130デフォルトの名無しさん
2020/03/21(土) 16:32:31.37ID:S0XSDbOV
>>129
使用環境も書きましょう。
プログラミング言語かテキストエディタかでも大分違ってきますし。

スルーされにくい質問のテンプレと例

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

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

※ ^ はアンダーラインだそうな ^^;
131デフォルトの名無しさん
2020/03/21(土) 16:58:05.15ID:iWBNd/W/
^(?=.*0)([^/]*).*$
\1
132デフォルトの名無しさん
2020/03/21(土) 18:17:29.30ID:Ycs9n4/m
>>131
すごい!完璧に希望どおりにできました!
アリガトウゴザイマス!!!
133デフォルトの名無しさん
2020/03/22(日) 11:16:42.62ID:nQo0XPUd
●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
134デフォルトの名無しさん
2020/03/22(日) 11:49:39.63ID:feI8vnc9
0000などは連番扱いされないの?
135デフォルトの名無しさん
2020/03/22(日) 11:55:19.77ID:zGmYOqdI
>>133
正規表現の方言がマイナー過ぎて難しい
:^isDigit: はPerl5でいう [^0-9] と等価という理解で合ってる?
136デフォルトの名無しさん
2020/03/22(日) 12:16:09.69ID:loDgnmn0
ファイル名の最後の数字部分だけ取りたいなら (\d+).jpg とかじゃ駄目なん?
137デフォルトの名無しさん
2020/03/22(日) 12:33:09.14ID:zGmYOqdI
>>133
そもそも :^isDigit: の前に .*は必要?
138デフォルトの名無しさん
2020/03/22(日) 12:39:04.69ID:nQo0XPUd
>>134
その辺は捨てます
拡張子直前の数字だけを連番扱いです

>>135
それでいいです
書き方が変わってますが考え方は一緒です

>>137
ないとマッチしませんでした
139デフォルトの名無しさん
2020/03/22(日) 12:41:01.29ID:nQo0XPUd
>>136
試しましたがマッチしません
140デフォルトの名無しさん
2020/03/22(日) 12:43:52.41ID:nQo0XPUd
書き忘れましたが
ファイル名だけでなくファイルパスを含む場合があります・・

ex.
/a/b/c/d/_0000_1111_2222_3333.jpg

3333.jpgのようなパターンさえなければ対応できているのですが
これが来た場合にうまくいきません
141デフォルトの名無しさん
2020/03/22(日) 13:22:29.93ID:ilL19jCu
>>139

>>136のだと
拡張子のピリオドがエスケープされてないから
(\d+)\.jpg
でキャプチャ箇所を抽出すればよいのでは?
142デフォルトの名無しさん
2020/03/22(日) 13:27:20.03ID:nQo0XPUd
>>141
エスケープ付けてテストしてあります
143デフォルトの名無しさん
2020/03/22(日) 13:29:10.24ID:aG3rJm5+
>>140
(/a/b/c/d/_0000_1111_2222_)?3333.jpg
144デフォルトの名無しさん
2020/03/22(日) 13:33:55.99ID:nQo0XPUd
>>143
マッチします
145デフォルトの名無しさん
2020/03/22(日) 13:53:17.55ID:7GTLasBi
>>138
メソッドは何を使っているの
メソッドによって「文字列の先頭で一致する」とか
「文字列の任意の場所で一致する」とかあるでしょ
前者を使っているのでは?
後者なら>>136の類で上手く行くと思う

さもなくば ^(|.*:^isDigit:)(:isDigit:+)\.(:isAlphabetic:+)$ でどうかな
146デフォルトの名無しさん
2020/03/22(日) 14:25:12.02ID:HpFFHFhU
JavaScript なら、これで一致するので、
キャプチャー部分だけを取り出す

var re = /(\d+)\.jpg/g;
147デフォルトの名無しさん
2020/03/22(日) 14:31:11.47ID:loDgnmn0
文字列の先頭からしかマッチできないんなら .*(\d+).jpg でいいんじゃね
ルールがローカルすぎてよくわからんが
148デフォルトの名無しさん
2020/03/22(日) 14:42:52.35ID:I5Su+SV6
>>133
>これだと3333.jpgなどのパターンに対応できない
ORでそのパターンをカバーしてやればいいよね
149デフォルトの名無しさん
2020/03/22(日) 14:50:15.15ID:loDgnmn0
(.*[^\d])?(\d+)\.jpg
150デフォルトの名無しさん
2020/03/22(日) 15:07:09.29ID:nQo0XPUd
>>145
先頭からスキャンするメソッドしかないようです
試して見たところうまく行きそうなのでテストしています
あまり関係ないですがisDigitやisAlphabetic自体がメソッド名で
char.isDigit(); みたいに内部的に呼ばれています

>>147
それだと最長一致の関係で
3333のうち3だけ取り出されてしまいます

>>149
こちらもうまく行きそうです

後ほど結果ご報告致します
151デフォルトの名無しさん
2020/03/22(日) 15:21:27.08ID:H4vT0xhv
(.*[^\d])?(\d+)\.jpe?g
\2
152デフォルトの名無しさん
2020/03/22(日) 15:30:56.06ID:nQo0XPUd
一通り検査して全てパスできました
皆様ありがとうございました

それにしてもうまい方法があるものですね勉強になります・・
153デフォルトの名無しさん
2020/03/22(日) 21:42:28.57ID:hAKSIWAv
>>133を見て何が何だかだわ
皆さんスゲーな
154デフォルトの名無しさん
2020/03/23(月) 07:21:58.66ID:jGS2rL5b
VSCode なら、Regex Previewer という拡張機能がある

JavaScript, PHP の正規表現をテストできる
155デフォルトの名無しさん
2020/04/09(木) 01:23:43.84ID:o0bB5yvE
正規表現の段位、級位みたい試験があると転職に役立つかな
正規表現3段所持みたいな
試験問題はほとんどパズルだな

当方は頭悪いので、複数の単純な正規表現使用派
156デフォルトの名無しさん
2020/04/09(木) 14:34:47.92ID:67/p/Sga
正規表現必須!てな現場もそうそう無いだろうし
使えて当たり前、だけど高度過ぎる常人に思い付けないようなものが必要になる場面もまず無いだろうし
そうなったら出来る奴に丸投げすりゃいいし
プログラム内なら全て正規表現任せにせずに前処理した方が良いケースも多々あるからそれ絡めてのスキルだと思うし
方言が多い事や解が複数あり得る事も試験化には問題
マークシート選択方式では引っ掛け問題ばかりになるだろうし何か違う気がする
資格化したところで精々、文系脳の奴がどれだけ論理思考が出来るか?の目安とか雑なIQ判定くらいにしか役立ちそうにない
義務教育内でこんなのあるよ程度に最低限くらいは教えておいて欲しいけど資格化までは疑問かな
157デフォルトの名無しさん
2020/04/09(木) 18:11:21.90ID:AINw40ik
>>156
君は正規表現の前に日本語の義務教育受けてこいw
158デフォルトの名無しさん
2020/04/09(木) 21:20:08.08ID:HMI1Vo9o
日本語力に特段問題があるようには見えないが
159デフォルトの名無しさん
2020/04/09(木) 21:34:35.21ID:+PEAWxOJ
俺もちゃんと何言ってるのか分かったし、特に読んでて疑問も覚えなかったね
160デフォルトの名無しさん
2020/04/09(木) 22:20:15.44ID:zOdaCiQO
文章がくどいとは思う
161デフォルトの名無しさん
2020/04/09(木) 22:26:46.58ID:BSAQTOUE
難題を解決したらあいつスゲーなとなるけど
なかなかその機会が訪れないよな
162デフォルトの名無しさん
2020/04/09(木) 23:07:21.92ID:+PEAWxOJ
>>160
くどいというより接続詞で繋げすぎだね
163デフォルトの名無しさん
2020/04/10(金) 05:35:38.69ID:OHa28c9H
論文とかの文章ならどうかと思うけど
こういう掲示板での改行の仕方とか含めての表現では
別に問題ないよなと思った
164デフォルトの名無しさん
2020/04/10(金) 07:01:05.28ID:ZlkuoHXS
義務教育やり直せレベルにはみえない
雑文としては意味が通じないような文では無いだろう
157の日本語力が低杉なんじゃ?
165デフォルトの名無しさん
2020/04/10(金) 08:59:24.36ID:sn6MPl7m
>>161
パズルとしてはいいけど業務でやられると保守できなくなるしな
166デフォルトの名無しさん
2020/04/10(金) 09:02:57.81ID:sn6MPl7m
>>157フルボッコw
最初の方で「~し」を多用してるのがちょいウザいけど内容的にはまあ頷けるわな
167デフォルトの名無しさん
2020/04/10(金) 11:44:30.56ID:BcRc61MP
>>161
そいつじゃないとできないっていう状況を会社は嫌がるからね
いつやめるかもわからんし
資産がゴミ化してしまうのを恐れる
168デフォルトの名無しさん
2020/04/10(金) 14:42:19.38ID:k/YdHOe5
そもそも問題が複雑だから複雑な正規表現になってしまうのでは?
そういう場合はそいつじゃないとできないという状況になってしまうこともありうる
169デフォルトの名無しさん
2020/04/10(金) 15:00:43.02ID:71OQfeOs
うん、そういう場合もあると思うけど
多くの人はそもそも正規表現で解決出来るかもという発想がなくて
手間と時間をかけて頑張るか、その仕事を断る
そんな場合が多い気がする
170デフォルトの名無しさん
2020/04/10(金) 15:25:33.75ID:BcRc61MP
まあbison/flex使って片付けてたらそれはやめてくれとも言われたこともあるしな
引き継げないだろと
171デフォルトの名無しさん
2020/04/10(金) 16:34:01.15ID:sn6MPl7m
>>168
一例として…

頑張れば1つにまとめられる
でも場合分けすればコードは長くなるし性能も劣化するけどわかりやすく書ける

って言うケースはそれなりにあると思うよ
172デフォルトの名無しさん
2020/04/10(金) 23:03:46.23ID:ALVzSQYS
頑張りすぎちゃって誰もメンテできないような手に負えないSQLってたまに出くわすけど、
それと同じような要領で頑張りすぎちゃって誰もメンテできないような正規表現が出てきたら・・・・
自分だったらSQLのときよりもさらに全力で逃げ出すかなあ

正規表現ってただでさえ魔法のような暗号文化しがちだし(後で読解に困ることも多いし)
仕様を簡潔明瞭にコードに落とし込むスキルがないダメプログラマが
力技で正規表現ゴリゴリ書くことを考えるとかなりの恐怖
エスアイアーの現場ならむしろ安全のため正規表現全面禁止にしておくほうがマシなんじゃなかろうか
173デフォルトの名無しさん
2020/04/11(土) 00:23:01.95ID:yLiBv2Sb
三項演算子でも同じ問題あるね
可読性と簡潔性は必ずしも両立しない
174デフォルトの名無しさん
2020/04/11(土) 00:37:32.49ID:aIl7Qg1V
仕様がわかっていれば
ちゃんとしたドキュメントが残っていれば何とでもなる
暗号をわかりやすいプログラムに変換可能だから
とりあえず動いているので触りたくないというのどうにもならない
それはそのプログラムが近い将来破綻することを意味する
175デフォルトの名無しさん
2020/04/11(土) 01:03:41.61ID:Ni1vKiQd
>>172
正規表現は仕様の分かるテストケース一式を必ず用意させれば問題ない

つまり難しい正規表現を使いこなす能力よりも
もれなくテストケースを書ける能力のほうが大事
176デフォルトの名無しさん
2020/04/11(土) 05:53:16.03ID:qQ/s2VQN
>>175
あーあーそれはなんか分かる・しっくり来るな。完全同意だわ。
177デフォルトの名無しさん
2020/04/11(土) 09:32:41.81ID:Qk2+GLy8
>>175
でもそれって正規表現使っているか否かに関わらず本来なされているべきことだよね
正規表現とか特定の機能を使ってるところだけ特別扱いしてドキュメントやテスト仕様を残させるとか
絶対サボる人が出てきそう
でもってサボったところに限って誰も直せないようなクソコードと化すパターン
178デフォルトの名無しさん
2020/04/11(土) 16:30:10.27ID:Ni1vKiQd
>>177
仕様の分かるテストケースってのはテストコードのことね
正規表現は作る時に必ずマッチする例とマッチしない例を書いて確認するでしょ?
それを仕様の分かるテストコードにしてセットで扱えるようにしておくってこと
コードレビュー時も正規表現だけ見てレビューしても効果薄いから
テストコードとセットでレビューする

>でもそれって正規表現使っているか否かに関わらず本来なされているべきことだよね
これはそうでもないよ
複雑なSQLの場合は仕様の分かるテストコードを一式用意するのは結構難しくて
ある範囲を超えると手間に見合わないから仕様書とSQL自体のレビューだったり手動テストで補完する
正規表現は純粋関数として扱えるのでその辺の難しさがない
179デフォルトの名無しさん
2020/04/14(火) 11:27:53.60ID:uSEs8eKP
足並み揃えないと不安で死んじゃう病
180デフォルトの名無しさん
2020/04/14(火) 11:37:16.46ID:ARaCq1kB
人っていついなくなるかわからないからね
事故だったり勝手な理由で辞めたり
181デフォルトの名無しさん
2020/04/15(水) 10:44:15.36ID:MMPwOLF/
●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です。(できる限りシンプルな書式でお示しください)
サンプルお示しいただけたら、あとはググりながら自分で調べます。

ググったのですが、サンプルになるいい感じのシンプルな書式が見当たらず
どうにもうまく正規表現を作れずにおります。何卒宜しくお願い致します。
182デフォルトの名無しさん
2020/04/15(水) 11:13:15.42ID:ajU4Q4+G
カレンダーは西向く侍があるから正規表現単独では無理では……
183デフォルトの名無しさん
2020/04/15(水) 11:16:23.86ID:oU4wEPk/
>>181
意味がよくわからんが、
任意の日付から14日前(後?)を抜き出すってことなら
正規表現よりはscriptの領域だろ。
184デフォルトの名無しさん
2020/04/15(水) 11:19:34.98ID:MMPwOLF/
>>182
大体でもできないでしょうか。
と書こうと思ったときに思いつきました。。。

実行速度に問題が出るかもしれませんが、
3月15日または、3月16日または、3月17日または・・・4月15日。

って力技でやってみます・・・。

もし、ほかにも「こういう方法があるよ」って素敵なアイデアお持ちのかた
いらっしゃいましたら、ぜひレスをください。宜しくお願い致します。
185デフォルトの名無しさん
2020/04/15(水) 11:29:40.68ID:oU4wEPk/
>>184
そもそも4/15から14日前で何で3月が入るんだよ。
間飛んでる可能性があるって事?
だとすればなおさら正規表現向きではない。
186デフォルトの名無しさん
2020/04/15(水) 11:31:48.22ID:MMPwOLF/
>>185
すみません、そこは書き間違えです。
awkってコマンドでできそうなので
もう少し調べてみます。

スレ汚し失礼いたしました。
187デフォルトの名無しさん
2020/04/15(水) 11:48:04.80ID:oU4wEPk/
>>186
3/15〜4/15限定での力技なら
2020(¥-03¥-(1[5-9]|2[0-9]|3[0-1])|¥-04¥-(0[1-9]|1[0-5]))
188デフォルトの名無しさん
2020/04/15(水) 11:49:07.49ID:MMPwOLF/
>>183
ありがとうございます。
scriptというのが大きなヒントになり解決に至りました。

結果的にはこれでできました。
cat 対象ログファイル | awk '"2020-04-01" <= $2 && $2 < "2020-04-02"'

性器表現ばっかりにとらわれてました・・
ありがとうございます。
189デフォルトの名無しさん
2020/04/15(水) 13:19:12.50ID:Ut6Mn670
何を言いたいのかエスパーでもわからん
オーダーはもっと正確に
190デフォルトの名無しさん
2020/04/15(水) 16:37:41.08ID:h/7T7n1i
>>181
ちょっとだけややこしい検索にはawkがおすすめ
191デフォルトの名無しさん
2020/04/15(水) 16:53:34.03ID:z6xNdPvI
性器表現って(i)みたいなのだろw
192デフォルトの名無しさん
2020/04/21(火) 11:40:37.33ID:3ZBp0+Pn
●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

よろしくお願いいたします。
193デフォルトの名無しさん
2020/04/21(火) 11:41:25.90ID:3ZBp0+Pn
〇使用した正規表現(置換)
.*((([0-9]{1,3}\.){3})[0-9]{1,3}).*
$1

が抜けてました
194デフォルトの名無しさん
2020/04/21(火) 12:43:11.20ID:iVBBDkGx
今の奴を少し手直しして
.*\b(([0-9]{1,3}\.){3}[0-9]{1,3}).*
とか
.* (([0-9]{1,3}\.){3}[0-9]{1,3}).*

必ずfrom〜timeに挟まれるなら
.*from ([\d.]*) time.*
とか
195デフォルトの名無しさん
2020/04/21(火) 13:08:13.53ID:bjfyOojV
>>193
とても意味がわかって書いているとは思えないが。
ログがそのパターンだけならこれでいけるでしょ。
¥d+¥.¥d+¥.¥d+¥.¥d+
頭が192.168.だけならそれで絞ってもいいし。
196デフォルトの名無しさん
2020/04/21(火) 13:34:44.69ID:3ZBp0+Pn
>>194
両方ばっちりうまくいきました。
ありがとうございます。

\dとか\bとかいろいろあるんですね。
\t位しか知りませんでした。
ありがとうございます。
197デフォルトの名無しさん
2020/04/21(火) 22:38:03.26ID:alPdontK
.* を [^0-9]* もしくは \D*
198デフォルトの名無しさん
2020/04/21(火) 23:03:33.07ID:J0u+GdjC
推奨はしないけど、元の奴で、.*に?を追加して
.*?((([0-9]{1,3}\.){3})[0-9]{1,3}).*
199デフォルトの名無しさん
2020/05/16(土) 15:22:19.43ID:hjibA7SH
ランダムな文字列によるコピペ荒らしで
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,}

こんな風にすると新たな種類の文字がキャプチャされていくように思えますが
既に登場した文字が再び登場するとマッチしなくなります
200デフォルトの名無しさん
2020/05/16(土) 15:33:21.77ID:hjibA7SH
例を挙げると


↓慮↓鸞↑↓↓→慮↑←←↑→↑鸞↑→←→艪慮慮↑鸞鸞慮慮艪艪鸞→→↑慮↓→↓↓↑
慮鸞鸞艪艪→慮鸞艪鸞鸞↑慮艪慮艪慮↑←慮↑↑慮↑←艪→←鸞↑↓↑↑↓艪↓鸞慮→→
→艪←艪←↓↓←艪←↑→←←←鸞↓↓艪↑鸞←鸞←↓慮鸞←慮←慮↓慮慮慮慮↓↑艪

こんな感じの荒らしです
文字は毎回ランダムで変わります
登場する文字の種類が少ないという点でマッチさせたいと思っています
201デフォルトの名無しさん
2020/05/16(土) 15:34:13.39ID:C+uyEXd2
(.)\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]*
こんな感じ?
202デフォルトの名無しさん
2020/05/16(土) 19:45:32.29ID:hjibA7SH
>>201
試したらそれだとほぼ全ての文章にも当てはまるみたいです
203デフォルトの名無しさん
2020/05/16(土) 20:00:27.44ID:C+uyEXd2
^(.)+(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)*
文字クラス中で後方参照使えないなら否定先読みで代替
204デフォルトの名無しさん
2020/05/16(土) 20:04:12.78ID:C+uyEXd2
訂正
試してなかった
^(.)\1*(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)*
205デフォルトの名無しさん
2020/05/16(土) 20:19:48.01ID:vPXPesfb
無理だと思ったけどなんかできたわ
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}
206デフォルトの名無しさん
2020/05/16(土) 20:35:19.65ID:hjibA7SH
>>203-205
ありがとうございます!
後方参照難しいですね…
207デフォルトの名無しさん
2020/05/16(土) 20:49:23.06ID:YcXGn5Zu
言ってる通りの条件でやると滅茶苦茶誤爆して使い物にならんと思う
例が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)*$

【改行】とその前の改行を削除
208デフォルトの名無しさん
2020/05/16(土) 21:09:00.00ID:BiE2hTzx
別の判定要件にしないと誤爆頻発しそう...

例えば「特定コード範囲の文字が連続n回出現でNG」とかじゃダメなの?
209デフォルトの名無しさん
2020/05/16(土) 21:23:17.44ID:hjibA7SH
>>208
確率的に連続しないケースが結構出ちゃいますよね
210デフォルトの名無しさん
2020/05/17(日) 01:33:54.38ID:C/hIIgkx
文字→文字または文字パターン、でどうだろう

そのボットの仕様を把握してないし実際のレスも見たことないのでなんとも言えないけど、文字種の制約以外に傾向を見いだせないってこと?
211デフォルトの名無しさん
2020/05/17(日) 03:28:48.68ID:EMK05c2V
>>210
こんな感じ


東大医学部医学科卒業、3年連続国試不合格のルシファーさん、偏差値95.3を取った模試の成績表をTwitterのヘッダーにしてしまう
http://2chb.net/r/poverty/1589560323/

電光掲示板的な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,}
で完璧に対応出来てる
212デフォルトの名無しさん
2020/05/17(日) 03:45:05.05ID:EMK05c2V
17文字もあるのに文字種が8種以内って
自然言語としては有り得ないわけですよ
そのエントロピー的な性質をターゲットにしてる
つまり完全ランダムじゃなくて電光掲示板的に嫌がらせメッセージを目立たせたいという意図を持ってるから可能になる手法
213デフォルトの名無しさん
2020/05/17(日) 03:46:57.41ID:C/hIIgkx
>>211
なるほどw
214デフォルトの名無しさん
2020/05/17(日) 04:00:56.20ID:EMK05c2V
こうかはばつぐんだ!

必死にNG逃れのためのスクリプト書いたのに全て通用しなくて発狂して逃げたww
215デフォルトの名無しさん
2020/05/17(日) 04:36:26.20ID:zN/y7CUr
結果として片棒担がされてた訳か

http://2chb.net/r/poverty/1589560323/870
870 番組の途中ですがアフィサイトへの転載は禁止です (ワッチョイW 2bde-sAUE) 2020/05/17(日) 00:30:59.00 ID:LtSh5oo60
再度書き込みなっちまったけど、レスすんなよ
グズ正規表現野郎。
お前が煽ったせいで、さらにサキオタアンチがめんどくさくなった。
皆、ひっそり、IDやワッチョイと、少しの正規表現でNGしてた。
それらができない5chブラウザとかあるのに。

自分だけ調子に乗るなよクズ。
216デフォルトの名無しさん
2020/05/17(日) 04:41:56.29ID:EMK05c2V
>>215
それ荒らし本人が正規表現で完封されるのが悔しくて書いたやつだぞ
217デフォルトの名無しさん
2020/05/17(日) 04:45:15.72ID:zN/y7CUr
そうなのか
でもはたから見てると一緒だと思うよ
荒らし構うのはただの荒らしだよ
218デフォルトの名無しさん
2020/05/17(日) 04:53:36.77ID:EMK05c2V
>>217
この荒らしは誰からも無視されてるのに何年も続けてる奴だからな
自分がターゲットにされて遊ばれて悔しいという体験は初めてだろうな
放置すれば荒らしが消えると思うのは間違い
キチガイは何年でも休まずに荒らし続ける
しかも手動で

そのキチガイの世界を壊してあげる作戦
219デフォルトの名無しさん
2020/05/17(日) 05:51:07.31ID:zN/y7CUr
自粛警察みたいな奴だな
正義とか妄信しない方が良いぞ
220デフォルトの名無しさん
2020/05/17(日) 05:52:32.20ID:EMK05c2V
アホを悔しがらせて頭の体操になるなんて最高やん
こんな快感なこと他にある?
221デフォルトの名無しさん
2020/05/17(日) 13:46:59.90ID:2FMa8UuX
正規表現を自動生成するAIはまだ?
222デフォルトの名無しさん
2020/05/17(日) 18:37:04.48ID:EMK05c2V
機械学習で正規表現を獲得するみたいなの出来ないですかね
223デフォルトの名無しさん
2020/05/17(日) 20:33:27.11ID:MuJmPUno
他力本願+ノイズは一人前
224デフォルトの名無しさん
2020/05/29(金) 08:30:19.28ID:/k2a15rY
*でも+でもどちらでもよいという場面では*にするのが慣例でしょうか?それとも文字通りどちらでもいいのかな?
225デフォルトの名無しさん
2020/05/29(金) 11:43:39.33ID://ihWgfL
このスレに来る奴って論理的思考をする人達だと思ってたけど、
慣例とか持ち出すような奴も来るんだな
意味が有って違うSyntaxなんだから適切な方を使え
226デフォルトの名無しさん
2020/05/29(金) 12:20:15.31ID:KLwVXlC+
どっちでもいいってどういう場合だ
どっちかになるだろ
227224
2020/05/29(金) 13:19:30.03ID:YZO921+1
例えば対象が1回以上の繰り返しだとします
0回以上には1回以上が含まれているのだから、どちらかが適切であるという積極的な理由が見つかりません
228デフォルトの名無しさん
2020/05/29(金) 13:22:19.49ID:KLwVXlC+
一つも無くていいってのと一つは必ず無いといけないってのは両立する場面は無い
229デフォルトの名無しさん
2020/05/29(金) 13:27:35.99ID:zvuAHZcb
「1回以上」ならつべこべ言わずに"+"だな
「0回は外したい」という意味を含むのであれば
"*"は仕様から外れる
個人的には"*"はできるだけ使わない
230デフォルトの名無しさん
2020/05/29(金) 15:05:09.67ID:IKIHl4j2
1回以上であることが分かっているのであれば0回の可能性がないことを示しておけるというのが合理的理由だよ。
*でマッチさせられるとしても後からソース見て混乱するだけだ。慣例といえば慣例だが機能すればいいというものでもない。
231デフォルトの名無しさん
2020/05/29(金) 19:24:39.89ID:ZvrYTh83
>>227
読む人(未来の自分含む)のことを考えれば、可能な限り対象を絞り込んだ方が(設計意図が読み取りやすくて)よい
232デフォルトの名無しさん
2020/05/29(金) 21:22:17.43ID:VNOYZXTT
A+とAA*の効率化の話かと思った
AA*の方が最初のAで最適化される分だけ速いとかなんとか
233デフォルトの名無しさん
2020/05/29(金) 21:49:09.90ID:dZOo8Hm0
>>232
オートマトンを組むので速度は変わらないと思うが
234デフォルトの名無しさん
2020/06/18(木) 21:13:18.22ID:jAvldfC1
Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚

上を下としたいのですが、2回に分けることは可能ですが、1回でやれますでしょうか?スラッシュが含まれる場合、そこをエスケープしたいのです
scriptタグ貼ると怒られますので、画像です(´・ω・`)、、、
235デフォルトの名無しさん
2020/06/18(木) 22:17:30.24ID:3QD4/INi
>>234
正規表現: (<([^>]+)>[^<]*<)(/\2>)
置換   : "$1\$3"
236デフォルトの名無しさん
2020/06/18(木) 22:21:10.54ID:3QD4/INi
環境によっては
置換: "$1\\$3"
としないとダメなこともあり
237デフォルトの名無しさん
2020/06/18(木) 22:28:45.36ID:3QD4/INi
>>235 は.NET
>>236 はperl

sed だと
置換: "\1\\\3"
238デフォルトの名無しさん
2020/06/18(木) 22:37:34.06ID:G7fdNfOT
<スクリプト>(ここが変化)</スクリプト>
って感じでスクリプトとスクリプトの間が変化するだけじゃない?
239デフォルトの名無しさん
2020/06/18(木) 22:42:36.83ID:L9lBZl+g
間があるのなら通常1行ではないだろう
240デフォルトの名無しさん
2020/06/18(木) 22:48:48.44ID:kZOKQ/+u
<script>([^\b]*?)</script>
"<script>\1<\\/script>"
241デフォルトの名無しさん
2020/06/19(金) 02:59:23.82ID:yAdMpEG/
厚生労働省がガイドラインを発表…「副業」公認の時代が来た?
https://www.iza.ne.jp/kiji/economy/news/200516/ecn20051620000005-n1.html
フリーランス向け報酬即日払いサービス『先払い』受付開始7ヶ月で申込件数1,000件突破
https://prtimes.jp/main/html/rd/p/000000026.000047439.html
副業プラットフォーム「Kasooku」が約1.9億円調達、マッチング件数は5000件突破
https://jp.techcrunch.com/2020/04/30/kasooku-fundraising/
副業がしやすくなった?リモートワークを実施してよかったと思うことTOP5
https://dime.jp/genre/914967/
ポストコロナ時代の人生に副業は欠かせない
https://www.gentosha.jp/article/15457/
副業が社員を強くする コロナ・ショックが加速する新しい雇用の形
https://business.nikkei.com/atcl/gen/19/00149/042300009/
4割以上が「副業意欲向上」「副業しやすくなった」と変化|
新型コロナウイルスの影響下における働き方の実態・意識調査
https://prtimes.jp/main/html/rd/p/000000009.000040832.html
242デフォルトの名無しさん
2020/06/19(金) 05:44:59.40ID:LA4wBl0H
https://ideone.com/jkDxgX
ごめんなさい
scriptタグだけではないです
行頭と行末に"を挿入し、スラッシュをコメントアウトしたいのです、、、(´・ω・`)
243デフォルトの名無しさん
2020/06/19(金) 07:43:33.01ID:b4DLgcmt
>>242
タグ内にタグ(正確には < )が入らないなら >>235さんので出来るよ
> 行頭と行末に"を挿入し
タグの間に改行が入ることは無いの?タグは関係なしに文字通りに行頭と行末?
環境も分からないし>>2のテンプレ通りに条件を例示して
244デフォルトの名無しさん
2020/06/19(金) 10:22:50.49ID:ecFmQJtB
鬼雲
(?<!")(<([^>\s]++).*?>[^\b]*?<)(/\2>)(?!")
"\1\\\3"

制限
ネストの回数分、全置換の繰り返しが必要
<div id=a><div id=b>test</div></div> こういうのも行けるが
id=aの開始タグとid=bの終了タグの組み合わせで置換され次にid=bの始、id=aの終で処理される
<div id=a>"abc"<div id=b>test</div>"def"</div> タグの外側直近に"があるものは否定(先|戻り)読みで"を見ているので無理
245デフォルトの名無しさん
2020/06/19(金) 11:06:15.25ID:LA4wBl0H
●Regular Expressionの使用環境
mery2.6.7です
●検索か置換か?
置き換えしたいです
●説明
先頭と行頭に"を追加し、/をエスケープしたいです
●対象データ
https://ideone.com/mNblKp

>>243
了解です
 直しました
複数回に分けてやるのが普通なんでしょうか?
246デフォルトの名無しさん
2020/06/19(金) 11:47:09.20ID:x+g7YIVM
>>245
これダブルクォーテーションもエスケープしなきゃいけないんじゃないの?
247デフォルトの名無しさん
2020/06/19(金) 12:02:33.17ID:LA4wBl0H
>>246
すみません、勘違いしていました
エスケープ対象は"で、/はエスケープ対象ではないです。

vscodeのスニペットに登録する際に、"をエスケープしないといけないんです
これ、なにげに面倒ですね
248デフォルトの名無しさん
2020/06/19(金) 14:19:20.57ID:a2rlVyD0
>>247
HTMLが一般的ではないんだけど
通常はタグと閉じタグとが別の行になることが多いし
あるいは全てが一行というものもあるんだけど
こんな特殊なものにだけ対応でいいのか?
また各タグ毎に""だとダメなのか?
こうすれば行が違ってても大丈夫となるけど
【例】 <h1>h1</h1> → "<h1>"h1"</h1>"
249デフォルトの名無しさん
2020/06/19(金) 16:14:22.39ID:/6wBUF7o
自分macなのでmery使えないの試せない
javascriptのマクロが使えるみたいじゃん
正規表現だけだと厳しいかも

var code =`<!DOCTYPE html> 〜省略〜 </html>`
var code = code.replace(/(<.*?>)\n/g, '"$1"\n').replace(/\//g, '\\\/')
console.log(code)

javascriptの置き換え部分だけ書くと上のでいけるはず
meryのマクロの体裁に整えればこれでいけると思う

環境によって\はバックスラッシュだし$もバックスラッシュです
250デフォルトの名無しさん
2020/06/19(金) 16:33:24.58ID:x+g7YIVM
var2回もいらんし。
¥nは$にしないとそのスクリプト自体動作失敗してるでしょ。
251デフォルトの名無しさん
2020/06/19(金) 16:45:53.57ID:/6wBUF7o
>¥nは$にしないと

へえそうなんだ
macだとそのままいけるんだよね
var 2回いらねはさすがに難癖だね
252デフォルトの名無しさん
2020/06/19(金) 16:49:07.22ID:LA4wBl0H
>>248
vscodeのスニペット登録はそういうルールのようです
やはり複数回に分けるのが利口でしょうか
プログラムだって何回かに処理を分けますもんね

必須ではないですが、知識として知りたいなあと思った次第です
253デフォルトの名無しさん
2020/06/19(金) 17:06:56.57ID:x+g7YIVM
>>251
無駄にプライドが高そうなタイプだなw
varの意味がわかってれば2回はつけんよ。
それだと最終行に¥nがなかったら処理されない。

https://ideone.com/QOYdYP
254デフォルトの名無しさん
2020/06/19(金) 18:05:26.45ID:LA4wBl0H
>>249
自分はpythonでやってみますです
255デフォルトの名無しさん
2020/06/19(金) 18:07:51.43ID:a2rlVyD0
ひょっとするけど
タグ関係なく単に各行を""で括るってだけなんじゃ?
256デフォルトの名無しさん
2020/06/19(金) 18:24:29.90ID:a2rlVyD0
スニペット登録でググってみたら
jsonで記述と書かれてる
やっぱりタグは無関係で
行の前後を""で括るだけだし、カンマ区切りも要る
"Inner": {
"prefix": "in",
"body": [
"<section id=\"$1\">",
"\t<div class=\"inner\">",
"\t\t$2",
"\t</div><!-- .inner -->",
"</section>"
],
},
257デフォルトの名無しさん
2020/06/19(金) 18:36:21.20ID:LA4wBl0H
え、そうなのですか、、、
258デフォルトの名無しさん
2020/06/19(金) 18:57:56.53ID:a2rlVyD0
そもそもキー入力の短縮だし、基本はテンプレート登録だ
"Print to console": {
"prefix": "log",
"body": [
"console.log('$1');",
"$2"
],
"description": "Log output to console"

あと、スニペット登録入力用のvscode拡張機能もあるようだ
259デフォルトの名無しさん
2020/06/19(金) 21:44:28.86ID:q14TQ9ke
ggrks
https://www.google.com/search?q=vscode スニペット 登録 拡張
260デフォルトの名無しさん
2020/06/20(土) 00:03:50.12ID:D9McnEc6
#一行目
AAAランダム文字列1AAAランダム文字列2BBBランダム文字列3BBBランダム文字列4CCC
#二行目
AAAランダム文字列5BBB

このような文章があって
AAAランダム文字列2BBB
だけを1回の処理で抽出することは可能ですかね?
AAA〜CCCで挟まれ、かつAAA〜BBBの真の最短マッチというのでしょうか
二行目は抽出したくないです

AAA((?!AAA).)*CCC

AAA((?!AAA|BBB).)*BBB

と2回の処理ではできたのですがどうも悔しいです
261デフォルトの名無しさん
2020/06/20(土) 00:10:55.64ID:GUrzgoSo
>>260
AAA.*(AAA.*?BBB).*CCC
262デフォルトの名無しさん
2020/06/20(土) 00:29:48.90ID:Spmc6WsU
ランダム文字列の最初(最後)の文字がA(B)だった時は?
263デフォルトの名無しさん
2020/06/20(土) 00:44:31.03ID:Spmc6WsU
>>177
画像を右クリック、キャッシュ処理-NGファイル
リンクからでも出来るが再度取得しに行ってしまうのが無駄になるかも
264デフォルトの名無しさん
2020/06/20(土) 00:44:59.32ID:Spmc6WsU
誤爆スマン
265デフォルトの名無しさん
2020/06/20(土) 00:52:46.51ID:D9McnEc6
>>261
早速ありがとうございます
ですがそのやり方ですと自分が確認した限り最初のAAA〜CCCまで全て抽出されてしまうようです

言い忘れてしまい申し訳ないのですがperl正規表現を使いgrepで抽出しようとしています

>>262
すいませんわかりやすくAAAと表記していますが実際はhttpsから始まるURLでBBBも複雑な固定文字列ですのでまず連続することはないと思います
あったとしてもそれは仕方ないのでここでは考えないものとしていただければ…
266デフォルトの名無しさん
2020/06/20(土) 02:01:55.18ID:GUrzgoSo
>>265
それは正規表現の問題じゃなくgrepの使い方の問題で
キャプチャグループを取り出せてないだけだと思う

pcregrep -o1 'AAA.*?(AAA.*?BBB).*CCC' <input>
とか
grep -oP 'AAA.*?¥K(AAA.*?BBB)(?=.*?CCC)' <input>
とか工夫して
267デフォルトの名無しさん
2020/06/20(土) 02:35:31.58ID:D9McnEc6
>>266
失礼しました
grepの使い方が悪かったのですね
そちらの方法で無事抽出できました
ありがとうございました
268デフォルトの名無しさん
2020/06/21(日) 11:54:44.04ID:RSezRE5h
マークダウンのマッチのさせ方について
この2つのうち、上だけをマッチさせたいです
#半角スペースh1
#半角スペース半角スペース半角スペースh1

しかし
^# .*$
だと、両方マッチします。半角スペースが1つの場合のみマッチさせられるでしょうか
269デフォルトの名無しさん
2020/06/21(日) 12:19:16.08ID:1s00JmZm
^# [^ ]
270デフォルトの名無しさん
2020/06/21(日) 14:46:34.76ID:RSezRE5h
ありがとうございます

# h
の部分だけマッチします
一文字の繰り返しの部分は、どう指定してるんでしょうか?
271デフォルトの名無しさん
2020/06/21(日) 14:58:06.74ID:wEwARBW2
[^ ]+
272デフォルトの名無しさん
2020/06/21(日) 15:46:15.97ID:RSezRE5h
だとスペースがマッチしません
ありがとうございます
273デフォルトの名無しさん
2020/06/21(日) 16:11:36.93ID:1s00JmZm
>>2
274デフォルトの名無しさん
2020/06/21(日) 18:30:44.16ID:RSezRE5h
^#[ ]([^ ].*)$
これでいけたブリ
275デフォルトの名無しさん
2020/06/27(土) 20:14:07.00ID:V+005EHj
chmateから改行コードが見えるレスのNGワードはどうやって登録すればいいですか?

Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
276デフォルトの名無しさん
2020/06/28(日) 00:20:52.36ID:x4PVBa+w
chmateとやらのスレで聞いた方がいいと思うが
277デフォルトの名無しさん
2020/06/28(日) 20:47:34.83ID:hqGvkXPW
わかる方教えてください

yyyy/mm/dd の形式で、下記のような0埋め処理をしたいのですが、一発処理方法がわかりません
大量にあるファイルを秀丸にて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
278デフォルトの名無しさん
2020/06/28(日) 22:32:55.02ID:pbfRuAan
> 大量にあるファイルを
> 今後も処理の必要がある
スクリプトでやるものじゃね?

以下で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
279デフォルトの名無しさん
2020/06/28(日) 22:57:55.61ID:CZLL+74z
>>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箇所)
ただし誤爆は起きるかもしれない
280デフォルトの名無しさん
2020/06/28(日) 23:14:26.22ID:CZLL+74z
なお誤爆の可能性は、
1) ファイル先頭に、 6/28 xxx で始まっていた場合
2) 2020/ 6/28/ 9 xxx とか引き続き/ 9とかがある場合
3)ファイル末尾で、2020/ 6/28(改行コードなし)で終わっている場合は変換されない
 まあ改良すれば3)は問題なくなるけど
281デフォルトの名無しさん
2020/06/28(日) 23:16:24.29ID:CZLL+74z
2)は間違い 2020/ 6/ 8/ 9 とかの場合に訂正
282デフォルトの名無しさん
2020/06/28(日) 23:19:24.85ID:CZLL+74z
あ、1)も間違ってる
6/ 8 xxxに訂正(空白なしで数字1文字で始まる場合)
283デフォルトの名無しさん
2020/06/29(月) 00:31:06.80ID:G5zcTgI1
秀丸なら普通にマクロでプログラム書いた方が楽じゃない?
284デフォルトの名無しさん
2020/06/29(月) 00:32:15.99ID:1iNHQcBG
1)は、\G(?!^)というふうに先頭の場合を除けばいける
残りの2)3)は工夫次第
285デフォルトの名無しさん
2020/06/29(月) 16:30:01.33ID:sN5cgPC+
難しく考えなくても置換対象以外に"/ "が無いなら
/[ ]
/0
で一発
286デフォルトの名無しさん
2020/06/29(月) 16:59:50.16ID:0ldK0o0F
これでできないかい?
FIND:(?<=¥d{4}/[ ¥d]¥d/) (¥d)|(?<=¥d{4}/) (¥d)(?=/)
REP:0$1$2
287デフォルトの名無しさん
2020/06/29(月) 17:05:41.11ID:0ldK0o0F
こっちのほうが確実か。
FIND:(?<=¥d{4}/) (¥d)(?=/[ ¥d]¥d)|(?<=¥d{4}/[ ¥d]¥d/) (¥d)
REP:0$1$2
288デフォルトの名無しさん
2020/06/29(月) 17:28:03.91ID:sN5cgPC+
>>287
それ試した?それが可能な処理系って何?
選択子で両方を対応するなら>>279の用に\G使わないとスペースが両方にある場合に失敗するぞ
289デフォルトの名無しさん
2020/06/29(月) 17:41:18.50ID:0ldK0o0F
>>288
pythonでもCotEditorでもいけるが?

https://ideone.com/zhrSCV
290デフォルトの名無しさん
2020/06/29(月) 17:54:20.25ID:TUm10+y/
277 です
皆さんありがとうございます!
レベルが低くて理解できないのもありますが、勉強のためにしっかり精査してみます

>>285
まさにそれですわ
てゆーか別に正規表現使わなくても実現できるという罠
勉強になりました m(_ _)m

改めましてありがとうございました。
291デフォルトの名無しさん
2020/06/29(月) 18:05:49.23ID:sN5cgPC+
>>289
で?質問者はなんて書いている?
pythonとかCotEditorとか書いてあるかい?
質問者の環境で失敗する式を書くならせめて
pythonでならこれで出来る、くらい書けやks
292デフォルトの名無しさん
2020/06/29(月) 18:09:28.38ID:0ldK0o0F
>>291
質問者が文句を言うならともかく、なんでお前が切れてるんだよ。
自分が正解書いてるのに余計なこと書くなって言いたいのか?www
カルシウムとっとけよ
293デフォルトの名無しさん
2020/06/29(月) 18:13:56.28ID:sN5cgPC+
>>290
なんとなくそうじゃないかなーと思った
俺も昔同じ罠にハマった事あるからw
解決して何より
294デフォルトの名無しさん
2020/06/29(月) 18:25:35.41ID:sN5cgPC+
>>292
あぁ?理由なら書いてんだろ
おまえのような底意地の悪いゴミカスが気に食わないからじゃ
さっさ死ね
295デフォルトの名無しさん
2020/06/29(月) 23:31:59.63ID:G5zcTgI1
質問者そっちのけの場外乱闘にワロタ
296デフォルトの名無しさん
2020/06/30(火) 01:41:09.48ID:ZFF7tVch
だが、そこがいい
297デフォルトの名無しさん
2020/06/30(火) 13:15:03.17ID:tIigavUn
>>279で\Gの使い方が分かった。thx
298デフォルトの名無しさん
2020/07/02(木) 02:54:39.72ID:fxvoVb8t
アプリからファイアウォールにまで使われる正規表現を標的にした「ReDoS攻撃」とは?
https://gigazine.net/news/20200701-redos-cheet-sheet/

ネット中は正規表現を使わないではだめなのか
でもブラウザも中で使っているだろうし
299デフォルトの名無しさん
2020/07/03(金) 10:38:52.53ID:fe+b4Rno
正規表現についてですが、このhtmlの置き換えは一発でできますか?
この前からいろいろ試してるんですが、、
https://ideone.com/vpxoNS

行頭と行末にダブルクォーテーションをつけ、urlの部分はエスケープしています。
vscodeでスニペットを登録する際に、このようにダブルクオーテーションを使用する必要があるのです。
300デフォルトの名無しさん
2020/07/03(金) 11:07:40.28ID:cg7dcvev
(^<.*?)(".*?)(".*>)$
"$1¥¥$2¥¥$3"
↑vscode内の検索置換

それと全く同じパターンであれば可能だが、dqが複数出てくる場合はできない。
他のパターンも考えたら、
1.dqのみエスケープ、
2.行頭行末にdqをつける
の2アクションにするか、vscodeでそれ用のjsでも書いて処理するか。

スニペット登録したいものをまとめて書き出しておいて2アクションで処理しても大して手間は変わらんだろ。
301デフォルトの名無しさん
2020/07/03(金) 12:32:41.29ID:fe+b4Rno
そうですね 2回でやります
302デフォルトの名無しさん
2020/07/03(金) 13:00:37.53ID:hVBUXcHj
Ruby で、" を、\" に置換してから、
冒頭・末尾に、" を追加する

str = '"ja"'
str.gsub!( '"', '\"' )

puts '"' + str + '"'
#=> "\"ja\""
303デフォルトの名無しさん
2020/07/03(金) 13:11:32.91ID:yfao6bm4
VScodeのプラグインにSnippet Generatorてのがあるみたいだがそれじゃダメなん?
304302
2020/07/03(金) 14:28:11.33ID:hVBUXcHj
漏れなら、Ruby, PowerShell で、
クリップボード経由で変換するスクリプトを書いて、

ダブルクリックで起動できるように、起動部分をVBS で書くかな?
305デフォルトの名無しさん
2020/07/03(金) 14:33:24.34ID:zEGBQA4b
正規表現よりもJSON.strinfigy()を使ったほうが簡単
スニペット用のJSONを出力すればいいだけだからJSでもRubyでも好きなの使えばいい
306デフォルトの名無しさん
2020/07/13(月) 00:17:50.71ID:e/I4Ji0p
JavaScript

const kaoru = '薫'

'[薫子]'.match(`[${kaoru}]`)
'[薫子]'.match(`\[${kaoru}\]`)
'[薫子]'.match(new RegExp(`[${kaoru}]`))
'[薫子]'.match(new RegExp(`\[${kaoru}\]`))

全てマッチしてしまうようですが、マッチさせたくありません
[ や ] そのものを文字として扱って判定するにはmatchの引数をどうすればよいでしょうか
307デフォルトの名無しさん
2020/07/13(月) 00:49:50.36ID:lkNbIdQ1
>>306
それはJSの質問やろ
RegExpコンストラクターを使って2回エスケープ
308デフォルトの名無しさん
2020/07/13(月) 19:20:45.29ID:YirsSrYP
教えてください。基本的な質問で恐縮です。

20200706T030000Z
SUMMARY:打合せ
LOCATION:中野
DTEND:20200706T043000Z

から、
$1 0300
$2 打合せ
$3 中野
$4 0430
を抜き出すにはどのようにすればよいでしょうか。
309デフォルトの名無しさん
2020/07/13(月) 19:49:46.79ID:GfOrWnDk
^\d{8}T(\d{4}).*+\nSUMMARY:(.*+)\nLOCATION:(.*+)\nDTEND:\d{8}T(\d{4})
310デフォルトの名無しさん
2020/07/14(火) 13:34:31.12ID:h5j+nt7i
今まで何となくで使ってきたけどキャプチャの変数って式に対し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 中野___

どの環境でもこういう仕様なの?
311デフォルトの名無しさん
2020/07/14(火) 13:41:52.76ID:tlUY963U
>>310
深く考えてなかったがそういうもんだと思ってた
キャプチャグループが増殖するとは考えもしなかった
312デフォルトの名無しさん
2020/07/14(火) 13:50:15.90ID:tlUY963U
もしキャプチャグループが増えるとして
与えられた文字列によって増える順番が異なってくることが考えられるしね
313デフォルトの名無しさん
2020/07/14(火) 21:21:06.51ID:h5j+nt7i
キャプチャしたけりゃ繰り返しや\gで省略するなってことなんだろうけど
気になって出来る方法無いか調べてたら鬼雲で捕獲履歴参照なるものがあった
デフォでは無効になってるみたいだけど

https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
補記 5. 実装されているが、既定値では有効にしていない機能
+ 捕獲履歴参照
 (?@...) と (?@<name>...)
 例. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
 使用方法は、sample/listcap.cを参照
 有効にしていない理由は、どの程度役に立つかはっきりしないため
314デフォルトの名無しさん
2020/07/20(月) 23:26:29.84ID:jWd+3fJB
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
置き換え

●説明
3の倍数行あるテキストを、3行ごとに1行にまとめたい

●対象データ ※対象データは、必ず半角英数字です。
e
A8
11A9
c
2
LB5
3
d
8X5

●希望する結果
e A8 11A9
c 2 LB5
3 d 8X5

よろしくお願いいたします。
315デフォルトの名無しさん
2020/07/21(火) 00:07:21.07ID:HQA5x8Lv
>>314
サクラエディタはよく知らないけど
一般的な正規表現なら /(.*?)¥n(.*?)¥n(.*?¥n)/g を "$1 $2 $3”で置換すればいいと思う
316デフォルトの名無しさん
2020/07/21(火) 10:14:18.12ID:7bBDhy0Z
(?:^.*+|\G.*+[\r\n]+.*+)\K[\r\n]+(.*+)[\r\n]+
_\1_
"_" は半角sp
最終行末尾に改行が無くても可
317デフォルトの名無しさん
2020/07/21(火) 10:18:39.84ID:7bBDhy0Z
[\r\n]+
は空行がある場合にズレるから使ってる改行文字に直して
CRLFなら\r\n
318デフォルトの名無しさん
2020/07/25(土) 05:22:11.92ID:ygqLeqBq
質問です。デリミタが基本的に「/」が選ばれるのなぜですか?慣例だから?
319デフォルトの名無しさん
2020/07/25(土) 08:47:52.57ID:1TMz0fAY
人間というのは楽をしようとする生き物なんだ
320デフォルトの名無しさん
2020/07/25(土) 17:47:34.31ID:bnVhPJSY
>>318
ここに来るような人は論理的思考をすると思ってたんだけど、
慣例とか持ち出す奴まで来るのな
|や@なんかと比べれば分かるだろ
321デフォルトの名無しさん
2020/07/27(月) 13:00:24.19ID:NlQGNze0
●Regular Expressionの使用環境
Ruby2.5
●検索か置換か?
置換
●説明
スペースを削除したい。ただしダブルクオーテーション内は処理対象から除外
●対象データ
ABC, DE F,"G HI"
●希望する結果
ABC,DEF,"G HI"
ダブルクオーテーション内以外に対して処理するって結構ありそうだけど見つからないような・・
322デフォルトの名無しさん
2020/07/27(月) 13:15:08.91ID:GIKub5S5
そのフォーマット通りなのか
あるいは任意でダブルクォーテーションの処理をするのかで変わってくるな
323デフォルトの名無しさん
2020/07/27(月) 14:36:52.94ID:Dng4VfHm
[ ](?![^",\n]*+"(?:,|$))
324デフォルトの名無しさん
2020/07/27(月) 15:27:53.85ID:OciGuojB
(?>".*?"|[^"スペース]++)*+\Kスペース
を削除
325デフォルトの名無しさん
2020/07/28(火) 23:58:50.39ID:dH+Aps1K
HTML中に

<a href="/a.html"><img src="test.jpg"></a>



<img src="test.jpg">

リンクに囲まれた test.jpg または、画像だけののどちらかがあって。
どちらにも引っかかる正規表現が書けません。

PHPの正規表現キボンヌ
自力では2つの正規表現を書いてしのいでいるので、一つで対応できますか?


現状は

リンクに囲まれた画像
/(^.*)(<a href=".*?>\n*<img .*?test.jpg.*?>\n*<\/a>)(.*$)/s

画像のみ
/(^.*)(<img .*?test.jpg.*?>)(.*$)/s

で対応しています。
326デフォルトの名無しさん
2020/07/29(水) 01:26:58.01ID:W2ZwK0DF
/<img[^>]+test\.jpg[^>]+>/g

JavaScript では、これで両方に一致する。
[^>]+ で、> 以外の文字を、1文字以上。
g で、すべての箇所に一致する

test.jpg だと、. は任意の1文字を表すから、意味が異なる。
ドットという文字に一致させるには、\. とエスケープが必要
327デフォルトの名無しさん
2020/07/29(水) 01:58:17.28ID:yfMsWFOq
aタグ含めてマッチさせたいんでね?
それでも単純に|で繋げば済む話だと思うけど
328デフォルトの名無しさん
2020/07/29(水) 03:04:25.73ID:Qbap9rXN
あってもなくてもいいものは末尾に?を付ければいいよ
((<a [^>]++>)?(?:<img[^>]+test\.jpg[^>]+>)(</a>)?)
329デフォルトの名無しさん
2020/07/29(水) 05:46:17.91ID:z6Fnx3oM
>>9
これ面白いな。プログラミング授業に採用すべき。
330デフォルトの名無しさん
2020/07/29(水) 11:18:17.76ID:RU44SEhN
>>326
ありがとうございます!
[^>]+ って発想がありませんでした・・。

>>328
ありがとうございます。
++ のところは一つですよね?

こんな感じをベースにやってみようと思います。
Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
331デフォルトの名無しさん
2020/07/29(水) 11:23:00.16ID:d73w3j+s
>>325
こういうの正規表現じゃなくcss selectorやxpath使った方が簡単だよ
332デフォルトの名無しさん
2020/07/29(水) 14:14:44.18ID:8IMt+CxM
> リンクに囲まれた test.jpg または、画像だけののどちらかがあって
> /(^.*)(<a href=".*?>\n*<img .*?test.jpg.*?>\n*<\/a>)(.*$)/s
> /(^.*)(<img .*?test.jpg.*?>)(.*$)/s

^(?=.*test\.jpg).++$
こういう事では?
333325
2020/07/29(水) 14:47:56.12ID:RU44SEhN
>>331
ありがとうございます。
たしかにその2つのほうがphpソースとしては分かりやすくなりそうですね。
334デフォルトの名無しさん
2020/07/31(金) 01:03:19.74ID:sgil418T
>>329
前半はいいけど、後半がきつい
総当たりで力技ぐらいしか思いつかんわ・・・
335デフォルトの名無しさん
2020/08/01(土) 06:04:54.43ID:Wz14ZhNZ
cssなんですが、
margin:10px;padding:10px;border:1px solid red;backgroun-color:red;font-size:16px;
というものがあったとして、正規表現でborderのプロパティと内容だけを削除できないでしょうか?
欲しい結果どす
margin:10px;padding:10px;backgroun-color:red;font-size:16px;

ちなみにborderの値は
1px red solidの場合もあれば
solid 1px redの場合もあります

つまり、borderプロパティに不随する値を消したいのです(´・ω・`)
336デフォルトの名無しさん
2020/08/01(土) 06:13:27.50ID:xL8Di7oE
〜; か、;〜; の、〜の中に、border という文字列が、あれば良いのか?
337デフォルトの名無しさん
2020/08/01(土) 06:32:02.40ID:Wz14ZhNZ
どういうことですか?
borderプロパティとその値を削除したい感じです
border(プロパティ):red 1px solid(値);
338デフォルトの名無しさん
2020/08/01(土) 06:38:27.91ID:hnL660kY
border[^;\n]++;
339デフォルトの名無しさん
2020/08/01(土) 06:52:53.24ID:GqyTFtiM
\rも入れといたほうがいいだろ
340デフォルトの名無しさん
2020/08/01(土) 06:59:35.99ID:GqyTFtiM
あとborder-color:〜とかも消えちゃうね
341デフォルトの名無しさん
2020/08/01(土) 07:21:39.09ID:GqyTFtiM
あとプロパティじゃなくて値やコメントにborderって入る可能性が無いかな?
\bborder\s*:[^;}\r\n]++;?
ぐらいがいいのではないかな
これでもxx-borderとかプロパティがあったり?(無いだろうけど)
、また値を改行されて書かれたりしたらダメなんだが
342デフォルトの名無しさん
2020/08/01(土) 07:38:14.81ID:GqyTFtiM
処理系がかかれてないので++がダメだったら+に代えるように
343デフォルトの名無しさん
2020/08/01(土) 09:01:52.60ID:Wz14ZhNZ
すみません
meryです
344デフォルトの名無しさん
2020/08/01(土) 12:04:03.32ID:kkqe9vdZ
border(-[a-z]+)?:[^;]+;
345デフォルトの名無しさん
2020/08/01(土) 18:09:27.98ID:Wz14ZhNZ
ありがとうございます
できましたが、解説サイトありませんか?
記号がヒットしないもんで、、、
346デフォルトの名無しさん
2020/08/01(土) 18:40:27.24ID:hnL660kY
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
347デフォルトの名無しさん
2020/08/01(土) 19:21:49.80ID:kkqe9vdZ
(自分の投稿分だけ)
[]は[]内に挙げた任意の1文字
+は直前の文字だけで構成される文字列,*は0文字以上、+は1文字以上
つまり[a-z]+はa-zの範囲の文字だけで構成される長さ1以上の任意の文字列
?は直前の文字(列)がないものも対象(あってもなくてもいいということになる)

[]内先頭の^は否定
つまり[^;]は;以外の任意の文字

まとめると:の前は
border, border-width等borderファミリーまとめて対象にしている
:の後は:直後〜最初の;までが対象

>>344では:以前にスペースがあると対象にならない
348デフォルトの名無しさん
2020/08/01(土) 22:21:06.56ID:Wz14ZhNZ
丁寧にありがとうございます。難しいですね。
border(-[a-z]+)?:の部分はなぜグループ化する必要があるんでしょうか?
349デフォルトの名無しさん
2020/08/01(土) 22:43:25.14ID:LBbA9Kf+
>>348
それは>>347
> まとめると:の前は
> border, border-width等borderファミリーまとめて対象にしている

border:を対象にするために
border(-[a-z]+)?:というborder《【頭に-付いたa-z任意文字列1文字以上】があってもなくても》:指定になってる

>>347のいってる空白云々はborder :のようにrと:の間に空白あるとマッチしないという意

元cssの書き方次第で漏れるからあまり向いてるとは言えない気がする
空白を気にして\s?や[:blank:]?を間に入れ込むのも精神的にツラい
その場限りならいいけど
350デフォルトの名無しさん
2020/08/01(土) 22:57:20.65ID:Wz14ZhNZ
borderとborder-styleなどを対象にする場合、括弧を使うことで不足分を補うというイメージでしょうか?
borderとborder-styleという指定になってるんですね
351デフォルトの名無しさん
2020/08/01(土) 23:05:44.88ID:LBbA9Kf+
>>350
border(-[a-z]+)?: の ? をどこに効かせるか
border-([a-z]+)?: だと - が必須になる(- に ?が効かない)ので border: にマッチしない(border-abcdef: にはマッチする)

正規表現 入門 でググってそれ見ながら ↑のパズルで遊んでみたら?
352デフォルトの名無しさん
2020/08/01(土) 23:08:11.58ID:oWJPeiSz
border-radiusも忘れないであげてください...
353デフォルトの名無しさん
2020/08/01(土) 23:12:41.55ID:+HD/AULr
説明が下手だと良く言われるでしょ?
笑えるくらいグダグダなのなw
354デフォルトの名無しさん
2020/08/01(土) 23:38:46.09ID:o0eKxhHR
>>353
はいどうぞw
355デフォルトの名無しさん
2020/08/02(日) 04:53:04.96ID:Q2aVGOnZ
Mery(鬼雲の仕様?)なら
border\s*(-[a-z]+)?:[^;]+;
で:前の改行や空白文字も対象にしてくれるけど
エンジンによっては対象にならないし
可能なパターン全てに対応させようと思ったら正規表現メモになってしまう(相当面倒だということ)

どーでもいいけど
[-a-z]か(-[a-z]+)*にした方が良かったか
border-なんとか-かんとか
みたいなのもある?
356デフォルトの名無しさん
2020/08/02(日) 07:34:01.59ID:WI1GGX9r
最小一致のやり方を教えて下さい
<h1>aaa</h1><h1>aaa</h1>
最初のh1要素だけ取り出すことはできないでしょうか?

<h1>(*?)</h1>

これではだめです。

>>351
ありがとう
手を動かします
357デフォルトの名無しさん
2020/08/02(日) 07:46:47.76ID:afjdMLlX
<h1>[^>]+h1>

[^>]+ は、> 以外の文字が、1文字以上
358デフォルトの名無しさん
2020/08/02(日) 08:08:51.02ID:7mfh4V7b
<h1>(?>.*?</h1>)
<h1>(?>(?s).*?</h1>)
<h1>(?~</h1>)</h1>

<h1><a id="abc">abc</a>
</h1>
359デフォルトの名無しさん
2020/08/02(日) 08:08:54.84ID:SCuZm8dn
^.*?<h1>\K.*?(?=</h1>)
360デフォルトの名無しさん
2020/08/02(日) 08:16:49.14ID:piHYqXfk
(?~</?+h1>)(?=</h1>)
361デフォルトの名無しさん
2020/08/02(日) 08:18:05.24ID:1ddBclsD
あ、ダメだこれ>>360
362デフォルトの名無しさん
2020/08/02(日) 10:46:18.27ID:WI1GGX9r
>>357,358,359
全部だめでした
ちなみにmeryです
いつもいい忘れます
ごめんなさい
363デフォルトの名無しさん
2020/08/02(日) 10:54:32.92ID:WI1GGX9r
>>357
これでいけました
しかし順番にマッチするんですね
364デフォルトの名無しさん
2020/08/02(日) 10:55:57.37ID:WI1GGX9r
順番に置き換えていくならいいですが、全て置き換えを行う場合
>>357だと出来ないですね
365デフォルトの名無しさん
2020/08/02(日) 11:08:50.52ID:SCuZm8dn
削除
^.*?\K<h1>.*?</h1>(.*)
\1

ABCに置換
ABC\1
366デフォルトの名無しさん
2020/08/03(月) 01:53:48.18ID:p6SF3tC+
すべてにマッチする、オプションは無いの?
367デフォルトの名無しさん
2020/08/03(月) 03:15:13.61ID:/ZQCQ5dx
>>365
ありがとう
むずかしい
368デフォルトの名無しさん
2020/08/05(水) 13:11:50.02ID:zXYtyxDC
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
置換

●説明
空白を除去するのに\sで検索してますが
アルファベットの文字間では空白を残したい

●対象データ
ジャッキー チェン:Jackie Chan
●希望する結果
ジャッキーチェン:Jackie Chan
369デフォルトの名無しさん
2020/08/05(水) 14:03:13.77ID:xp5DSzK/
スペースの直前直後が[a-zA-Z]ならマッチせず
それ以外ならマッチするという正規表現でいいのかな?
もうちょっと仕様を詰めたほうがいい気がする

John Paul IIの2つ目のスペースは削除?
George W. Bushの2つ目のスペースは削除?
370デフォルトの名無しさん
2020/08/05(水) 14:03:44.33ID:UoH2gIZd
(?<=[^A-Za-z])\s(?=[^A-Za-z])|(?<=[^A-Za-z])\s(?=[A-Za-z])|(?<=[A-Za-z])\s(?=[^A-Za-z])
371デフォルトの名無しさん
2020/08/05(水) 16:38:08.92ID:zXYtyxDC
>>369
スペースの前後ともアルファベットならマッチせず、それ以外ならマッチするです。
その他の条件はありません。ちなみに行頭と行末のスペースにはマッチさせたいです。

>>370
ありがとうございます。行頭が残るようですが希望のことができました。
372デフォルトの名無しさん
2020/08/05(水) 16:57:46.08ID:UoH2gIZd
>>371
^\s++|\s++$|(?<=[^A-Za-z])\s(?=[^A-Za-z])|(?<=[^A-Za-z])\s(?=[A-Za-z])|(?<=[A-Za-z])\s(?=[^A-Za-z])
373デフォルトの名無しさん
2020/08/05(水) 17:13:59.30ID:xp5DSzK/
ORでは1つで良いような

(?<![a-zA-Z])¥s|¥s(?![a-zA-Z])
374デフォルトの名無しさん
2020/08/05(水) 20:14:19.67ID:TJuHD2ix
ゼロ個でも
\s(?!(?<=[A-Za-z].)(?=[A-Za-z]))
375デフォルトの名無しさん
2020/08/05(水) 21:50:35.87ID:xp5DSzK/
>>374
へぇーー
速度的にも有利っぽいしこのパターン覚えとくわ
376デフォルトの名無しさん
2020/08/06(木) 11:27:45.13ID:mqEUv0B4
成り立ってるそれ?
377デフォルトの名無しさん
2020/08/06(木) 11:59:29.23ID:04L3Tvl2
\s(?!(?<=[A-Za-z].)[A-Za-z])
肯定先読み要らないよね。ある方が見やすい気がしなくもないけど
378デフォルトの名無しさん
2020/08/06(木) 16:39:38.24ID:LCybI18e
374の「選択子がゼロ個」と「集合の否定」の話じゃなければアサーションを入れ子にする必要もないのですよ
\s(?>(?![A-Za-z])|(?<![A-Za-z].))
379デフォルトの名無しさん
2020/08/10(月) 00:32:29.15ID:foQnjRqn
●使用環境
RegEx Lab(iOSアプリ,ICU Regex)
iOSショートカットアプリ

●検索か置換か?
検索

●説明
以下の2パターンのデータから"あいうえお"を取り出す正規表現を教えてください。
自分なりに考えたのですが↓ではうまくいきませんでした。
名前(?::<.+?>|:)(.*?)(?:</a>|$)
ちなみにCotEditorでは↑の正規表現でも検索できました。

●対象データ1

<div class="abcde_abcde">
名前:あいうえお
</div><!--abcde_abcde-->


●対象データ2

<div class="abcde_abcde">
名前:<a href="https://www.google.com";>あいうえお</a>
</div><!--abcde_abcde-->


●希望する結果
あいうえお
380デフォルトの名無しさん
2020/08/10(月) 01:07:48.09ID:F9d2D5aE
>>379
RegEx Labちょうど使ってたので
Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
381デフォルトの名無しさん
2020/08/10(月) 01:16:40.29ID:rwR0rEzu
>>379
$が行末にマッチしてないだけなら、単に改行\Rに置き換えてみてもいいし正規表現の頭におまじない(?m)を足してみてもいい
置換じゃなくて検索なら
(?<=名前:<[^>]{0,99}?>).*?(?=</a>)|(?<=名前:)(?!<).*+
382デフォルトの名無しさん
2020/08/10(月) 01:36:35.46ID:foQnjRqn
>>380
>>381
こんなに色々なやり方があるんですね……勉強になります。
無事検索できるようになり本当に助かりました。
ありがとうございました!
383デフォルトの名無しさん
2020/08/11(火) 13:59:29.59ID:JW3Ec0IY
grepのperl正規表現オプションを使ってURLのホスト名を抽出したいです

http://2chb.net/r/tech/1568640311/l50
http://www.google.co.jp/

このスレだったら”mevius”
googleなら”www”
https://」or「http://」と「.」に挟まれた文字列の最短一致でできそうなのですがなぜか上手くいきません

1文字に挟まれたパターンは検索して出てくるのですが、複数文字に挟まれたパターンはあまり出てこなくて、この際はっきりしたいので「〇〇〇と△△△に挟まれた文字列の中身のみを最短一致で抽出」パターンも教えてください
384デフォルトの名無しさん
2020/08/11(火) 14:15:33.95ID:47EO3/0I
>>383
/https?:\/\/([^./]+)/
grepもperlも知らないけどこんな感じでどうや
△△△が一文字なら△を含まない文字の連続で取るといいと思う
複数文字の場合は知らない
385デフォルトの名無しさん
2020/08/11(火) 14:17:58.02ID:oEzBqY+p
grep知らずにここに居る人が存在するのか…
386デフォルトの名無しさん
2020/08/11(火) 14:33:07.25ID:JW3Ec0IY
>>384
早速ありがとうございます
ですがそのやり方ですとgrepでは抽出できませんでした

△△△は複数の種類の文字ですね言葉足らずでした
正しくは「ABC」と「DEF」に挟まれた文字みたいなものですね
387デフォルトの名無しさん
2020/08/11(火) 14:36:19.90ID:giB5l2E5
$ cat input.txt
http://2chb.net/r/tech/1568640311/l50
http://www.google.co.jp/

$ grep -Po '(?<=:\/\/).+?(?=\.)' input.txt
mevius
www
388デフォルトの名無しさん
2020/08/11(火) 14:37:41.53ID:47EO3/0I
>>386
できなかったか、すまん
これは自分には無理だわ
知識もないのにでしゃばるべきじゃなかったな
389デフォルトの名無しさん
2020/08/11(火) 14:45:43.81ID:giB5l2E5
pcregrepならキャプチャグループを番号指定して出力可能

$ pcregrep -o1 ':\/\/(.+?)\.' input.txt
390デフォルトの名無しさん
2020/08/11(火) 15:47:36.92ID:JW3Ec0IY
>>388
いえいえ

>>387
>>389
おー、これでできました
pcregrepのやり方もありがとうございます
391デフォルトの名無しさん
2020/08/11(火) 20:17:56.42ID:Uga1WByL
Javaで

setMethod();
getMethod();
setBake();

みたいなgetter,setterは検出したくなく、

Methoda();
Methodb();
bake();

みたいなset, getで始まっていない()付きの文字列を含む
行を正規表現一行で検出するするのはどうしたらいいのですか?
392デフォルトの名無しさん
2020/08/11(火) 21:07:16.11ID:xo6O5h7F
^(?=.*?\b(?!set|get)[A-Za-z]++\(\);).*
^(?=.*\b(?!set|get)[A-Za-z]+\(\);).*
393デフォルトの名無しさん
2020/08/11(火) 21:55:37.51ID:Uga1WByL
申し訳ありません。

Methoda() {
Methodb(){
c = z.Methoda().Methodb(a,b)

みたいな行は検索の対象にいれたいのですが
よろしくお願いします。
394デフォルトの名無しさん
2020/08/11(火) 22:14:19.40ID:giB5l2E5
もうちょい目的と仕様をはっきりさせたほうがいいんじゃない?

get/setではじまってない()付きの文字列を含む行なら問題ないけど
get/setではじまってないメソッド定義やメソッド呼び出しをもれなく抽出したいということなら
正規表現だときつい気がする

後者ならコードをパースして使ってるメソッド一覧を出力するようなツールを探したほうがいいかも
395デフォルトの名無しさん
2020/08/11(火) 22:27:44.94ID:xo6O5h7F
^(?=.*?\b(?!set|get)[A-Za-z]++\(\)).*
396デフォルトの名無しさん
2020/08/11(火) 22:36:31.67ID:P147PBTZ
(?<=(?:\n|^|\.))(?<!set|get)[a-zA-Z]+\(
397デフォルトの名無しさん
2020/08/11(火) 22:52:10.25ID:Uga1WByL
引数が無い and setter, getterではないメソッドを含んでいる行です
ひょっとして正規表現内では表現できないかもしれません。
文脈自由レベルでしょうか?
398デフォルトの名無しさん
2020/09/20(日) 19:06:52.11ID:shjW7F5c
5chのスレタイはこん感じで入っている

<a href="1599110613/l50">1: ぶっちゃけ始めるのにいい言語て何 part3 (78)</a>
<a href="1545032904/l50">2: 文字コード総合スレ Part12 (95)</a>
<a href="1598112455/l50">3: Rust part9 (198)</a>
<a href="1598336253/l50">4: 小6におすすめな言語 (32)</a>
<a href="1594528940/l50">5: C++相談室 part152 (404)</a>
<a href="1596690797/l50">6: Xamarin Part7 (97)</a>
<a href="1598527450/l50">7: くだすれPython(超初心者用) その50【まず1嫁】 (423)</a>

ここからたとえば「言語」とついたスレタイだけ抽出するのは無理だった

<a href="1599110613/l50">1: ぶっちゃけ始めるのにいい言語て何 part3 (78)</a>
<a href="1598336253/l50">4: 小6におすすめな言語 (32)</a>
399デフォルトの名無しさん
2020/09/20(日) 20:06:08.38ID:XyOg3AIQ
>>397
いやもう
\b(?!set|get)\w+\(\)
でいいんでしょ
400デフォルトの名無しさん
2020/09/20(日) 23:02:18.72ID:ylbIOeZ5
JavaScript では、これで複数行マッチ(g)できた
/<a[^>]+>.*言語.*<\/a>/g

<a で始まって、> 以外の文字が、1文字以上続いて、>
言語の前後に、.*
<\/a> で終わる

他には、Ruby でスクレイピングすれば?
401デフォルトの名無しさん
2020/09/21(月) 00:25:21.75ID:18fwmJUF
>>400
おかしいな、それでうまくいかなかったのに

と思ったら入ってくるHTMLソースに改行がないようだ
</a>のあとに改行入れるとうまくいくように見えるけど、HTMLソースがおかしくなる

正規表現以前の問題だったわ
402400
2020/09/21(月) 02:18:58.27ID:+seX53Ud
別に抜き出すだけなら、
一旦、</a> の後ろに、改行を追加してから、正規表現を使えば?

それか、HTML をコピーしてから、やるとか
403デフォルトの名無しさん
2020/09/21(月) 04:00:13.04ID:fovUI165
"/(<a(?>[^>]+)>(?>[^<]*?言語[^<]*)<\/a>)(?:<a(?![^<]*言語)(?>[^<]+)<\/a>)*/$1/g"
404デフォルトの名無しさん
2020/09/21(月) 04:10:48.96ID:fovUI165
"/<a(?![^<]*言語)(?>[^<]+)<\/a>//g"
405400
2020/09/21(月) 05:27:30.09ID:+seX53Ud
Ruby, Nokogiri で、スクレイピングしたら、

require 'open-uri'
require 'nokogiri'

# プログラム技術@スレッド一覧
url = "https://mevius.5ch.net/tech/subback.html";

doc = Nokogiri::HTML( open( url ) )

# 「言語」という単語が含まれる、タイトルを表示する
ary = doc.css( "#trad > a" ).map { |elem| elem.content }
.select { |title| title.include? "言語" }

puts ary

出力
6: 次世代言語21 Go Nim Rust Swift Kotlin TypeScript (330)
10: 日本語プログラミング言語『なでしこ』スレ6.1c2ch.net (108)

以下略
406デフォルトの名無しさん
2020/09/21(月) 15:36:21.19ID:K0hBqhJG
冗談抜きでそんな無駄な努力するよりxpathとかそっち系おすすめするぞ
407デフォルトの名無しさん
2020/09/21(月) 16:25:39.02ID:+MA8+KhA
単純なスクレイピングはcurl+pupが楽

$ curl -s https://mevius.5ch.net/tech/subback.html | pup '#trad > a' text{} | grep 言語 | head -5
408400
2020/09/21(月) 22:36:13.18ID:+seX53Ud
>>405
のopen-uri を、下のように、外部コマンドのcurl にも出来るけど、
普通は、わざわざ外部コマンドを呼ばない

url = "http〜"
doc = Nokogiri::HTML( open( url ) )

html = `curl http〜`
doc = Nokogiri::HTML( html )
409デフォルトの名無しさん
2020/09/22(火) 15:43:36.39ID:fUgbeHE5
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
httpを含まない行の/を年に置き換えたい
●対象データ
https://5ch.net/
2020/9
●希望する結果
https://5ch.net/
2020年9
410デフォルトの名無しさん
2020/09/22(火) 16:23:41.31ID:hefdb5Yb
こんなもんでもよろしいでしょうか。
あんまりうまくないと思いますが。
よろしくお願いいたします。

置換前
^(?!http)([0-9]{4})(/)

置換後
$1年
411デフォルトの名無しさん
2020/09/22(火) 16:33:21.65ID:fUgbeHE5
>>410
ありがとうございます。うまくいきました。
412デフォルトの名無しさん
2020/09/23(水) 20:03:55.75ID:itvZvUM6
>>403
>>404
なんかすげえな

>>402,405-408
いろいろやり方あるんだね、サンクス
413デフォルトの名無しさん
2020/09/25(金) 14:10:58.84ID:3NF+8528
●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。

●検索か置換か?
置換

●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。

●対象データ
hogeghoe = type: furagura
mogemoge = syntax: mojamoja

●希望する結果
hogeghoe type: furagura
mogemoge syntax: mojamoja
※スペースで置き換えた例


よろしくお願いいたします。
414デフォルトの名無しさん
2020/09/25(金) 14:14:55.55ID:3NF+8528
>>413
取り消します。精査する前に書き込んでおり
間違いがございました。すいません。



●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。

●検索か置換か?
置換

●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。

●対象データ
hogeghoe = type: fuga:fuga
mogemoge = syntax: moja:moja
※置換目的のコロンの後ろにさらにコロンがある場合があります。
 =から「次の最初のコロン」までが置換対象です。

●希望する結果
hogeghoe fuga:fuga
mogemoge moja:moja
※スペースで置き換えた例

よろしくお願いいたします。
415デフォルトの名無しさん
2020/09/25(金) 14:24:47.87ID:q10QaMUD
>>414
sed 's/ =[^:]*://g'
416デフォルトの名無しさん
2020/09/25(金) 16:57:28.24ID:3NF+8528
>>415
ありがとうございます。理解を超えた書き方なので
そのまま利用いたします・・・
417デフォルトの名無しさん
2020/09/25(金) 21:14:34.14ID:9rvIESf7
>>416
そんなに難解ではないぞ
: でない文字が0個以上続いて
その後に一文字だけ : があるパターンを
すべてスペースに書き換えるというだけの意味
418デフォルトの名無しさん
2020/09/25(金) 22:49:57.38ID:rXEBHfdh
●使用環境:RegEx Lab(iOSアプリ,ICU Regex)
●検索か置換か?:検索
●説明:時間毎の内容を取り出したいです。自分でも考えてみたのですが、(?m)(?<=\d{1,2}:\d{2}\r)([\s\S]*?)\r ではAt〜Mediaまで取得できませんでした。
補足として、各内容の前後には必ず時間と空白行が挿入されています。ただし、テキストにも空白行が挿入されている場合があります。ちなみに日付毎にファイルが分かれているため、対象データ最上部の日付が途中に挿入されることはありません。

●対象データ

25 September 2020
=================

8:05
テキスト1

10:44
テキスト2
At: スポット名: 位置情報・座標
Tags: タグ1, タグ2
Media: 123abcdefg.jpg
Media: hijklmn456.png

●希望する結果
○マッチ1
テキスト1

○マッチ2
テキスト2
At: スポット名: 位置情報・座標
Tags: タグ1, タグ2
Media: 123abcdefg.jpg
Media: hijklmn456.png
419デフォルトの名無しさん
2020/09/26(土) 02:18:28.42ID:Xs9MiFl7
とりあえず鬼雲なら
\d\d?:\d\d\n(([^\n]+\n)+)
で\1なり$1なりで取り出せるけど

どー使うのかしらねーけど改行に続く時刻消せばいいんじゃねw
420デフォルトの名無しさん
2020/09/26(土) 07:24:38.50ID:QW/S7GaB
\d\d?:\d\d\n\K((.(?!^\d\d?:\d\d))+\n)+
マッチに時間の直前の空行まで含めるのか?含まないのか?
テキスト終端(例だとテキスト1\n 456.png\n)の改行文字を含めるのか?含まないのか?
マッチがどこまでなのか曖昧
2段階になるけど一旦時刻をテキスト中に現れない文字に置換すれば簡単に出来る
^\d\d?:\d\d → ★
[^★]+
時刻の直前の空行を含まないのなら
\n\d\d?:\d\d → ★
テキスト終端の改行を(ry
\n\n\d\d?:\d\d → ★
421デフォルトの名無しさん
2020/09/26(土) 19:21:20.61ID:aEJhlUXF
>>419
>>420
ありがとうございます!
試してみたところ、Meryでは問題なく動作しているようでしたがRegEx Labでは動作しませんでした…

> 時間の直前の空行
>テキスト終端(例だとテキスト1\n 456.png\n)の改行文字
どちらも含めずに取得したいです。
422デフォルトの名無しさん
2020/09/26(土) 19:40:36.95ID:5brst4gY
(?m)(?<=^\d{1,2}:\d{2}(?:\r\n|(?<!\r)\n|\r(?!\n)))^[\s\S]*?(?=(?:\r\n|(?<!\r)\n|\r(?!\n))+\d{1,2}:\d{2}(?:\r\n|(?<!\r)\n|\r(?!\n))|(?:\r\n|(?<!\r)\n|\r(?!\n))*\z)
423デフォルトの名無しさん
2020/09/26(土) 20:25:49.24ID:W0BkzYxL
こういう長い正規表現てやっぱ遅くなったりするの?
424デフォルトの名無しさん
2020/09/26(土) 20:47:28.01ID:5brst4gY
これでよかったっぽい
(?m)(?<=^\d{1,2}:\d{2}(?:\r?\n|\r))^[\s\S]*?(?=(?:\r?\n|\r)+\d{1,2}:\d{2}(?:\r?\n|\r)|(?:\r?\n|\r)*\z)
425デフォルトの名無しさん
2020/09/26(土) 20:48:16.86ID:5brst4gY
>>423
どうだろうね、基本的な構造は>>418と同じだけど
データの改行コードがどうなっているのか謎だったのでとりあえず全種類対応しようと欲張ったらこんなことに

\n に置き換えるとこう
(?m)(?<=^\d{1,2}:\d{2}\n)^[\s\S]*?(?=\n+\d{1,2}:\d{2}\n|\n*\z)
426デフォルトの名無しさん
2020/09/26(土) 20:52:05.12ID:yw3DqGjj
長い短いではなく、試行回数が多い記述(行ったり戻ったり何度もやり直すもの)が遅い
そういうのは逆に記述を詳しくしたりして長くするほうが速い
427デフォルトの名無しさん
2020/09/26(土) 21:02:00.75ID:aEJhlUXF
>>424
問題なく動作しました、ありがとうございます!
本当に助かりました!
428デフォルトの名無しさん
2020/09/26(土) 21:08:10.61ID:GBugeZhr
>>416
正規表現のデフォルトは、貪欲・greedy・最長一致だから、
非貪欲・reluctant・最短一致にしたい場合に使う。? と同じ

[^x]*、x以外の文字を、0個以上
[^x]+、x以外の文字を、1個以上

Ruby では、

src = "12x34x56"

p src[ /.*x/ ] #=> 12x34x

p src[ /.*?x/ ] #=> 12x
p src[ /[^x]*x/ ] #=> 12x
429デフォルトの名無しさん
2020/09/26(土) 21:51:29.79ID:awo63W4n
>>426
行ったり戻ったりはないんじゃない?
430デフォルトの名無しさん
2020/09/26(土) 22:57:54.77ID:U+G6yEte
>>429
バックトラックの事でしょ
https://qiita.com/mochizukikotaro/items/d36e61e56220da5f95d1
431デフォルトの名無しさん
2020/09/27(日) 04:53:12.79ID:ICi3HfJX
\d{1,2}なら\d\d?
\d{2}なら\d\d
の方が短く済むから2桁以下なら無駄
432デフォルトの名無しさん
2020/09/27(日) 05:56:53.69ID:nMBRMM6J
それは見易さと短さのどちらを優先するかによる
短いだけが正義では無い
2つ程度で見易いもクソも…と思うかも知れないが慣れない者にとっては数字の方が見易いらしい
俺は断然\d\d?派だが

でもこれは(?:\r?\n|\r)→(?:\r\n?|\n)
同じ意味だが
\r
\r\n
 \n
をどう表すか?ってことだから後者のように前方を固定した方が分かり易いと思う
RtoLが関係してたりするのだろうか?
433デフォルトの名無しさん
2020/09/27(日) 06:00:47.57ID:Y+KxHJb0
今どき\rだけとか見ないし\r?\nで良くね? 駄目?
434デフォルトの名無しさん
2020/09/27(日) 20:03:40.48ID:+P5c8fwT
●Regular Expressionの使用環境

c# .net Framework 4.8

●検索か置換か?
検索

●説明
「,」区切りの2桁の文字列を全て取得したい(Split関数でなく)。


●対象データ
04,05,28

●希望する結果
04
05
28

●補足
現在使っている正規表現は右です (\d{2})(?:,(\d{2}))*
これを使うと、対象となる2桁の数字のうち、最初と最後のものしか取得できません
対象データが4個以上でも同様です
435411
2020/09/27(日) 20:26:03.04ID:qo22866j
以前 >>409 で質問し解答を頂いた者です。
内容は同じなんですが、この置換を他のパターンでも応用したく再度質問致します。

●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
置換

●説明
◆を含まない行の▲を■に置き換えたい
◆▲■は任意の文字列で、文字数も決まっていません。

●対象データ
Sst68▲h4◆
DRkPP2▲V
NN▲◆9K12XV▲
G▲RL88▲A7

●希望する結果
Sst68▲h4◆
DRkPP2■V
NN▲◆9K12XV▲
G■RL88■A7

どうぞよろしくお願いいたします。
436デフォルトの名無しさん
2020/09/27(日) 21:00:31.89ID:7/tRzxCb
>>430
極端な例だろうけど4倍も差が出るのか
437デフォルトの名無しさん
2020/09/27(日) 21:15:26.41ID:5NvF/cEJ
>>434
(¥d{2}),?
438デフォルトの名無しさん
2020/09/27(日) 22:52:42.77ID:+P5c8fwT
>>437
返信ありがと
だけど上手く取得できないです
対象データが 04,05,28 のときにマッチしたグループを全部出力すると
04,
04
となります
439デフォルトの名無しさん
2020/09/27(日) 23:09:03.39ID:5NvF/cEJ
>>438
MatchじゃなくてMatches使ってね
よく考えたら単に¥d{2}でもよくない?
440デフォルトの名無しさん
2020/09/27(日) 23:09:42.50ID:PP0FbEmI
>>436
ちっとも極端じゃないよ
対象テキストが長くて酷いと数sと数msとか何千倍、何万倍も差がつく
もっと極端なことにもなって、だんまり(終わらない)状態になることもある
441デフォルトの名無しさん
2020/09/27(日) 23:11:27.15ID:PP0FbEmI
あ、そのリンク先の表現でのことじゃなく一般的な話としてのことなので、念のため
442デフォルトの名無しさん
2020/09/27(日) 23:23:38.28ID:+P5c8fwT
>>439
おかげさまで出来ました。ありがとうございます
443デフォルトの名無しさん
2020/09/28(月) 00:15:40.71ID:KUcib4mR
数年前に某技術系Q&Aサイト全体が30分以上応答不能になったことがあったけど、アレもbacktrack絡みの正規表現処理(に高負荷をもたらす投稿)がトリガーだったはず
444デフォルトの名無しさん
2020/09/28(月) 00:39:03.54ID:HqyKtYng
Jane系のNGEx,ReplaceStr.txtの正規表現で酷いものが投稿されることがある
よく吟味しないと
対象スレ(ちょっと長いスレとか)によってはだんまりとか発生する
445デフォルトの名無しさん
2020/09/28(月) 05:18:56.57ID:QIpyCS2B
>>435
一旦、grep で、◆ を含まない行だけを抽出してから、処理すれば?

grep -v "◆" ファイル名
446デフォルトの名無しさん
2020/09/28(月) 05:43:11.14ID:9VrOlQkL
バックトラックは対象が簡単に一致するものしか無いのであればそれほど気を使わなくても良いが
一致しないものがある場合 一致しない に至るまでに全パターンを試すから
その挙動を必要最小限に抑えたものとそうでないものとでの試行数は桁違い
対象が長くなれば数倍どころでは済まない
大抵の場合、人が確認する際のロジックを再現するのが1番効率が良い

NGEx.txtを晒すスレ7
http://jane2ch.net/test/read.cgi/community/1497272912/340
(<br>.*){20}             49194006ms  激重
^(.*?<br>){20}            *1570733ms
^(?:(?:(?!<br>).)*<br>){20}     ****2202ms  軽い
^(?>.*?<br>){20}           ****1784ms  もっと軽い
447435
2020/09/28(月) 15:22:21.72ID:R3xf3P8N
>>445
単なるテキストならいいのですが、用途としては
リネーマーソフトReNamerやAdvanced Renamerなどで
バッチ処理にも使いたいので。
448デフォルトの名無しさん
2020/09/28(月) 18:16:12.67ID:RQEq0dPl
>>435
(?:^(?!.*◆)|\G(?!\A))(.*?)▲ → $1■
449デフォルトの名無しさん
2020/09/28(月) 18:54:06.13ID:R3xf3P8N
>>448
出来ました!素晴らしいです!マジ感謝です!ありがとうございました。
450デフォルトの名無しさん
2020/10/21(水) 20:12:01.53ID:nvjx5i9I
一文字だけで改行するのを
NGにするには
どうしたらいい?
451デフォルトの名無しさん
2020/10/21(水) 20:18:35.54ID:+qN3TxkM
>>450
テンプレを読んで出直しましょう
452デフォルトの名無しさん
2020/11/06(金) 11:29:16.13ID:xeNq05z2
oniguruma6.9.6 Windows10のVS2019で64bit版だとtestc.exeが無言で終了する、32bitだと正常。
Winodws7でVS2015U3だと64bitでも32bitでも正常に動作する。

これ、以前からWindows64bitが鬼門だなあ
453デフォルトの名無しさん
2020/11/10(火) 19:15:09.53ID:aUuUQimA
●PowerShell

●置換

●テキストファイル内の「WrtCookie=」で始まる行の値を「WrtCookie=」に置換する

●「WrtCookie=」で始まる行

現在のコマンド

$input = '^(WrtCookie=).+$'

$replacement = '$1'

$file_contents = $(Get-Content $filepath) -replace $input, $replacement

結果

テキストファイル内の全行が出鱈目な文字列に置換されます
たとえば「$1[$1W$1I$1N$1D$1O$1W$1]$1」など

よろしくお願いします
454デフォルトの名無しさん
2020/11/10(火) 21:00:25.97ID:UHXHz0W1
https://www.google.co.jp/search?q=PowerShell+%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+%E7%BD%AE%E6%8F%9B
455デフォルトの名無しさん
2020/11/11(水) 00:09:52.12ID:tbqNNnPd
>>454
書き込む前にたくさんググりましたが、ダメでした
456 【大凶】
2020/11/11(水) 01:27:50.51ID:zRgJ3mqg
>>453
変数名 input を regexp とかに変えれば上手くいくはず

input は「自動変数」として設定済
https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_automatic_variables
457デフォルトの名無しさん
2020/11/11(水) 02:35:05.41ID:wa6LgG/F
>>453
俺のところじゃ、そのままでも正常だけどなあ(win7だからか? PS ver.5.1)
その3行だけじゃあ表示も出力もされないので
$file_contents
を最後に追加した
その入力ってJane系のiniファイル(SJIS)だよね?
ファイルに出力もして確認してみた
(デフォではUnicode16になっちゃうのでout-fileでencoding指定)
458デフォルトの名無しさん
2020/11/11(水) 05:21:46.13ID:yU9bVv8n
Windows 10、PSVersion 5.1 では、

input という名前が、ダメ!
459デフォルトの名無しさん
2020/11/11(水) 19:56:31.19ID:tbqNNnPd
>>456-458
おっしゃる通りに変数inputの名前を別の変数名にしたら出来ました
inputは予約語みたいなものだったのね
ありがとう
460デフォルトの名無しさん
2020/11/11(水) 22:49:04.53ID:yU9bVv8n
VSCode を使っていれば、白色になる・注意されるから、おかしいとすぐに分かる

まあ、echo などのエイリアスも、白くなるけど
461デフォルトの名無しさん
2020/12/12(土) 00:58:58.79ID:c3naq2mv
質問
abc

a,b,c
に一発で変換する正規表現を教えてください!
462デフォルトの名無しさん
2020/12/12(土) 07:54:00.68ID:hjoAkuIf
(?!^|$) → ,
463デフォルトの名無しさん
2020/12/12(土) 09:13:39.74ID:weC8GZqi
461じゃないけど、知らなかった。

 行頭じゃない&行末じゃない

だけ言えば字間全てに入れてくれるんだ。
464デフォルトの名無しさん
2020/12/12(土) 09:45:07.71ID:DbQnMcwq
s//,/g
だと、,a,b,c,になる
465デフォルトの名無しさん
2020/12/12(土) 10:10:46.24ID:c3naq2mv
>>462
ありがとうございます!
466デフォルトの名無しさん
2020/12/15(火) 08:04:57.95ID:RAwP5vtJ
●Regular Expressionの使用環境
Perl5
●検索か置換か?
検索
●説明
文字列中のX,YY,ZZZのどれかが最初にあるまでのX,YY,ZZZを含む抽出
●対象データ
ABXCDXEFYYGH
ABYCZZZDXEFYYGH
ABCDXXGHZZ
●希望する結果
ABX
ABYCZZZ
ABCDX

お願いします
467デフォルトの名無しさん
2020/12/15(火) 08:15:41.96ID:M4wr588R
>>466
($out) = ($in =~ /(.*?(?:X|YY|ZZZ))/)
468デフォルトの名無しさん
2020/12/15(火) 08:17:29.03ID:cXhQAKUm
>>466
試してないけど、
\A.*?(X|YY|ZZZ)(?=(X|YY|ZZZ))
469デフォルトの名無しさん
2020/12/15(火) 08:49:36.46ID:RAwP5vtJ
>>467-468
ありがとうございます。
最初のでできました。
470デフォルトの名無しさん
2020/12/19(土) 09:53:24.06ID:YTpQ8Jg0
ublacklistでPinterestをブロックする正規表現教えて下さい
471デフォルトの名無しさん
2021/01/11(月) 15:03:41.29ID:A5mldiyH
行末以外の改行を任意の一文字(今回はアットマーク)に置換したいのですが可能でしょうか?
改行コードは、crもlfもcrlfも混じってるものとしてお願いしたいです。
472デフォルトの名無しさん
2021/01/11(月) 15:10:21.63ID:WVZOdukT
>>471
行末の改行と行末でない改行を区別する方法がわからぬ
CSVみたいな感じ?
473デフォルトの名無しさん
2021/01/11(月) 15:31:25.19ID:zqhSwaSS
初学者なのでうまく伝わるか心配ですが、 固定長で末尾に改行が入っているレコードファイルを扱っています
その中で、末尾だけでなくレコード中にも改行コードが含まれるようなデータがあり、それを置換したいといった具合です。

UNIX上での話なので、Perlやsedで置換できればと思います。
よろしくお願いいたします。
474デフォルトの名無しさん
2021/01/11(月) 15:41:19.51ID:8i1ZTkbL
sedはデフォルト行ベースなので改行コードを全部置換すればいい
475デフォルトの名無しさん
2021/01/11(月) 15:43:13.55ID:92N2rfT4
/[\r\n]++(?!$)/@/g
こんな感じじゃね?分からんけど
476デフォルトの名無しさん
2021/01/11(月) 16:15:14.39ID:rLqIFFRR
s/\r?\n/@/gm;

どうよ?
477デフォルトの名無しさん
2021/01/11(月) 16:20:44.13ID:A2M5zvGV
固定長ごとに出てくる改行以外の改行ってことじゃね
改行含めて80文字固定長なら80文字目や160文字目以外の37文字目や53文字目に出てくる改行
478デフォルトの名無しさん
2021/01/11(月) 17:26:33.52ID:8i1ZTkbL
あーすまんそういうことか
それだと固定長単位に読み取って置換と出力のループかな

while read -N10 line || [ "$line" ]; do
echo "$line" | tr -d '¥r¥n'
echo
done < input.txt
479デフォルトの名無しさん
2021/01/11(月) 17:59:11.32ID:Op1S7Ai1
やりたいことは、 >>477 さんの仰る通りです。
少ない情報の中、皆さん色々とありがとうございます。

明日以降試してみます、本当にありがとうございます。
480デフォルトの名無しさん
2021/01/11(月) 18:31:58.04ID:RwOnRvzI
改行コードは、cr・lf・crlf の3種類あるのか?

固定長の末尾の改行の後には、何が入っている?
ヌル文字か?

例えば、100バイトの固定長で、内容が80バイトなら、
残りの20バイトには、何が入っている?

それとも、内容の80バイトの部分だけが、渡ってくるのか?
481デフォルトの名無しさん
2021/01/11(月) 18:43:53.19ID:5PaUweSP
CR なんとかReturn
LF LineFeed
CRLF なんとかReturnLineFeed
482デフォルトの名無しさん
2021/01/11(月) 20:39:57.39ID:F0XanEVZ
echo -en "abcde
a\ncde
a\rcde
a\r\nde
abcdef
a\ncdef
a\nc" |
sed -re ':b;y/\r\n/@@/;/.{5}/!{N;bb};'
483デフォルトの名無しさん
2021/01/11(月) 21:38:18.11ID:6WXFekQD
>>471
CRLFは@2個に置換でいいんだよね?
CRLFを@1個に置換したら固定長ファイルとして
ファイル構造がおかしくなるわけだし
484デフォルトの名無しさん
2021/01/12(火) 17:48:10.93ID:fqpU06Zc
>>481 carriage
485デフォルトの名無しさん
2021/01/14(木) 20:15:05.94ID:uu7IOQ/X
>>479
解決しましたか?
486デフォルトの名無しさん
2021/01/14(木) 20:19:20.00ID:eDcISF88
うざw
487デフォルトの名無しさん
2021/01/15(金) 04:04:23.16ID:VxNLJyBo
先日質問させていただいた471です。
色々と試した結果、
perl -pe ‘s/¥r/@/g $INFILE | perl -pe ‘s/¥n/@/g > $TMPFILE

cat $TMPFILE | perl -e ‘while(read(STDIN, $tmp , 100)){print $tmp, “¥n”}’ > $OUTFILE

と言った具合に、改行を消してから固定長に区切って再度改行付与という形でうまくいきました!

皆さんに教えてもらった方法とは少し異なりますが、ここで質問しなければ検索ワードすら導き出せませんでした。
皆様には感謝してもしきれません。
ありがとうございました。
488デフォルトの名無しさん
2021/02/02(火) 23:52:09.94ID:LuWw9dWt
[]で囲まれた単語は/\[.+\]+/gで見つかるけど
文中に複数[]で囲まれた範囲があるとうまくいかない
'['以降で一番近い']'にマッチさせたいんだがどうやるか教えて
489デフォルトの名無しさん
2021/02/03(水) 00:24:53.98ID:SY/XoUH2
/\[[^\]]+\]+/g
490デフォルトの名無しさん
2021/02/03(水) 01:04:29.59ID:UENZ/29T
>>489
ありがとう!
491デフォルトの名無しさん
2021/02/03(水) 18:02:08.71ID:CJ1qfEuB
英数字7桁[0-9a-zA-Z]の文字列から(改行を経て)先程とは異なる英数字7桁の文字列まで最短一致させる正規表現を書きたいのですがわかりません…

一つ目の7桁の英数字は変数fistに入ってます
new Reg(first +"(.*\n)*?"+ここから先がわかりません

どなたかよろしくお願いしますm(_ _)m
492デフォルトの名無しさん
2021/02/03(水) 18:33:27.05ID:sadlF3mb
最短一致ということは行当たりが[0-9a-zA-Z]{7}ではなく別の文字列も含んでいそうな
つまり「0123abc\ndef4567」だけではなく「あいう0123abc\ndef4567かきく」もあるとか

見本出した方がいいのではないかな
493デフォルトの名無しさん
2021/02/03(水) 18:41:43.46ID:q3Uucr84
とりあえずこんな感じであとは調整して
https://regex101.com/r/aLWgGd/1
494デフォルトの名無しさん
2021/02/03(水) 19:08:15.83ID:CJ1qfEuB
>>492
すいません、簡単にするために設定をちょっと変えさせてください。
[0-9A-Z]
大雑把で大丈夫なんですが
あいうえお01ABC23あいうえお01abc23あいうえお01abc23  ←ここの01ABC23から
あいうえお01abc23あいうえお01ABC23あいうえお01abc23
あいうえお01abc23あいうえお01ABC23あいうえお01abc23
あいうえお01abc23あいうえお01DEF23あいうえお01abc23  ←ここの01DEF23まで切り抜きたい
あいうえお01abc23あいうえお01ABC23あいうえお01abc23
あいうえお01abc23あいうえお01HIJ23あいうえお01abc23

first = "01ABC23" が入ってるので、正規表現の最後を01DEF23にしたいのですが
[0-9A-Z]{7}から"01ABC23"だけを除外する方法がわからず困ってます。
495デフォルトの名無しさん
2021/02/03(水) 19:12:17.69ID:CJ1qfEuB
>>494
訂正 「大文字と数字だけの7桁に設定変更させてください」って文言が抜けてました

>>493
すいません、その後の調整方法がわからないんです...
496デフォルトの名無しさん
2021/02/03(水) 19:16:51.84ID:CJ1qfEuB
日本語がおかしくなってました

01ABC23〜01DEF23と切り抜きたいのですが、
first = "01ABC23"と入っているので、firstという変数を使いつつ[0-9A-Z]{7}から"01ABC23"だけを除外する方法がわからず困ってます。
497デフォルトの名無しさん
2021/02/03(水) 19:28:51.74ID:oLpXy7xv
>>496
"(?!" + first + ")[0-9A-Z]{7}"
498デフォルトの名無しさん
2021/02/03(水) 19:41:14.94ID:CJ1qfEuB
>>497
ありがとうございますm(_ _)m
↓だと最短一致しないのですが、真ん中がおかしいのでしょうか?

let reg = new RegExp(first+"(.*\n)*?"+"(?!"+first+")[0-9A-Z]{7}");


改行を含めた最短一致は([\s\S]*?)か(.*\n)*?でできていたのですが、何故か最短にならず困ってます
499デフォルトの名無しさん
2021/02/03(水) 19:49:30.28ID:CJ1qfEuB
>>498
真ん中とは+で繋げた"(.*\n)*?"の部分のことです
日本語すら怪しくてすみません
500デフォルトの名無しさん
2021/02/03(水) 20:21:28.10ID:CJ1qfEuB
>>498
自己解決しました
スレ汚しすみませんでした
答えてくださった方々ありがとうございました
501デフォルトの名無しさん
2021/02/04(木) 12:49:19.54ID:ynIf2rIG
[正規表現の[表現力[は]ネストに]勝てない]
※Perlの拡張とかは除く
502デフォルトの名無しさん
2021/02/04(木) 15:31:37.02ID:7s9fZWEo
繰り返しの中で使う時、時間のかかる正規表現を避けたいが、結局試すのが一番
if x=="abc" と if x=~/^abc$/ の比較など(簡単すぎる例)

重要なシステム内で複雑な表現を使う場合テストも重要だが、
どうしてもおかしくなったら調べる式になってしまう
503デフォルトの名無しさん
2021/02/06(土) 14:47:08.00ID:s4jA/y9i
お願いします

●Regular Expressionの使用環境
VBScript

●検索か置換か?
置換

●説明
[hoge]をブラケットごと消したい
[[hoge]]の場合は残したい

●対象データ
abc[hoge]def
ghi[[hoge]]jkl

●希望する結果
abcdef
ghi[[hoge]]jkl
^^^^^^^

否定戻り読み否定先読みで試してみたのですが、ブラケット2回の場合にマッチせずブラケット1回の場合にのみマッチさせる方法が分かりませんでした
よろしくお願いします
504デフォルトの名無しさん
2021/02/06(土) 15:07:35.62ID:bKRJeVsu
(?<!\[)\[hoge\](?!\])
505デフォルトの名無しさん
2021/02/06(土) 16:56:52.18ID:EC31O1b+
>>503
VBSには否定戻り読みは無いので、工夫するしかない
すぐには思いつかないけどもっといい方法もあるかもしれないのでググってみては?
愚直には、一つの方法として以下の場合に分ける
1) [hoge]で始まる場合
2) 文字列があって [ 以外で終わって [hoge] がある場合
3) 文字列があって [ で終わってる場合、[hoge] があって ] が続かないこと

pattern : "^(?:\[hoge]|(.*?\[)\[hoge\](?!\])|(.*?[^\[])\[hoge\])(.*)$"
replace : "$1$2$3"

abcdef → abcdef
[hoge]def → def
[[abc]]def → [[hoge]]def
abc[hoge]def → abcdef
abc[[hoge]]def → abc[[hoge]]def
abc[[hoge]def → abc[def
abc[hoge]]def → abc]def

下2つの場合が無ければもう少し簡易にできる
では[hoge]が2つ以上ある場合はどうするか?
すぐ思いつく方法としては、変換をループさせて、文字列に変化がなければ終わりとか
506デフォルトの名無しさん
2021/02/06(土) 17:17:15.94ID:do+3t/u8
(¥[hoge¥])(?!¥])|[^¥[](¥[hoge¥])
https://regex101.com/r/xhea5T/1
507デフォルトの名無しさん
2021/02/06(土) 17:31:09.15ID:nqcg0owg
(\[\[hoge\]\])|\[hoge\] → $1
https://regex101.com/r/xhea5T/2
508デフォルトの名無しさん
2021/02/06(土) 17:40:46.95ID:bKRJeVsu
([^\[])\[hoge\]([^\]])
$1$2

(^|[^\[])\[hoge\]([^\]]|$)
$1$2
509デフォルトの名無しさん
2021/02/06(土) 17:44:51.10ID:s4jA/y9i
>>504->>508
ありがとうございます。
やってみます。
510デフォルトの名無しさん
2021/02/06(土) 18:09:33.55ID:EC31O1b+
>>507
すばらしいです
>>506,>>508
残念
511デフォルトの名無しさん
2021/02/06(土) 18:21:12.27ID:z9sN/DQY
発想の転換だな
目鱗
512デフォルトの名無しさん
2021/02/06(土) 18:57:27.44ID:do+3t/u8
>>507
へぇー、これは面白い
513デフォルトの名無しさん
2021/02/06(土) 19:33:52.91ID:nvvrKfMw
>>507
これは賢い
514デフォルトの名無しさん
2021/02/16(火) 18:09:22.76ID:YYQsROlp
※間はタブです
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
置き換え

●説明
(ABC|JKLHI7)を反転させたい

※(ABC|JKLHI7)→空に置き換え
ABC    DEF     123
FGH    JKL     956
GBN    MJK    HI7

↓こうなります

    DEF     123
FGH         956
GBN    MJK

(ABC|JKLHI7)を反転させて
ABC    
    JKL     
        HI7

というデータに置き換えたいです。
よろしくお願いいたします。


    
515デフォルトの名無しさん
2021/02/16(火) 18:10:03.36ID:YYQsROlp
>>514
説明の部分に誤りがありました。
●説明
(ABC|JKLHI7)を反転させたい

でなく
(ABC|JKL|HI7)を反転させたい

でした。
516デフォルトの名無しさん
2021/02/16(火) 18:30:01.16ID:9J2HaZUU
区切りは全角空白なのかい?
まあこんなのでどう?
(ABC|JKL|HI7)|[0-9A-Z]*→$1
517デフォルトの名無しさん
2021/02/16(火) 19:29:55.89ID:YYQsROlp
>>516
ありがとうございます。
その発想まったくありませんでした。

ほしいものカッコで包んで|要らないもので置き換え
御見それしました。

ありがとうございます。
518デフォルトの名無しさん
2021/02/16(火) 20:11:15.08ID:2Q6k9WLx
>>516
>>507再び
再度>>511感想
519デフォルトの名無しさん
2021/02/17(水) 00:48:24.95ID:5uVmT0ro
XABCXのようなものまでABCにしたいなら、末尾を+?に変えた方がいいかも
520デフォルトの名無しさん
2021/02/18(木) 23:51:52.71ID:sRdwF113
面白いなあ
逆に正規言語じゃない言語ってどんなのか気になる
521デフォルトの名無しさん
2021/02/19(金) 07:25:19.97ID:1ojHRCGQ
言語?
522デフォルトの名無しさん
2021/02/19(金) 18:55:29.37ID:Clj7wgUu
文脈自由言語とか文脈依存言語とか?
523デフォルトの名無しさん
2021/02/19(金) 20:03:11.77ID:gWMDVcMR
文脈も先読み後読みrematch駆使すれば取れそうに思うけど、本来どこまでやっていいんだっけ 理論とか分からん
524デフォルトの名無しさん
2021/02/19(金) 20:05:33.21ID:Wnqd+KEH
正規表現で記述可能な文字列の集合を指して正規言語という

が、その意味で使われたのかは定かでない
525デフォルトの名無しさん
2021/02/19(金) 20:15:12.89ID:gWMDVcMR
取り敢えずその言語がn要素の有限集合ならstr1|str2|...|strn で表現できるのでは
文字列の長さを制限して、有限の文字集合なら
すげーつまらないけど
526デフォルトの名無しさん
2021/02/19(金) 20:33:20.22ID:gWMDVcMR
無作為な文字列から、特定の言語に属する部分列を検出しろ、って問題にどれだけ簡潔に答えられるかってことだよな
どう計ったものか
527デフォルトの名無しさん
2021/02/20(土) 01:01:18.47ID:yNkkv6Pq
AIに正規表現を設計させたらどんなものになるのだろう
528デフォルトの名無しさん
2021/03/03(水) 06:22:13.41ID:7UFtTk12
●Regular Expressionの使用環境
python 3.x

●検索か置換か?
検索

●説明
ここをアクセスの次に出てくるURL(http://xxxx2/)をとってきたい
pattern = re.search("▼ここをアクセス.*(http.*\n)+?",a_text,flags=re.DOTALL)
複数行検索してるが最後のURLをとってきてしまう


●対象データ

URL1です
http://xxxx2/



 □       【▼ここをアクセス】
http://xxxx2/

URL2です
http://xxxx3/

●希望する結果
http://xxxx2/
529デフォルトの名無しさん
2021/03/03(水) 06:44:56.40ID:lklpa5qm
> "▼ここをアクセス.*(http.*\n)+?"
python分からんけど
"▼ここをアクセス.*?(http.*?\n)"
530デフォルトの名無しさん
2021/03/03(水) 07:02:17.82ID:h6piMY+h
>>529
レスサンクスですが、最後のhttp://xxxx3/を拾ってきてしまいます
531デフォルトの名無しさん
2021/03/03(水) 07:20:09.73ID:h6piMY+h
自己解決
"▼ここをアクセス.+?(http.+?)\n"
でいいみたい
532デフォルトの名無しさん
2021/03/07(日) 14:22:59.84ID:Fo2Np7TJ
正規表現ってパズルとしては面白いけど
https://oraclesqlpuzzle.ninja-web.net/regex/index.html
可読性に問題あるんじゃね?
もっとマシな別の表記方法が必要じゃないか?
533デフォルトの名無しさん
2021/03/07(日) 16:02:01.74ID:UIB+9WXp
自分が解らないものは悪
534デフォルトの名無しさん
2021/03/07(日) 16:17:46.75ID:TNmQ0Vam
理解の過程で可読性に問題があるのではと疑問を抱き、
別の表記法の必要性を考え、
そのあと別の表記を実際に考えるところまでやると、
正規表現考えたケン・トンプソンすげーなってなる
535デフォルトの名無しさん
2021/03/07(日) 17:26:15.98ID:FZPehcc/
>>532
> もっとマシな別の表記方法が必要じゃないか?
定期的にそう言うのが話題になるけどなかなかいい記法が無いんだよね
abc+
程度の簡単な奴と
^((?!aaa).)*((?=aaa)a((?!aaa).)*){3,5}((?!aaa).)*$
みたいなパット見よく分からん奴を1つの記法で簡単に見易くするのはなかなか難しい
536デフォルトの名無しさん
2021/03/07(日) 17:53:05.78ID:AM/Ef9W/
やるとしたらアスキー文字以外の文字や記号を加えてもうちょっと役割を分散させると、機能を保持しつつ見やすくはなるが、そうすると今度はラテン文字圏の人が「自分が解らないものは悪」でいかに不要かを全力で説き始めると思う。
537デフォルトの名無しさん
2021/03/07(日) 17:56:22.71ID:TNmQ0Vam
ASCII外の文字使うと入力コストが高くなるじゃん
538デフォルトの名無しさん
2021/03/07(日) 18:04:15.76ID:4bEjyVwB
?とか^とか二つの意味を持つのは何とかしてほしかったよな
まあ分かるからいいんだけど
539デフォルトの名無しさん
2021/03/07(日) 20:25:01.40ID:RWgRWesX
可読性を犠牲にして短く書けるのが正規表現
正規表現と同じことを可読性の高い表現で記述しようとすればなにかと長くなる
ただある一定以上複雑な正規表現は普通のプログラミング言語で書き直したほうが可読性も保守性も高い
540デフォルトの名無しさん
2021/03/07(日) 21:12:54.42ID:0cOR0yWB
普通のプログラミング言語で正規表現ライブラリ使ってます
541デフォルトの名無しさん
2021/03/07(日) 21:23:44.60ID:FZPehcc/
例えば.NETみたいに正規表現中に改行入れたりコメント書けるようにするとかして可読性を上げる試みはあるね
https://www.atmarkit.co.jp/fdotnet/dotnettips/582regexcomment/regexcomment.html
542デフォルトの名無しさん
2021/03/07(日) 21:31:45.50ID:Fo2Np7TJ
>>539
それしかなさそうだ
543デフォルトの名無しさん
2021/03/07(日) 21:36:49.39ID:6FoXMbth
>>541
改行してコメント書くのは Perl の正規表現でもできたりする
544デフォルトの名無しさん
2021/03/07(日) 21:55:32.23ID:RWgRWesX
>>541
その例にある(?<url>.*?)みたいな名前付きキャプチャも
可読性を上げられる数少ない要素だと思うけど
545デフォルトの名無しさん
2021/03/07(日) 22:46:53.20ID:Fo2Np7TJ
https://oraclesqlpuzzle.ninja-web.net/regex/regex-2-30.html
これは解読無理やろw 課題→正規表現を思いつくことはできるかも知れんが
正規表現→課題の解読は不可能に近い

課題:行ごとで、
文字列CABと
文字列ABCのみの行を検索する。

^((C(?=AB))|((?<=C)A(?=B))|((?<=CA)B)
|(A(?=BC))|((?<=A)B(?=C))|((?<=AB)C))*$
546デフォルトの名無しさん
2021/03/07(日) 23:05:17.93ID:6FoXMbth
>>545
^(?:CABC?|ABC(?:AB)?)+$

でよくない?
547デフォルトの名無しさん
2021/03/07(日) 23:21:37.42ID:Fo2Np7TJ
それで同じ結果になるな regex 101 でやると
548デフォルトの名無しさん
2021/03/07(日) 23:53:47.53ID:4bEjyVwB
正規表現には「必ず」コメントが欲しいな
できれば例も
典型例と境界例も
549デフォルトの名無しさん
2021/03/11(木) 21:40:27.72ID:RBQB718T
お願いします
●Regular Expressionの使用環境
JavaScript

●検索か置換か?
置換

●説明
数字の文字列の間の1個以上の空白や改行を カンマで置換して繋げたい

33034640, 33034640, 21703214
●対象データ
33034640 30203225

21703214
550デフォルトの名無しさん
2021/03/11(木) 22:14:06.84ID:IDj18sQF
>>549
¥s+をカンマで置換
551デフォルトの名無しさん
2021/03/11(木) 22:15:56.92ID:IDj18sQF
https://regex101.com/r/h90Hqy/1
552デフォルトの名無しさん
2021/03/11(木) 22:29:51.41ID:79QhYvaG
前後の数字チェック入り(区切りに\t,\fを除く)
(JavaScriptって言ってもWSH(JScript)や古いとダメ)
text.replace(/(?<=\d)[ \r\n]+(?=\d)/,", ")
553デフォルトの名無しさん
2021/03/11(木) 22:30:57.72ID:79QhYvaG
text.replace(/(?<=\d)[ \r\n]+(?=\d)/g,", ")
554デフォルトの名無しさん
2021/03/11(木) 23:04:03.06ID:RBQB718T
>>550
それすると文頭や文末にあるスペースにもカンマがついて変になっちゃいます。
555デフォルトの名無しさん
2021/03/11(木) 23:08:30.44ID:RBQB718T
>>553
iPadのtextwellっていうアプリでやってるんですが・・・何故か動かないです
556デフォルトの名無しさん
2021/03/11(木) 23:29:09.19ID:IDj18sQF
>>554
うーんなんだかなぁって感じだけど
look-behindが使えない環境ならキャプチャして上書きすればいいよ
https://regex101.com/r/ttVIeE/1
557デフォルトの名無しさん
2021/03/11(木) 23:33:53.05ID:APoyxLpJ
文頭,文末のスペース,改行を残す必要がないなら先にtrimしちゃえば良いのでは
str.trim().replace(/\s+/gm, ',')
558デフォルトの名無しさん
2021/03/12(金) 07:31:49.43ID:/Ahlj9GN
>>557
できました!ありがとうございました!
559デフォルトの名無しさん
2021/03/25(木) 17:05:14.58ID:m/0xUypz
浮動小数点数の仮数部の正規表現がたとえば
https://qiita.com/hitsumabushi845/items/1b1a4921d515f662b416
を見ると
([0-9]+(\.[0-9]*)?|\.[0-9]+)
とかなり煩雑な感じなんですが、これを[0-9]+と\.?のインターリービングとして表記できればより簡潔になるはずなのに、なぜ正規表現にインターリービングがないのか、ご存知の方いらっしゃいませんか?
560デフォルトの名無しさん
2021/03/25(木) 18:34:43.45ID:T+HzAix1
インターリービングとは
561デフォルトの名無しさん
2021/03/25(木) 18:35:20.79ID:iRaOTaqm
>>559
どういう意味?
[0-9.]+
っていうことか?
12.34.56
こういうものも拾うことになるけど
562デフォルトの名無しさん
2021/03/25(木) 18:44:54.48ID:ItxHMUbH
正規表現でやるものなのかそれ?
563デフォルトの名無しさん
2021/03/25(木) 20:05:19.84ID:DBtu6Q2L
0-9が1回以上、.が1回以下現れるパターンを簡潔に書ければいいんだよね
564デフォルトの名無しさん
2021/03/25(木) 20:51:18.60ID:T+HzAix1
>>559
0.123とかだけでなく.123みたいな表記も含めてるから煩雑に見えるだけでしょ
565デフォルトの名無しさん
2021/03/25(木) 20:57:31.28ID:+PvM3W0M
例えばpythonだと、

\d

と書くと、

[0-9]

と同じ意味になるんだが、その程度の省略ができるだけでは不満?
566デフォルトの名無しさん
2021/03/26(金) 12:59:11.27ID:8UZMtFlJ
まず\dと[0-9]は一致しないケースがあるからダメでしょ

単なるバイトシーケンスとして扱っているときは \d == [0-9] だけど、
Unicodeの文字列として扱っているときはUnicodeのNdカテゴリに一致するかを見るので
\dが全角の「0」に一致したりする

Pythonもこういう仕様持ってた気がするけどちょっと最近触ってないから怪しい
567デフォルトの名無しさん
2021/03/26(金) 13:48:50.07ID:9MjXQivW
([0-9]+(\.[0-9]*)?|\.[0-9]+)

なんかほかのものもマッチする
0.
0.0.0
https://regex101.com/r/MK7ZcW/
568デフォルトの名無しさん
2021/03/26(金) 13:50:58.63ID:9HpPnfto
\dより\wで嵌ることが絶対多い(Unicodeの場合)
569デフォルトの名無しさん
2021/03/26(金) 14:50:30.80ID:yQ1w8lx7
動きそうで動かないのは、\s\Sかな
改行かなにかで引っ掛からなくて困る事がある
570デフォルトの名無しさん
2021/03/26(金) 19:09:23.59ID:bWZQxU2M
>>567
部分列にマッチしたんだろうな
571デフォルトの名無しさん
2021/03/27(土) 07:24:19.21ID:6HYRQzqn
>>567
0. にマッチするのは仕様通り
0.0.0 にマッチしてるのはグローバルフラグを付けるてるから 0.0 と .0 にマッチしてる
外せばマッチしないよ
572デフォルトの名無しさん
2021/03/27(土) 07:53:26.38ID:c8B2TB9l
>>571
.0にマッチするのは正しいんじゃないの?
要らないなら[0-9]+(\.[0-9]*)?で済むでしょ
573デフォルトの名無しさん
2021/03/27(土) 07:59:48.48ID:HYD5C7Ts
数値として正しくないものの一部にマッチするのがいやなんだろ
そりゃ前後の条件を指定してないからマッチするのは当然なんだから
(?<![0-9.])と(?![0-9.])を前後につけりゃ弾けるよ
574デフォルトの名無しさん
2021/03/27(土) 08:17:02.42ID:8mKnzpia
>>573
そういう話ではない
>>559のリンク先の正規表現から浮動小数点数の指数部である
末尾の([eE][+-]?[0-9]+)?を除いてるからおかしいだけ
そしてリンク先によると.123は意図的に含めてる
575デフォルトの名無しさん
2021/03/27(土) 09:50:47.60ID:6HYRQzqn
>>572
.0 にマッチするのは正しいよ
0.0.0 にマッチするのがおかしいって話ね
576デフォルトの名無しさん
2021/03/27(土) 10:05:58.69ID:8qqpgzaM
マッチしない行を正規表現で抽出したいとき、
必ず、^(?!.*残したい文字).*、この書き方になってしまいます、
必ず^(?!.*と).*で残したい文字を包むという書き方です。

ほかの書き方があれば教えてください。

例えば、以下のようなログファイルでerrだけ残したい場合は
^(?!.*err).*
と書いてerrを残します

[日付] warn メッセージ
[日付] info メッセージ
[日付] err メッセージ
[日付] info メッセージ

特段、これ以外の書き方が出来ず困ったという例も無いのですが、
ほかの表現を(あれば)知ることで、もっと知識を増やせるのではないとおもいお伺いします
よろしくお願いいたします。
577デフォルトの名無しさん
2021/03/27(土) 10:12:04.85ID:3M9UQTXy
>>567 のリンク先を確認したが
([0-9]+(\.[0-9]*)?|\.[0-9]+) が
0.0.0 の全体にマッチしているわけではない
578デフォルトの名無しさん
2021/03/27(土) 10:24:10.55ID:HRW8qdH1
>>576
最後の.*は要らないんじゃないかな
579デフォルトの名無しさん
2021/03/27(土) 10:53:48.21ID:cpUHfD3R
>>576
>例えば、以下のようなログファイルでerrだけ残したい場合は

in-placeで置換するより、残したいものを抽出して新しいファイルを作成したほうがよくないか?
用途によっては日付とログレベルを指定してログファイルに直接クエリを投げてもいい
580デフォルトの名無しさん
2021/03/27(土) 12:12:53.22ID:8qqpgzaM
>>578
>>579
すいません、めっちゃ肝心なことが抜けてました。
使用している環境は主にサクラエディタです。
581デフォルトの名無しさん
2021/03/27(土) 12:42:16.84ID:TmS3InK/
>>576
(.*err.*)|.* → $1
https://regex101.com/r/5BF9AH/1

それか鬼雲の非包含オペレータで ^(?~err)$
582デフォルトの名無しさん
2021/03/27(土) 15:07:28.25ID:cpUHfD3R
>>580
余計なお世話なんだろうけどログファイルをわざわざエディタで開いて
マッチしない行を正規表現で置換して保存するのは無駄じゃないのって話

↓例えばgrepならこれでよくて指定も簡単だし自動化もしやすい
$ grep 'err' all.log > err.log

マッチしない行を正規表現を使いそうな例として
たまたま思いついただけならならいいんだけど
583デフォルトの名無しさん
2021/03/27(土) 17:09:38.08ID:SqJSHKEy
マッチしない行は-v付ければ取り出せるからな
584デフォルトの名無しさん
2021/03/27(土) 18:55:12.69ID:HRW8qdH1
そもそもサクラエディタにはマッチしない行を抽出する機能あるからあまり真剣に考えたことない
585デフォルトの名無しさん
2021/03/27(土) 22:37:04.08ID:p2/S5VcH
ログの加工をエディタでやろうとするのは筋が悪いわな
586デフォルトの名無しさん
2021/03/28(日) 00:36:09.11ID:p6/Rs1VD
加工というか、ログは必要な部分だけ抽出して見たいという需要はある
587デフォルトの名無しさん
2021/03/28(日) 01:38:45.00ID:Ah6uwjvI
たまにトラブルシューティングとかで検索する程度ならLog Parserみたいなやつでそれなりに捗るよ
検索はリニアなので量が増えると遅いけどgrepに比べれば条件指定がしやすい
https://www.microsoft.com/en-us/download/details.aspx?id=24659

速度を求めるならBigQueryとかの検索/分析系のDBに突っ込む
588デフォルトの名無しさん
2021/03/28(日) 19:46:40.79ID:gm3gYlo8
>>580
サクラエディタ(bregonig.dll 4.10以降)使ってるなら
>>581も書いてるけど非包含オペレーターが使えます

鬼雲およびbregonig.dllの作者さん(
@k-takata)自身がQiitaに使い方とかも載せてます
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd
589デフォルトの名無しさん
2021/03/31(水) 03:07:25.18ID:AtIsL56M
regexエンジンって皆さんどういう基準で選んでますか?
ちょつとググるとcommon lispのcl-ppcreがダントツというベンチが出てきますが本当でしょうか?(このスレで言及が見当たらないもので…)
perl風なのがちょっと気になりますが
590デフォルトの名無しさん
2021/03/31(水) 03:15:02.21ID:AtIsL56M
(試せばいいんだけど、環境構築で折れました…)
591デフォルトの名無しさん
2021/03/31(水) 07:27:06.36ID:XV2UTtWr
特に制限なきゃ俺の採用基準は
・使おうとする言語で楽に使える奴
だな
あとダントツの基準や何を対象にするかは人によって違うから君の考えるダントツを説明しないと回答しようがないと思うぞ
592デフォルトの名無しさん
2021/03/31(水) 08:34:08.22ID:U/8CErR8
>>591
ベンチって書いてあるから速度でしょ
593デフォルトの名無しさん
2021/03/31(水) 11:28:59.80ID:Vc5hrOQS
ユースケースで速度は変わるからそれだけじゃなんとも言えないよね

NGフィルターみたいなものを高速にしたい場合に言語標準以外で考えるなら
re2かhyperscanを候補にするかな
594デフォルトの名無しさん
2021/03/31(水) 12:11:49.60ID:AtIsL56M
>>591-593
言葉足らずでしたごめん、線形にコードした化学式から部分構造マッチで設計に活かそうかと(古典的だけど)
chemspider.com等から100GB(100万エントリー)のテキストにまとめたが、重複や興味あるデータ以外はawk/sedでメモリに載せずに10GBまでは落とせるかも

コマンドライン引数で正規表現文字列を取り、そのままパイプで渡せる言語(cl、python等)なら速ければ何でもいいかなと
有名なperl/grepもパイプから読むけど、検索効率のためになんかキャッシュしてるようで、すぐメモリが膨らんでクラッシュする
595デフォルトの名無しさん
2021/03/31(水) 12:32:32.23ID:AtIsL56M
あんまり後処理できないけど、sedのg/re/pはスケーラブルみたい

g/re/commandのcommandでちょっと実験する限り、command中でmatch情報が使われてなければ保持しないのかな?
保持するmatch情報を指定出来き、match情報を得るたびに外部ファイルへ追記できる処理系が必要なのだろうか
596デフォルトの名無しさん
2021/03/31(水) 12:57:50.76ID:0y1R6Bno
なんとなく、パイプ避けたほうが
597デフォルトの名無しさん
2021/03/31(水) 13:30:47.96ID:oCEpBqBX
パイプ自体キューだからメモリ膨らむって理解してるんだけど違うのかな
598デフォルトの名無しさん
2021/03/31(水) 13:36:46.22ID:jIuPTrt2
>>596
メモリに載らないのはパイプ、みたいにバカの一つ覚えしてるんですけど、落とし穴あったりするんですかね?
バッファリングモードには一応気をつけてるつもりですが、詰まらないようにflushを書き加えて再コンパイルしたり
さすがにインタプリタまでは手を入れませんが…

パイプ避けるとなると、
ファイルを100くらいに細かく割り、ループ内で各ファイルを順にメモリマップ、regex掛けて(マッチ情報、ファイル名、行番号)をdbmsに格納
目ぼしいマッチ情報をクエリで拾いながら、(ファイル名、行番号)でシークしてマッチ部分に処理を適用&db書き戻し
って感じになりますかね?
599デフォルトの名無しさん
2021/03/31(水) 13:39:03.95ID:jIuPTrt2
>>597
プロセスの使用メモリ見ながらバッファリングは調整してますが、regex処理系のメモリ使用量がI/Oの収支と合ってないのでキャッシュだと思います
600デフォルトの名無しさん
2021/03/31(水) 14:03:15.96ID:c0V7LnWa
highwayとかであかんの?
601デフォルトの名無しさん
2021/03/31(水) 14:18:33.85ID:AtIsL56M
いや合ってるのかな…シェルの知識が乏しいので

基本はスループット最大化を目指してエンジンとパイプ前後のバッファリングモードを調整で合ってますよね?

linux/bashだと改行待ちで詰まりやすいのでstdbufが効くならそれで、効かないなら強制フラッシュ
win/pwsh6&7のパイプラインは逆にバッファリング殆ど貯めないようで、pythonだとio.Streamでかなり改善しました

>>600
詳しく!
regex highwayあたりでググってもノイズだらけです
602デフォルトの名無しさん
2021/03/31(水) 18:56:13.01ID:Vc5hrOQS
正規表現が向いてる用途かどうか微妙だなぁ
少ないデータ量で目的にあったライブラリを使ってみて性能の最適化はそれ次第だな
https://www.rdkit.org/docs_jp/Supplementary_Text_jp.html#jp-notes-6

データの中身と検索用途にあったデータベースに入れて
速度は並列度を上げるほうが楽でメンテもしやすくて速度も出やすいような
603デフォルトの名無しさん
2021/03/31(水) 19:14:36.42ID:AtIsL56M
>>602
RDkitもちろん使ってるよー
SMILESの検索性上げたのがInChIで、その辺扱ったり、代表的な特徴量を生成するライブラリは沢山あるんだけど、もうやり尽くされた感じで
既存のデータが正規表現で扱う想定のフォーマットだから、まずは正規表現で引っ掛けて独自フォーマットに変換、という感じです

あと、勝手にオンラインから拾って来てくれたり便利なんだけど、10GB単位のリクエスト送りまくるとアク禁食らいそうだから、こっそりゴッソリ落としてきたw

PowerShellの正規表現がちゃんとコンパイルできる事や、パイプの属性が細かく指定できてかなり速い事に気付いた、灯台下暗し

ちょっとスレチぎみですまなかった
目処が付いたら効率的な正規表現とかまた相談に来ます
604デフォルトの名無しさん
2021/03/31(水) 23:36:10.16ID:1Z3UgTKy
正規表現を考えた人にノーベル賞を授与すべきと思うが
まだ生きているのか、何賞がいいのかなどよくわからない
605デフォルトの名無しさん
2021/04/01(木) 18:26:16.61ID:+gZ88zdN
>>604
>>534
606デフォルトの名無しさん
2021/04/01(木) 21:17:20.81ID:B5PjUTjB
ed書いてたよね?あれが最初なのか
607デフォルトの名無しさん
2021/04/01(木) 21:58:44.86ID:6NDtmvbq
正規表現を考えたのはケン・トンプソンではないみたいだけど
608デフォルトの名無しさん
2021/04/02(金) 03:22:50.55ID:XNApZvfR
Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違いなさそう
オリジナルQED(正規表現なし)→CTSS版QED(ケン開発、正規表現導入)→Multics版QED→ed→vi→...の流れで合ってる?


#チラ裏
正規表現発展の歴史って
...→ed→(grep,sed)→awk→Perl→その他諸々
だと思ってたんだけと、カーニハン先生が去年出した(今頃気づいた)UNIX回顧録の目次見てたら、実際は
...→grep(UNIX第6版:1975)→sed,awk(UNIX第7版:1976-1979)→...
とawkがsedとほぼ同時期のリリースだったらしい事に気づいて今更びっくりしてる
AWK本の邦訳の出版が1989年だし、多分それで勘違いしてたんだな
...あれ?wikiぺ見たらsedの初登場は1973-74??じゃあ時系列自体は最初の認識であってるのかな
609デフォルトの名無しさん
2021/04/02(金) 11:22:21.17ID:BO0mfYkz
UNIXツールに導入したのと正規表現を考案したのとは全然別のことだよね

>>604は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?
610デフォルトの名無しさん
2021/04/02(金) 11:40:50.71ID:ebi/L5xP
別に正規表現である意義もそんなにないと思うし、どうでもいいのでは?
611デフォルトの名無しさん
2021/04/02(金) 11:42:32.54ID:2zuzxBMS
>>610
「正規表現でない」とは?
612デフォルトの名無しさん
2021/04/02(金) 23:12:52.23ID:2IXJa8pf
>>609
少なくとも>>604ではunixツールなんて一言も言ってないけど?
なんかデムパ受信しちゃう系の人なのかな?
613デフォルトの名無しさん
2021/04/02(金) 23:18:36.72ID:nU9EtL7E
論理の場で非論理的な煽り合いはやめて欲しい
614デフォルトの名無しさん
2021/04/03(土) 06:56:50.00ID:mJPsJJNM
論理とか言うなら>>609はなぜ
> >>604は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?
なんて言い出したのかを説明すべきだわね
615デフォルトの名無しさん
2021/04/03(土) 13:40:38.89ID:vSOTAguS
609は、『604は「実装した人に賞を」とは言ってないじゃん(あくまで考案した人に賞を)』と言ってるにすぎん
616デフォルトの名無しさん
2021/04/03(土) 15:45:43.43ID:MnG7Frze
言ってもないことで絡まれる604が不憫だわ
基地害に絡まれるってこういうことなだな...
617デフォルトの名無しさん
2021/04/03(土) 16:32:17.92ID:cg+oQawH
>>616
不憫なのは君の頭の悪さだろうな
618デフォルトの名無しさん
2021/04/03(土) 16:39:50.38ID:uAN7ehAC
604 「正規表現を考えた人にノーベル賞を授与すべき」
605「正規表現考えたのはケン・トンプソン」
(ケン・トンプソンはコンピュータ科学分野のノーベル賞と言われるチューリング賞を受賞済み)
607 「正規表現を考えたのはケン・トンプソンではない」
608 「Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違い」
609 「UNIXツールに導入したのと正規表現を考案したのとは全然別」

この流れで下の文の意味が分からないなら小学校からやり直したほうがいい

「604は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?」
619デフォルトの名無しさん
2021/04/03(土) 17:01:43.10ID:jUXnOQwo
絡まれてるのは604ではなく609

ってとこまで読んだ
620デフォルトの名無しさん
2021/04/03(土) 17:17:48.40ID:vSOTAguS
正に
609が不憫だ
621デフォルトの名無しさん
2021/04/03(土) 17:20:20.99ID:3054knRU
>>617
もうそういうレスしか返せないなら黙ってたら?
自分も辛いだろw
622デフォルトの名無しさん
2021/04/03(土) 18:38:52.17ID:nkSIG8qO
>>618
>608 「Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違い」

608 「Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違いない」
623デフォルトの名無しさん
2021/04/03(土) 19:36:29.47ID:fbz7uNem
>>618
お前はごたくを言う前に>>604が言ってもないunixツールの話をなぜ>>609が言い出したのかちゃんと説明してみろよ
624デフォルトの名無しさん
2021/04/03(土) 20:58:53.19ID:vSOTAguS
「604は言ってないぞ」と609が指摘しただけ
その609になぜ食いつくんだよ
625デフォルトの名無しさん
2021/04/03(土) 21:13:29.22ID:HBbZRCot
まだ続くの?
626デフォルトの名無しさん
2021/04/03(土) 21:27:51.22ID:2eiD4/1n
そんなに感情的になる要素見当たらないんだけど何に反応しちゃったのか?
627デフォルトの名無しさん
2021/04/03(土) 22:05:45.23ID:fbz7uNem
>>624
> 「604は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?」

> 「604は言ってないぞ」と609が指摘しただけ
って解釈しろと?
そもそもunixツールとか言ってるのは>>608だけで言ってないと指摘するなら>>605-607も含めろよ
628デフォルトの名無しさん
2021/04/03(土) 22:13:04.80ID:vSOTAguS
えー誰でもそうとしか解釈できないだろ
629デフォルトの名無しさん
2021/04/03(土) 22:13:58.62ID:vSOTAguS
あまりに国語力が平均以下なんだな
630デフォルトの名無しさん
2021/04/03(土) 22:22:18.05ID:vSOTAguS
発言者の意図したものとか行間を読むとかできないで、その表面しか見ないのはアスペの特徴とか
631デフォルトの名無しさん
2021/04/03(土) 22:41:29.99ID:AcE4W092
誰でも ⇒ ID:vSOTAguS のみ
まあこの後に単発が来るのかもしれないけどw
632デフォルトの名無しさん
2021/04/03(土) 23:35:04.26ID:fsqx4uGu
>>626
ケントンプソンじゃないと指摘されたのがよほど悔しかったんだろ
>>608の言い訳がましい文章に悔しさがにじみ出てる
633デフォルトの名無しさん
2021/04/03(土) 23:40:31.67ID:jUXnOQwo
609の意図を理解できない読者がいる以上、「誰でも」という認識は誤解と思う
634デフォルトの名無しさん
2021/04/04(日) 02:08:54.97ID:842owbNJ
「〜だと言ってるのかな?」
これは
(実際には言ってやしないだろ?)と言う言葉が省略されてる
というか省略するのが普通で通常なら十分に読み取れるはず
635デフォルトの名無しさん
2021/04/04(日) 02:26:12.96ID:+j1dsc1H
もうええやん

609の文章を正しく読み取る能力の無い奴にそもそもこの板は向いてない
636デフォルトの名無しさん
2021/04/04(日) 02:42:10.15ID:zADfh3JJ
相手が日本語書いてるからと言って通じるとは限らない
言葉の通じないバカを言いくるめようとするからこうなる
相手に言葉が通じるか見極めるスキルと耐性・スルー力を身に着けろ
637デフォルトの名無しさん
2021/04/04(日) 02:44:32.45ID:842owbNJ
喧嘩するにも同程度の知能を有してないとダメってことだな
638デフォルトの名無しさん
2021/04/04(日) 06:18:23.10ID:Da11tGDT
単発わらわら湧いてて笑うわ
どっちが必死なんだかw
639デフォルトの名無しさん
2021/04/07(水) 17:35:35.06ID:V6KO8k9b
>>604 は単に偉大な先人に感謝してるだけだと思うんだが…
「正規表現を考えた人」って表現したのがまずかったのか?
640デフォルトの名無しさん
2021/04/07(水) 17:51:25.47ID:tjlM1gbN
もういいからやめろ
641デフォルトの名無しさん
2021/04/07(水) 23:04:12.41ID:Gfnmricb
>>639
ちょっとアレな人が絡んできただけw
642デフォルトの名無しさん
2021/04/08(木) 11:35:26.71ID:GjjHuqzu
まだおさまらないてどんだけ悔しかったんだよww
643デフォルトの名無しさん
2021/04/08(木) 11:39:17.18ID:ADplJe5S
バカが身の程しらずにもこのスレに迷い込んでくるから
644デフォルトの名無しさん
2021/04/11(日) 15:15:06.07ID:gwmbiGIQ
●Regular Expressionの使用環境
C#

●検索か置換か?
置換

●説明
アダルトビデオDBから取得したタイトルの最後が
女優名だった場合は消したい

●対象データ
女優    |タイトル
-----------------------------
三上悠亜  |下着モデルをさせられて… フェチズム9ランジェリーSpecial 三上悠亜
三上悠亜  |三上悠亜のPLATINUM SOAP
高橋しょう子|バキュームフェラ大好きお姉さんのディープスロート・たっぷり射精・追撃おしゃぶり 高橋しょう子
高橋しょう子|高橋しょう子 初BEST 12タイトル720分

●希望する結果
女優    |タイトル
-----------------------------
三上悠亜  |下着モデルをさせられて… フェチズム9ランジェリーSpecial
三上悠亜  |三上悠亜のPLATINUM SOAP
高橋しょう子|バキュームフェラ大好きお姉さんのディープスロート・たっぷり射精・追撃おしゃぶり
高橋しょう子|高橋しょう子 初BEST 12タイトル720分
645デフォルトの名無しさん
2021/04/11(日) 16:16:34.91ID:RGQ7rYBB
●Regular Expressionの使用環境
Windows PowerShell

●検索か置換か?
置換

●説明
「秒・コンマ」を「時・分・秒・コンマ」に置換

●対象データ
start="123.45"

●希望する結果
start="00:02:03.45"

よろしくお願いします
割り算の商とあまりはPowerShellの関数で
2 = [int](123/60)
3 = 123 % 60
で求められます
646デフォルトの名無しさん
2021/04/11(日) 16:38:01.79ID:j2wFoRQW
鬼雲
^(\S+)[  ]*|.+\K\s++\1$
^([^|]+)[  ]*|.+\K\s++\1$

.Net だとこんな感じ?未確認
(?<=^([^|]+?)\s*|.+)(?>\s+)\1$
空文字に置換
647デフォルトの名無しさん
2021/04/11(日) 17:10:39.69ID:Mhxpz1MA
>>645
[TimeSpan]::new(([double]$start)*10000000).tostring("hh\:mm\:ss\.ff")
648デフォルトの名無しさん
2021/04/11(日) 21:30:29.49ID:LXnW0jT4
>>644
Ruby なら、そういう関数がある

delete_suffix!(suffix) -> self | nil
self の末尾から、破壊的に suffix を削除します

[PARAM] suffix:
末尾から削除する、文字列を指定します

[RETURN]
削除した場合は self、変化しなかった場合は nil

"hello".delete_suffix!("llo") # => "he"
"hello".delete_suffix!("hel") # => nil
649645
2021/04/11(日) 21:41:09.21ID:RGQ7rYBB
できました!
650デフォルトの名無しさん
2021/04/11(日) 21:55:24.47ID:Mhxpz1MA
>>644
.replace(/^(([^\s| ]+)[\s ]*|.+?)[\s ]*\2[\s ]*$/gm, "$1")
651デフォルトの名無しさん
2021/04/11(日) 22:20:20.90ID:Mhxpz1MA
.replace(/^[  ]*(([^|]+)[  ]*|.+?)[  ]*\2[  ]*$/gm, "$1")
行先頭に空白がある場合が抜けてた(\sは半角スペースに変更)

姓名の間にスペースある場合も同じデータならマッチする
 三上 悠亜  |下着モデルをさせられて… フェチズム9ランジェリーSpecial 三上 悠亜
652デフォルトの名無しさん
2021/04/15(木) 17:26:54.76ID:n7ib2P7L
phpの実装前提です。
以下のサイトについて質問です。

https://www.javadrive.jp/regex-basic/sample/index13.html

[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*@

で以下のような文字列の表現らしいのですが、

aaaaaaaaaaa@
aaa.aaaaaaa@
aa.aa.aaaaa@
aa.aa.aa.aa@

この()の中にある.ピリオドって、メタ文字の意味ですか?
本来なら、

[a-zA-Z0-9_+-]+(/.[a-zA-Z0-9_+-]+)*@

が正しくないですか?
653デフォルトの名無しさん
2021/04/15(木) 17:30:30.96ID:n7ib2P7L
(ごめんなさい。上記修正です。。)
本来なら、

[a-zA-Z0-9_+-]+(\.[a-zA-Z0-9_+-]+)*@

が正しくないですか?
654デフォルトの名無しさん
2021/04/15(木) 18:09:09.76ID:2/Cpiffz
試せばすぐわかるやろ
https://regex101.com/r/weGCyh/1
655デフォルトの名無しさん
2021/04/15(木) 18:22:25.76ID:n7ib2P7L
ありがとうございました。
こんなツール初めてしりました。


aaaaaあaaaaa@
↑でも合致しますので、ページの説明としては不適切におもいました。
656デフォルトの名無しさん
2021/04/15(木) 18:41:07.32ID:5RsSqrLU
>>652
メールアドレスのアカウント部の判別って意味だろうから、
メタ文字ではなく本来\が必要な、文字としてのドットだね
657デフォルトの名無しさん
2021/04/15(木) 18:43:40.23ID:n7ib2P7L
>>656
ありがとうございました。確信がもてました!
658デフォルトの名無しさん
2021/04/16(金) 08:22:32.69ID:jY/tNYiK
そんな糞サイトを見るのはやめた方がいい
659デフォルトの名無しさん
2021/04/18(日) 11:01:19.33ID:GrVz/jbm
●Regular Expressionの使用環境
C#

●検索か置換か?
検索

●説明
表のデータを名前付きでキャプチャしたい(year,month,day;open;high;low;close;volume)
日付 <td class="XXX">(?<year>\d{4})/(?<month>\d?\d)/(?<day>\d?\d)</td>

株価 <td>(?<open>[0-9,.]+)</td>\r\n
<td>(?<high>[0-9,.]+)</td>\r\n
<td>(?<low>[0-9,.]+)</td>\r\n
<td>(?<close>[0-9,.]+)</td>\r\n
<td>.*</td>\r\n<td>(?<volume>[0-9,.]+)</td>
●対象データ
<tr>
<td class="XXX">2021/04/02</td> 日付
<td class="YYY">8,510.0</td >始値
<td class="YYY">8,595.0</td> 高値
<td class="YYY">8,432.0</td> 安値
<td class="YYY">8,462.0</td> 終値
<td class="YYY">8,462.0</td> 調整後終値
<td class="YYY">4,337,300</td>出来高
</tr>

●希望する結果
<td class="XXX">(?<year>\d{4})/(?<month>\d?\d)/(?<day>\d?\d)</td>
または<td>(?<open>[0-9,.]+)</td>単独だと一致するが日付と株価を全部つなげると駄目なので一致するようにしたい

御教示よろしくお願いします
660デフォルトの名無しさん
2021/04/18(日) 13:04:59.48ID:8BgTcnje
構造があるものは、正規表現では難しい。
スクレイピングは、Ruby で、nokogiri なら、

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<tr>
<td class="XXX">2021/04/02</td> 日付
<td class="YYY">8,510.0</td >始値
<td class="YYY">8,595.0</td> 高値
<td class="YYY">8,432.0</td> 安値
<td class="YYY">8,462.0</td> 終値
<td class="YYY">8,462.0</td> 調整後終値
<td class="YYY">4,337,300</td>出来高
</tr>
EOT

element = doc.at_css( 'tr > td.XXX' )
puts element.content
#=> 2021/04/02

elements = doc.css( 'tr > td.YYY' )
puts elements.map( &:content ).join( " : " )

#=> 8,510.0 : 8,595.0 : 8,432.0 : 8,462.0 : 8,462.0 : 4,337,300
661デフォルトの名無しさん
2021/04/18(日) 16:50:35.98ID:GrVz/jbm
>660
回答有難うございます テストツールではじかれるのそういうことなんですか
perlでならCSSセレクタ使って取れるんですが遅くてRubyでも同じでしょうね
662デフォルトの名無しさん
2021/04/18(日) 19:18:36.24ID:3ca8v7Vr
>>659
対象データの各行の後ろに実際には日本語はないってことでいいんだよね?
663デフォルトの名無しさん
2021/04/18(日) 19:29:32.94ID:3ca8v7Vr
日付の正規表現省略</td>
<td class="YYY">(?<open>[0-9,.]+)</td>\s+<td class="YYY">(?<high>[0-9,.]+)</td>\s+以降の正規表現省略

C#(実質.NET?)の正規表現は詳しくないし試してないけど、
一般的なPerl5系列の正規表現なら\sのマッチ対象(ホワイトスペース)に
\rや\nも内包されてるので、
\s+で改行と<tdの前のスペースインデントに対応できると思う
664663
2021/04/18(日) 19:31:55.31ID:3ca8v7Vr
>>663訂正
日付の正規表現省略</td>\s+<td class="YYY">(?<open>[0-9,.]+)</td>\s+<td class="YYY">(?<high>[0-9,.]+)</td>\s+以降の正規表現省略
665デフォルトの名無しさん
2021/04/18(日) 19:33:30.21ID:KOpB5ISv
空白とか考慮してねんじゃねーの
提示されてるデータ見ても</td >始値だけ違ってるし
改行の扱いで転けてる可能性も
666デフォルトの名無しさん
2021/04/18(日) 20:10:08.07ID:GrVz/jbm
対象データの後ろの日本語は注記で実際にはありません
667デフォルトの名無しさん
2021/04/18(日) 20:17:06.51ID:GrVz/jbm
>663,664
有難うございました \s+ でつなげて上手くゆきました
668デフォルトの名無しさん
2021/04/18(日) 20:42:16.44ID:P53jdUzk
Rubyくん=糖質w
669デフォルトの名無しさん
2021/04/23(金) 13:32:17.18ID:wRSxYRWl
Pythonで以下の条件に当てはまる正規表現はどうしたら実現できるでしょうか。

半角英数字(大文字小文字)255文字までとハイフンのみOK
--の連続は不可。行末がハイフンで終わるのも不可

ここまではできてるんですが、どなたか知恵を頂きたいです。
^[a-zA-Z0-9-]*(?<!-)$
670デフォルトの名無しさん
2021/04/23(金) 13:46:23.58ID:lAJIVY64
pythonなら正規表現だけで処理しなくても
抜き出した後に--が含まれるのを除くとかどうにでもなるだろ。
671デフォルトの名無しさん
2021/04/23(金) 13:47:26.10ID:S2TaYi95
^(?:(?!--)[a-zA-Z0-9-])*(?<!-)$
^(?!.*--)[a-zA-Z0-9-]*(?<!-)$
まあこの2つの書き方を覚えればいいんじゃない?
ただ空行もマッチしちゃうよ
672669
2021/04/23(金) 14:25:42.69ID:wRSxYRWl
>>670
確かにそうですが、ちょっと格好つけたかったんです。

>>671
おぉぉぉぉありがとうございます。
とっても助かりました!!
おかげでこの先、頑張れそうです。。。(定時まで)
673デフォルトの名無しさん
2021/04/23(金) 16:59:46.76ID:vxdqi9h5
自分で理解できない正規表現とか組み込んで、この先メンテナンスできるんだろうか。
一時的なことならいいが
674デフォルトの名無しさん
2021/04/23(金) 17:20:20.44ID:S2TaYi95
この程度見れば何してるか理解できるよね
2つは記述は似てるけど考え方が少し違う
675デフォルトの名無しさん
2021/04/23(金) 18:40:17.97ID:WE1AtRNI
^(?>-?+[a-z0-9]){0,255}$
676デフォルトの名無しさん
2021/04/23(金) 20:39:56.15ID:EZOqnzXJ
条件が曖昧なので2通り(定時回ってそうだが)

# ハイフン含めて255文字
^([0-9A-Za-z]|-(?!(-|$))){1,255}$

# ハイフンは255文字に含めない
^(-?[0-9A-Za-z]){1,255}$

>>675
試したら"?>"など知らんって言われた
677デフォルトの名無しさん
2021/04/23(金) 21:20:25.48ID:S2TaYi95
?+も無いみたい
678デフォルトの名無しさん
2021/04/24(土) 01:22:36.39ID:fpQdUE+5
先読み後読みは方言が多いものね
679デフォルトの名無しさん
2021/04/25(日) 23:25:43.60ID:AhiBFSkY
単純に ^(-?[a-zA-Z0-9])[0,255]$ とかで良かったんじゃないかな
680デフォルトの名無しさん
2021/04/25(日) 23:27:08.69ID:AhiBFSkY
>>676と重複した。スマン
681669
2021/04/26(月) 16:56:04.35ID:SkU1AL8m
みなさんありがとうございます。
こんな正規表現良く書いたねーって先輩のレビュアーに言われて、
詳しく説明してって言われたんですが説明できなかったので、
頂いた数々の秘技を頑張って理解していこうと思います。(定時まで)
682デフォルトの名無しさん
2021/05/07(金) 02:26:32.28ID:FTeVmJ7m
以前使っていた正規表現の質問専用スレが見当たらないからここで聞きたい
javascriptで以下のマッチングを行うとマッチするけど、キャプチャの分が取得されない。
どうしたらいいんだろう

let abc = "/abcd/357/1/";
let regex = /^\/abcd\/(\d+)\/\d+\/$/gi;

let result = abc.match(regex);

console.log(result.length);

この出力が1になる。(\d+)も含めた2になってほしい
683デフォルトの名無しさん
2021/05/07(金) 02:44:53.78ID:O1URPzeE
matchAllかwhile regex.exec(string) !== null
684デフォルトの名無しさん
2021/05/07(金) 03:03:26.43ID:FTeVmJ7m
解決したわ
gあるとキャプチャ取得されないって書いてあったわ

>>683
すまん
685デフォルトの名無しさん
2021/05/18(火) 11:17:29.67ID:XAxheHxj
元データ
1621299591.842348,378,666,111,84

これをサブパターンで以下のように抽出したいです。
1621299591.842348
378
666
111
84

最終的な目的としては、ZabbixでCSV形式ログから値を取りたいです。
いろんなサイトを参考にしてるんですが、簡単そうに見えてこれが実現できる例が見つけられず。
686デフォルトの名無しさん
2021/05/18(火) 11:25:45.08ID:ZvUkaH8s
([^,]*)
じゃあかん?
687デフォルトの名無しさん
2021/05/18(火) 11:27:05.69ID:YmpO7+1q
>>685
それって正規表現で処理する部分なのか?
本当にそのままのデータなら/,/¥n/だろ。
688デフォルトの名無しさん
2021/05/18(火) 12:29:17.50ID:AY6+4ZvQ
>>685
Zabbixは1つの値で1つのitemなので
(.*),(.*),(.*),(.*),(.*)みたいな正規表現を使って$1~$5を出力するそれぞれ別の依存itemを登録するんじゃない?
689685
2021/05/18(火) 13:08:11.81ID:XAxheHxj
ありがとうございます。
logrt["/var/log/^.*\.txt$","^([0-9]+).([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+)$",,,,\3,,]
こんな感じでできました。
ご指摘通り\3のところを\4や\5にしたアイテムを別途作成。
690デフォルトの名無しさん
2021/05/18(火) 14:48:27.97ID:AY6+4ZvQ
>>689
ログファイルを指定するアイテムは1つにして
それに依存する依存アイテムを5つ作ったほうが処理効率がいいと思う
https://www.zabbix.com/documentation/current/manual/config/items/itemtypes/dependent_items
691685
2021/05/18(火) 17:53:24.64ID:XAxheHxj
>>690
依存アイテムの保存前処理で上の正規表現入れてできました!
692デフォルトの名無しさん
2021/05/20(木) 17:15:23.25ID:Bfk5GZud
こんにちは
質問です

●Regular Expressionの使用環境
普通のテキストファイル
いま Sublime text を使ってますが無料のエディタなら何でも使います

●検索か置換か?
置換

●説明
各パラグラフの1行目を2行目以下の全ての行に加えたい
1行目はパラグラフごとに異なり、2行目以下はすべて異なる

●対象データ
/system/app
AntHalService
AutoRegistration
BasicDreams

/system/priv-app
AutoKillService
BackupRestoreConfirmation

●希望する結果
AntHalService^=/system/app/AntHalService
AutoRegistration^=/system/app/AutoRegistration
BasicDreams^=/system/app/BasicDreams
AutoKillService^=/system/priv-app/AutoKillService
BackupRestoreConfirmation^=/system/priv-app/BackupRestoreConfirmation

よろしくお願いします
693デフォルトの名無しさん
2021/05/20(木) 17:34:20.04ID:HTt3W2mn
正規表現だけで可能なのか?
適当なスクリプト使った方が手っ取り早いような。
694デフォルトの名無しさん
2021/05/20(木) 17:50:54.95ID:yRtliBGo
まずパラグラフをどう判断するかの条件も書かれてないしね
書かれてる2項目だけでいいならできるけど、
望むことはパラグラフの1行目の自動取得だろうし
695デフォルトの名無しさん
2021/05/20(木) 17:55:02.71ID:HTt3W2mn
>>694
ちなみに、上記限定だったらどう書くの?
自分はちょっと思い浮かばない。
696デフォルトの名無しさん
2021/05/20(木) 18:33:52.42ID:+Y6kAz1b
各段落1行目の前が空行でそれ以外に空行は無い とか
1行目行頭だけが"/"で他の行頭には"/"は無い とか
1行目だけが保ち得る条件が必要なのと

各段落の行数が同じで無いとキャプチャは出来ても置換で参照使えなくね?

・1行目の一意な条件
・段落の行数が一定
このふたつの条件満たさないと正規表現だけでは無理じゃね?
697デフォルトの名無しさん
2021/05/20(木) 18:58:29.37ID:+Y6kAz1b
段落の最大行数に合わせて置換式書いておいて置換後
2度目に 行頭が "^=" の行を削除 なら行数不定でも出来るだろうけど
美しくないしスクリプトの方が適してると思う
698デフォルトの名無しさん
2021/05/20(木) 19:09:27.78ID:IKwP0pwO
可変長戻り読みしか思いつかなかった

>>692
https://regex101.com/r/DcrdT0/1
エディタ代わりにこのページを使うならUpdate Regexは絶対にするなよ
699692
2021/05/20(木) 19:35:18.66ID:Bfk5GZud
みなさんありがとうございます

>>698
https://regex101.com/r/DcrdT0/1 のようにしても Sublime ではマッチしないんですが
おすすめのエディタはありますでしょうか?

また、
> エディタ代わりにこのページを使うならUpdate Regexは絶対にするなよ
なぜでしょうか?
700デフォルトの名無しさん
2021/05/20(木) 20:05:29.92ID:w4VGBl/7
>>699
https://regex101.com/r/fg8u8n/1を見ればわかるとおり「対象とする文章も保存される」ため
一般的に漏洩したら問題でしょ?
701デフォルトの名無しさん
2021/06/24(木) 21:40:32.01ID:9+/dPFw/
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
検索(正規表現で色を付けるため)

●説明
各行の最後に現れる:の直後から行末までを一致させたい

●対象データ
intval:i:1
strval:s:0,1,563,11,1913,1033

●希望する結果
1
0,1,563,11,1913,1033

よろしくお願いします
702デフォルトの名無しさん
2021/06/24(木) 22:02:05.04ID:oCTUQBV1
:と改行以外が行末まで続くんだろ
:([^:\n]*)$
お願いしないといけないようなところあるか?
どーせ:はハイライトしたくないとかだろうけど
肯定戻り読み(?<=regex)使うだけだよな
(?<=:)([^:\n]*)$
これお願いしないといけないようなところあるのか?
703701
2021/06/24(木) 22:04:31.86ID:9+/dPFw/
>>702
超ありがとうございました!

(肯|否)定(先|後)読みがうまく使えなくて・・・
704デフォルトの名無しさん
2021/06/26(土) 22:47:52.84ID:jTUBzdfm
●Regular Expressionの使用環境
Powershell

●検索か置換か?
置換

●説明
フォルダにつけている日付のフォーマットを変えたい
作業範囲はカレントフォルダだけで良いです #下階層には行かない

●対象データ
[2020.12.20] AA案件 [作業者A]
[2021.04.02] DD案件 [作業者BB]
[2021.06.15] GGGGG案件 [作業者D]
[2021.07.07] BBB案件 [作業者A]

●希望する結果
[201220] AA案件 [作業者A]
[210402] DD案件 [作業者BB]
[210615] GGGGG案件 [作業者D]
[210707] BBB案件 [作業者A]

よろしくお願いします。
705デフォルトの名無しさん
2021/06/27(日) 00:07:19.19ID:9wAo5BpJ
ほぼそのままだろ
www.atmarkit.co.jp/ait/articles/1411/07/news133.html
706デフォルトの名無しさん
2021/06/28(月) 18:13:23.38ID:V/YMeLZd
pythonです

.foo.xxx_var
.foo.foo.yyy_var
この二種類の形式の文字列があるとき
xxxとyyyだけほしいんですがどう書いたらいいですか?
707デフォルトの名無しさん
2021/06/28(月) 18:14:54.33ID:V/YMeLZd
xxxとyyyの部分は可変長の英数記号です
708デフォルトの名無しさん
2021/06/28(月) 18:34:58.46ID:LBPB01By
def getxy(s):
return s[s.rfind('.')+1:s.rfind('_')]


a=getxy('.foo.xxx_var')
709デフォルトの名無しさん
2021/06/28(月) 18:39:07.90ID:JVYonSFO
('.')
('_')
顔文字みたいで可愛くてワロタ
710デフォルトの名無しさん
2021/06/28(月) 19:17:22.90ID:V/YMeLZd
>>708
rfind知りませんでした。ありがとう


不格好だけど
findall("(.+\.)?(.+)_var")[0][1]
でも取れました。正規表現てどんな順番で書いていけばいいのかわからん…
711デフォルトの名無しさん
2021/06/28(月) 20:24:42.57ID:dny5MV4o
s='.foo.xxx_var'
re.search('([^.]*)_',s).group(1)
712デフォルトの名無しさん
2021/06/28(月) 20:50:58.81ID:quG4wdoj
Ruby で作ってみた

# 最後のドットと、_ の間の文字列を抜き出す。該当なしなら、nil を返す

def slice_string( input_str )
pos_1 = input_str.rindex( "." ) # 文字列の末尾から探す
return nil unless pos_1

pos_2 = input_str.index( "_", pos_1 + 1 ) # ドットの次の文字から探す
return nil unless pos_2

return input_str.slice( pos_1 + 1 ... pos_2 )
end

input_ary = %w(.foo.xxx_var .foo.foo.yyy_var .zz zz)

p input_ary.map{ |str| slice_string( str ) }
#=> [ "xxx", "yyy", nil, nil ]
713デフォルトの名無しさん
2021/06/28(月) 21:04:09.77ID:3eYqyq98
>>712
このキチガイどこにでも湧くのなw
714デフォルトの名無しさん
2021/06/28(月) 21:44:37.04ID:24AqjAIP
各言語でそれぞれ書き込む事態にでもならなきゃ自分の行いがいかにウザイかを実感できない人なんだろう
まったくの場違いだと言うのにそれに気づかないもんな
715デフォルトの名無しさん
2021/06/28(月) 21:48:35.68ID:LpQ5PmfN
>>713-714
なんでお前ら相手するんだ?
716デフォルトの名無しさん
2021/06/29(火) 00:51:17.13ID:f7Gcy3Ty
jien
717デフォルトの名無しさん
2021/06/29(火) 13:25:19.76ID:hNYNhvVW
先頭以外の A をすべて S に置換
って一般解としてどう書くの?

AAAEAA を ASSESS にしたいとか
718デフォルトの名無しさん
2021/06/29(火) 13:47:51.52ID:g0ftD4JU
(?!^)A
719デフォルトの名無しさん
2021/06/29(火) 13:49:05.67ID:FsexkEm/
(?!^)A
720デフォルトの名無しさん
2021/06/29(火) 15:16:43.44ID:W3FYE8ZM
>>718-719
センキューベリーmatch
721デフォルトの名無しさん
2021/07/02(金) 02:33:14.69ID:aZbrSReX
>>720
評価する
722デフォルトの名無しさん
2021/07/02(金) 08:13:06.57ID:Rii8+UZr
下URLにあるPerlのRegexp::Optimizerのように、正規表現を最適化するC/C++用ライブラリはご存じないですか?
https://metacpan.org/pod/Regexp::Optimizer
723デフォルトの名無しさん
2021/07/02(金) 13:04:44.47ID:TPqIrTa2
●Regular Expressionの使用環境
python3.8.5

●検索か置換か?
置換

●説明
<数字>以外の<>を外したい

●対象データ
[<< ><test<<012>>name1><> >]
●希望する結果
[ test<012>name1 ]
724デフォルトの名無しさん
2021/07/02(金) 14:24:45.40ID:jArCbPhS
可変長の否定戻り読みが使えるなら
<(?!\d+>)|(?<!<\d+)>

数字の桁が3桁固定なら
<(?!\d+>)|(?<!<\d\d\d)>
725デフォルトの名無しさん
2021/07/02(金) 14:35:17.70ID:TPqIrTa2
>>724
すいません、説明が足りなくて
可変長で、可変長扱えないです(´;ω;`)
726デフォルトの名無しさん
2021/07/02(金) 14:47:29.27ID:TPqIrTa2
あれか
<(\d+)>のサイズ取得して動的にするのか…
727デフォルトの名無しさん
2021/07/02(金) 14:52:33.23ID:dFaH8qnm
>>723
re.sub(r'(<[0-9]+>)|[<>]', r'\1', '[<< ><test<<012>>name1><> >]')

>>507のパターン
これ使い勝手良いね
728デフォルトの名無しさん
2021/07/02(金) 14:54:06.60ID:DfuUcF9q
>>723
pythonなら正規表現だけにこだわらなきゃ<¥d+>さえ拾えばどうとでもなるだろ。
729デフォルトの名無しさん
2021/07/02(金) 15:02:33.69ID:u75TM6NR
このスレって有能な人いてステキ///
730デフォルトの名無しさん
2021/07/02(金) 15:14:25.77ID:t4sxB6eQ
数値がネストした構造の一番内側にあるとは限らないんじゃないの?
731デフォルトの名無しさん
2021/07/02(金) 16:18:03.06ID:TPqIrTa2
>>727
すごい
これどうなってるんですか?
なんでorの前のヤツだけ置換されるの?
732デフォルトの名無しさん
2021/07/02(金) 16:56:02.25ID:dFaH8qnm
>>731
| の左右どちらに一致した場合でも \1 に置換している
ただし片方にしか \1 に対応する括弧がない——というのがミソ

左側 (<[0-9]+>) に一致したときの \1 は 一致した全体なので結果として何も変わらない
右側 [<>] に一致したときの \1 は空なので削除される
733デフォルトの名無しさん
2021/07/02(金) 17:12:17.66ID:3MNaXJzy
<><abc><value<123<x>>/value><>
こういうパターンはあるのか?
734デフォルトの名無しさん
2021/07/02(金) 17:17:38.07ID:+v1CDJ0v
> ●説明
> <数字>以外の<>を外したい
735デフォルトの名無しさん
2021/07/02(金) 17:22:56.52ID:TPqIrTa2
>>732
あーなるほど
すごいなあ
736デフォルトの名無しさん
2021/07/02(金) 17:26:47.31ID:3MNaXJzy
>>734
だからもしこういうのがあるのなら、上の回答じゃダメじゃん
<abc>は消えないぞ
737デフォルトの名無しさん
2021/07/02(金) 17:29:30.28ID:+v1CDJ0v
こいつ無能そう
738デフォルトの名無しさん
2021/07/02(金) 17:49:16.07ID:TPqIrTa2
size = 4
s1 = entry.get()
s2 = re.sub(r'(<\d+>)|[<>]|[\\/:*?"|]+', r'\1', s1)
ss = [re.sub(r'<(\d+)>', lambda m: f'{{:0{len(m[1])}}}'.format(int(m[1])+i), s2) for i in range(size)]

簡単な範囲リネームソフト作ってて、windowsで使えない文字外して<数字>はカウントアップ がしたかったのでこれで大丈夫のようです.たぶん
入力(スタート値) dir<001>のとき リネーム範囲が2ならdir001,dir002を生成するみたいな
739デフォルトの名無しさん
2021/07/02(金) 18:45:34.59ID:Y9y/b0vz
でもさー
結局のところ自分の理解できる範囲で対処できないとブラックボックスでしかないから保守できないよな
740デフォルトの名無しさん
2021/07/02(金) 19:31:10.32ID:aZbrSReX
掲示板で説明できることには限界があるからな
741デフォルトの名無しさん
2021/07/02(金) 20:03:30.56ID:6v6/dX3F
>>736
なんの環境だと消えないんだろう
742デフォルトの名無しさん
2021/07/02(金) 21:23:02.60ID:8o23sM1E
ネストがある構造物は、パーサーを使わないと保守できない。
Ruby のNokogiri みたいな、XML/HTML パーサー

正規表現でバグると、他人が手を出せないので、
結局、パーサーで作り直しになる

アンチパターンの常識

モジュール・デザインパターンの知識が無いから、
何にでも正規表現を使う、香具師と言われている
743デフォルトの名無しさん
2021/07/02(金) 21:48:40.11ID:QH8xfbBh
ネストがある構造はRDBで管理するという方法もあるな
744デフォルトの名無しさん
2021/07/02(金) 23:39:59.09ID:aZbrSReX
>>727 のパターンは構造を見てない
ノンマッチな><だってホイホイ喰っちまう奴なんだぜ
745デフォルトの名無しさん
2021/07/03(土) 03:31:09.01ID:mR1/t/06
manの解析させるルーチンで無制限にネスト潜るの一度だけ書いたこと思い出したわ
746デフォルトの名無しさん
2021/07/05(月) 13:22:47.46ID:a0633hZA
1行に「半角スペースと全角スペースが3文字以上ある時」を検出するにはどうすればいいのでしょう?
747デフォルトの名無しさん
2021/07/05(月) 13:38:25.68ID:yW7vm9zn
(.*\040|.*\201\100){3}
とかか
748デフォルトの名無しさん
2021/07/05(月) 13:43:46.12ID:a0633hZA
>>747
ありがとう試してみます
749デフォルトの名無しさん
2021/07/05(月) 13:46:58.03ID:yW7vm9zn
>>747
SJISだったらこうしないとだめか
(([^\201-\237\340-\357]|[\201-\237\340-\357].)*(\040|\201\100)){3}
750デフォルトの名無しさん
2021/07/05(月) 18:52:47.25ID:jQnBoLSl
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
検索(正規表現で色を付けるため)

●説明
各行の「CR」または「LF」の改行コード部分に一致(CR+LFは一致させない)

●対象データ
あ\r
い\n
う\r\n

●希望する結果
\r
\n

よろしくお願いします
751750
2021/07/05(月) 19:33:48.25ID:jQnBoLSl
なんとか自分で調べて見たんですが、下の正規表現で合ってますか?
[\r\n](?!\n)$
752デフォルトの名無しさん
2021/07/05(月) 21:45:00.65ID:oDqG8EZQ
(\r(?!\n))|((?<!\r)\n)
でどうだろう
753デフォルトの名無しさん
2021/07/05(月) 22:18:11.17ID:lQZs6uo5
\r$|[^\r]\n$
じゃダメなのかな?
754デフォルトの名無しさん
2021/07/09(金) 02:51:04.10ID:Cp8DUWjQ
文中もしくは単独で特定の文字列がある場合を除く
ってどうやるの?
755デフォルトの名無しさん
2021/07/09(金) 07:34:09.88ID:XAnKbPPo
^(?~特定の文字列)$
^(?!.*特定の文字列).*$
756デフォルトの名無しさん
2021/07/09(金) 09:09:31.42ID:hfuqSqCj
わざわざ貪欲にする必要性がわからん
757デフォルトの名無しさん
2021/07/11(日) 13:43:32.51ID:MYTG6y7m
>>754
鬼雲に非包含オペレータを実装した話
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd
758デフォルトの名無しさん
2021/07/11(日) 13:46:58.01ID:MYTG6y7m
>>754
非包含パラメータの提唱者のスライドと論文
https://staff.aist.go.jp/tanaka-akira/pub/prosym49-akr-presen.pdf
https://staff.aist.go.jp/tanaka-akira/pub/prosym49-akr-paper.pdf
759デフォルトの名無しさん
2021/07/11(日) 19:12:06.67ID:nwBpGTGG
近似解のなにが近似なのかわからん
760デフォルトの名無しさん
2021/07/11(日) 21:26:31.70ID:I5zdxibD
>>758
×非包含パラメータ
○非包含オペレータ
761デフォルトの名無しさん
2021/07/12(月) 09:02:05.45ID:twuyj4UD
>>759
他の正規表現とつなげると問題が起こる。
例えばコメントの直後にbbbが来るのを \/\*.*?\*\/bbb として
/* */aaa/* */bbb
にマッチさせると /* */aaa の部分も含んで全体がマッチしてしまう。
762デフォルトの名無しさん
2021/07/12(月) 15:36:01.58ID:mfnmNh+4
なるほど
ありがとうございます
763デフォルトの名無しさん
2021/07/12(月) 16:40:03.21ID:mfnmNh+4
でも少なくとも解2でいいんじゃないか
表現力もたいして変わらない
数文字減るだけののシンタックスシュガーに見える
764デフォルトの名無しさん
2021/07/29(木) 13:50:04.06ID:GMofCqjV
●Regular Expressionの使用環境
cygwin grep

●検索か置換か?
検索

●説明
テキストファイルに含まれる改行コードの検索

●対象データ
\r\n(0x0d0a)と\r(0x0d)が混在しているテキストファイル

●希望する結果
それらを検出して \r\nに統一したい。

grep -n -U -P '\x0d'
で検索をかけるとヒットするが
grep -n -U -P '\x0a'
ではなぜか1行もヒットしない
バイナリで確認すると0x0d0aはちゃんと存在しています・・。

とりあえずまずは0x0aを検索にヒットさせたいです。
その後
grep -n -U -P '\x0d[^\x0a]'
のような感じで0x0dの後ろが0x0aでない行を検索して置換できれば良いかなと考えています。
よろしくおねがいします
765デフォルトの名無しさん
2021/07/29(木) 14:18:21.31ID:aFdGt9X4
無駄無駄無駄〜
766デフォルトの名無しさん
2021/07/29(木) 14:21:22.66ID:J3IrN4Ey
>>764
-aも足してgrep -nUaPでも試してみては?
767デフォルトの名無しさん
2021/07/29(木) 18:49:46.76ID:QYfnOwKH
0xが邪魔だったりして
768デフォルトの名無しさん
2021/07/29(木) 21:48:27.13ID:j2JISquU
>>764
そのテキストファイルはASCIIなの?
UTF-16だったりEBCDICだったりしない?
769デフォルトの名無しさん
2021/07/29(木) 21:52:11.90ID:j2JISquU
>>764
なぜかマッチしないのはcygwin付属のgrepコマンドのバグかもしれないし、
cygwin本体のバージョンを書くか
ダウンロードサイトも書くべきかと
770デフォルトの名無しさん
2021/07/29(木) 21:56:20.74ID:j2JISquU
>>764
あとは-Uオプションを外してどうなるか試してみるとか
771デフォルトの名無しさん
2021/07/30(金) 00:49:58.41ID:N3W+nBLQ
単純に\nがgrepに食われてるだけだと思う

オプションに-zを入れれば\0区切りになるから\nは残せそうだけど
ファイル全体が1行になるだろうからやりたい事は多分できない

\rを\r\nに統一したいなら各行の末尾以外の\rを\r\nに置換すれば良さそう
grepで検索だけして手作業で直すつもりなのかな
772デフォルトの名無しさん
2021/07/31(土) 20:32:32.88ID:jvyZNadn
>>764
解決したの?
773デフォルトの名無しさん
2021/07/31(土) 20:46:25.03ID:Op1DTI/B
テキストファイルなんだよね?
だったらテキストエディタで開いて改行コードをCRLFに指定して保存するだけで
改行コードは揃うと思うけど
俺の使ってるエディタでCRLF,CR,LFの3つを混在させたファイルでやってみたけど
全部CRLFに変わってくれたよ
774デフォルトの名無しさん
2021/08/01(日) 06:07:28.90ID:jVmJEbam
grepは行単位で処理するが、行は\nで終わることになってる
>>771のいうようにgrepが\nを食ってしまうので\nは検索できない
行末にマッチさせたいなら\nではなく$を使う

が、改行コード変換したいだけならCygwinに最初から入ってるunix2dos/dos2unixでも使えばいい
775デフォルトの名無しさん
2021/08/01(日) 21:54:31.32ID:9jBEmz65
>>774
単独のCR(\r)は古いMACに見られる改行コードだから
UNIXの改行LF(\n)でもDOSの改行CRLF(\r\n)でもないよ
776デフォルトの名無しさん
2021/08/01(日) 23:37:51.19ID:jVmJEbam
>>775
dos2unix/unix2dosは旧macの改行も変換できるので問題ない
777デフォルトの名無しさん
2021/08/18(水) 07:15:11.84ID:zZ9UTeBf
ニュー速VIP板

(?<=ニュー速)VIP(?=板)

↑これは分かるけど

(?=ニュー速)VIP(?<=板)

↑これが分からん
778デフォルトの名無しさん
2021/08/18(水) 08:14:34.80ID:zKbbX4Ws
(?=ニュー速)VIP
VIP(?<=板)
これらに一致するものは有り得ない

(?=.*ニュー速)VIP
こうなら有り得る

先読み
(?=abc)
はabcの左側aの手前の「位置」に一致するもの
xabcとあればxとaの間の位置に一致

戻り読み
(?<=abc)
は先読みと反対でabcの後ろcの後の「位置」に一致するもの
abcxとあればcとxの間の位置に一致

つまり
(?=ニュー速) は「ニュー速」の「ニ」の手前の位置に一致するものなので
(?=ニュー速)ニュー速 で無ければ絶対に一致しない条件式となる
779デフォルトの名無しさん
2021/08/18(水) 08:27:16.61ID:6oAKTuRB
焦りすぎ
780デフォルトの名無しさん
2021/08/18(水) 09:49:36.54ID:zZ9UTeBf
>>778
ああ分かった /VIP(?<=IP)/ というのはVIPの右に(?)がある事からしてVIPのPの右の位置にマシンがカーソルを合わせて次に<という左矢印がある事からしてカーソルの左側にPがあるかどうかを探って次にその一つ左にカーソルを動かしてそのカーソルの左側にIがあるかを探るって訳か

文字にするとややこしいけどイメージはしやすいな
781デフォルトの名無しさん
2021/08/18(水) 10:53:19.72ID:tjZSC3cn
> ニュー速VIP板ニュー速板

二つ目の「ニュー速」だけを対象にしたい
(?<=VIP板)ニュー速
前方に「VIP板」のある「ニュー速」

一つ目の「ニュー速」だけを対象にしたい
ニュー速(?=VIP板)
後方に「VIP板」のある「ニュー速」
782デフォルトの名無しさん
2021/08/18(水) 11:43:36.15ID:h7WQfPHf
(否|肯)定(先|後)読みは、^(行頭)や$(行末)と同様に"位置"にマッチするメタ文字(「アンカー」)として機能する
783デフォルトの名無しさん
2021/08/20(金) 00:20:17.08ID:qpe5vMDv
ここにある正規表現サンプルのURLを取得する正規表現ですけど
間違ってないですか?
https://www.megasoft.co.jp/mifes/seiki/s310.html

urlに'があるurlだと'の後が取得できなくなる。
784デフォルトの名無しさん
2021/08/20(金) 01:44:25.03ID:kY+JN5EE
>>783
間違ってるけどメタ文字解説読めばそんなこと分かるだろ
785デフォルトの名無しさん
2021/08/20(金) 03:11:03.15ID:WG/a2fPY
厳密なのはいつもの
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
786デフォルトの名無しさん
2021/08/20(金) 10:49:36.74ID:nGw5woYj
これなんで5matchsなの?
Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
787デフォルトの名無しさん
2021/08/20(金) 10:57:32.68ID:OdebcBr3
ピンクの線が5本表示されとるやろ
788デフォルトの名無しさん
2021/08/20(金) 14:58:31.43ID:bheJjdjJ
(abc){0}(def){0}
789デフォルトの名無しさん
2021/08/20(金) 23:05:42.97ID:P1i1BIPh
>>788
>>787
ああなるほど一文字ずつマッチする上に空文字もマッチするのか

でもtest stringをabcdefとして3マッチになるかと思ったら2マッチなのな
790デフォルトの名無しさん
2021/08/20(金) 23:47:12.81ID:WG/a2fPY
基本的にgreedyだから
791デフォルトの名無しさん
2021/08/21(土) 09:01:29.88ID:juYH2QqI
abc(def)?|def
空文字に一致しないよう書くべき
792デフォルトの名無しさん
2021/08/25(水) 01:56:14.92ID:DUWK9/dO
windowsなんですが、正規表現を使ってファイルのリネームしたいです

hofajkfjda.jpg
fasfdajl.jpg
というファイルがあった場合

new1-hofajkfjda.jpg
new2-fasfdajl.jpg
としたいです

連番を含むのですが、正規表現で可能でしょうか?
また、何のツールを使うといいでしょうか?できればlinuxとwindowsで共通で使えるものがいいんですが。
793デフォルトの名無しさん
2021/08/25(水) 05:11:18.76ID:DJHRbWtG
それ正規表現の話じゃないよねスレチ
ファイル名降順(昇順)で頭に(new連番-)付加ならFlexible Renamerとか色んなリネームソフトで出来る
任意の順ならバッチやPowerShell
後は該当スレでどうぞ
794デフォルトの名無しさん
2021/08/25(水) 10:49:27.59ID:DUWK9/dO
正規表現では連番は無理なのですか?
795デフォルトの名無しさん
2021/08/25(水) 11:00:10.58ID:1f33yFBx
不可能じゃないけど、近所のコンビニへ行くのに絶対にプライベートジェットで行きたいですとか言われてる感じ
もっと他に簡単で向いている方法があるでしょって話
796デフォルトの名無しさん
2021/08/25(水) 11:02:04.86ID:pNx7VLY8
文字列の集合を表す記法が正規表現
連番という集合を示せるならできるかもね
自分は知らないけど
797デフォルトの名無しさん
2021/08/25(水) 11:08:38.01ID:0azwHm+I
>>792
秀丸ファイラー

ファイル選択→「F2」→「Alt+2」、で連番リネームモードになる
798デフォルトの名無しさん
2021/08/25(水) 11:30:25.04ID:DUWK9/dO
>>795
了解です

>>797
flexible renamerにしました。
これより新しくて良いソフトってあるんでしょうかね。
799デフォルトの名無しさん
2021/08/25(水) 11:40:19.51ID:b/tFJsW5
質問続けるならせめて礼くらい言ってからにしろ
そもそももうスレチなんだから他へ行け池沼
800デフォルトの名無しさん
2021/08/25(水) 12:25:51.34ID:pNx7VLY8
>>798
>>793読んだ上でその書き込みなら流石に傲慢が過ぎる
801デフォルトの名無しさん
2021/08/25(水) 13:21:49.43ID:T8xCLAXo
Ruby で作った。
fileutils のDryRun を使ったので、実際には実行されない。
結果を予測して、表示するだけ

require 'fileutils'

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く

dir_path = "C:/Users/Owner/Documents/*.jpg"
target_dir = File.dirname( dir_path ) # ディレクトリパスだけを取り出す

Dir.glob( dir_path )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each.with_index( 1 ) do |full_path, idx| # index は、1 から始まる

dest_path = target_dir + "/new#{ idx }-" + File.basename( full_path )

FileUtils::DryRun.move( full_path, dest_path )
end

出力
mv C:/Users/Owner/Documents/abc.jpg
C:/Users/Owner/Documents/new1-abc.jpg

mv C:/Users/Owner/Documents/xyz.jpg
C:/Users/Owner/Documents/new2-xyz.jpg
802デフォルトの名無しさん
2021/08/25(水) 18:27:43.69ID:WqMYsX4p
複数行モード出なくても改行に一致させる事は可能ですか?
803デフォルトの名無しさん
2021/08/25(水) 23:49:57.87ID:HwQGLaDN
一致と呼んでいいのか分からないけど$が改行に対応すると思う
文字セットには使えないけどab(c|$)みたいな分岐は可能
804デフォルトの名無しさん
2021/08/26(木) 04:30:31.47ID:UZ8JqWyB
複数行モードって何?

mオプション(マルチラインモード)のこと?
それとも逆にオプションなし通常の場合やsオプション(シングルラインモード)のこと?

これの違いは解説でも読めば分かるけど
^ $ . の動作の違いってだけだから、\n,\rはどの場合でも有効だよ
805デフォルトの名無しさん
2021/08/26(木) 08:14:39.00ID:nEHOiDh0
ありがとうございます
806デフォルトの名無しさん
2021/08/26(木) 15:15:16.56ID:Yy835424
JavaScriptの正規表現によるmatch検索で、「10918」ピッタリの数が存在するか調べたいときのことです
「1091」でも検索に引っかかってしまいます。
どうしたらよいでしょうか

以下の条件では10918だけでなく1091でも検索に引っ掛かります
let a = 1091;
new RegExp(`(?<!\d+)${a}(?!\d+)`, "i")
807デフォルトの名無しさん
2021/08/26(木) 15:17:19.26ID:Yy835424
>>806に追記
データは場合によっては「数字 数字 数字」になっており、そこから特定の数字だけ存在するか調べたいです
808デフォルトの名無しさん
2021/08/26(木) 15:44:49.58ID:K931sT/w
\d+ → \\d
809デフォルトの名無しさん
2021/08/26(木) 16:01:36.08ID:a0WUR1Wk
関係ないけどlookbehind内で正規表現が使えない言語とか多いのな
810デフォルトの名無しさん
2021/08/26(木) 16:10:30.57ID:Yy835424
>>808
出来たありがとう
811デフォルトの名無しさん
2021/08/26(木) 17:04:06.18ID:/x6E5kVC
区切りがあるならlook aroundする必要ないよね
812デフォルトの名無しさん
2021/08/26(木) 19:13:53.21ID:1/m60R21
>>806
正規表現である必要ないんじゃない?
後読みの必要ある?
813デフォルトの名無しさん
2021/08/27(金) 16:27:34.54ID:kYh+qXrW
aa●abbbcccd□ddeee
aa□abbbcccd●ddeee

両方にヒット表現をお願いします
814デフォルトの名無しさん
2021/08/27(金) 16:35:14.96ID:zrk6+77w
^a
815デフォルトの名無しさん
2021/08/27(金) 16:35:19.05ID:7nxBSwRn
そのまんまであれば
aa[●□]abbbcccd[●□]ddeee
816デフォルトの名無しさん
2021/08/27(金) 16:47:10.72ID:kYh+qXrW
あ、そうか
aa●abbbcccd●ddeee
aa□abbbcccd□ddeee
はヒットしてほしくないのです
817デフォルトの名無しさん
2021/08/27(金) 16:56:56.42ID:mGcBpOgN
じゃあ
(aa●abbbcccd□ddeee|aa□abbbcccd●ddeee)
818デフォルトの名無しさん
2021/08/27(金) 17:06:33.96ID:kYh+qXrW
やっぱりそれしかないですかね。実際は
(.*●.*□.*)|(.*□.*●.*)
でこうなるのです
Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
819デフォルトの名無しさん
2021/08/27(金) 17:09:48.92ID:56S9Iaf9
全体をマッチ対象にしたいの?
820デフォルトの名無しさん
2021/08/27(金) 17:45:24.98ID:ldxLRyEW
>>816
aa([●□])abbbcccd(?!\1)[●□]ddeee
821デフォルトの名無しさん
2021/08/27(金) 19:46:53.21ID:FthY+dex
EmEditorはしらないなー
(?m:(.*●.*□.*)|(.*□.*●.*))
822デフォルトの名無しさん
2021/08/28(土) 05:34:33.30ID:Z+kCS9um
.+?([●□]).+(?!\1)[●□].+
823デフォルトの名無しさん
2021/08/28(土) 08:18:57.05ID:3w95mdWV
>>818
そのダイアログはCtrl+Cでテキストコピーできると思うからググりやすいように
コピペしてほしいな

あとEmEditorはBoost.RegexとOnigmo(鬼雲)を使い分けられるから、
オプションでどっち使ってるのかも教えて
https://jp.emeditor.com/text-editor-features/history/new-in-version-15-7/
824デフォルトの名無しさん
2021/08/28(土) 10:30:00.05ID:2Y0XlSPP
>>823
---------------------------
EmEditor
---------------------------
The complexity of matching the regular expression exceeded predefined bounds. Try refactoring the regular expression to make each choice made by the state machine unambiguous. This exception is thrown to prevent "eternal" matches that take an indefinite period time to locate.
---------------------------
OK
---------------------------

例示してもらった表現いずれも同様のメッセージが出てましたが、なんとOnigmoに変更したら出なくなりました。
いろいろ新しく知ることが出来ました
825デフォルトの名無しさん
2021/08/28(土) 10:38:46.36ID:gjZsNEUJ
(?!\1)ってどういう意味?
826デフォルトの名無しさん
2021/08/28(土) 11:02:34.45ID:o77XzsS5
>>825
「直前に"一つ目のパターン"がない位置」を指すメタ表現
827デフォルトの名無しさん
2021/08/28(土) 11:25:40.94ID:m2ZH6alf
日本語的には"直後に"じゃね?
読んで行く方向、カーソルの前方だとしても直前だと意味が逆転しそう
828デフォルトの名無しさん
2021/08/28(土) 13:02:42.57ID:rTzGvJSm
>>820
この(?!/1)は分かるけどその次の[●□]との繋がりが分からん
どういうこと?
829デフォルトの名無しさん
2021/08/28(土) 13:33:13.98ID:gjZsNEUJ
ありがとう完全に理解した
\1 は ([●□]) のことを指してて
(?!\1)[●□] で前の ([●□]) で選んだものと被らないようにしてるわけか
830デフォルトの名無しさん
2021/08/28(土) 15:08:17.46ID:F14AY+cI
>>828
(?!\1) は「1つめの括弧で一致した内容はこの位置(の直後)には現れない」という言明

([●□]) が ● に一致したなら (?!\1) は (?!●)
([●□]) が □ に一致したなら (?!\1) は (?!□)

なので最初の [●□] と二つめの [●□] では必ず互いに異なる文字が一致する、という具合
831デフォルトの名無しさん
2021/08/28(土) 15:43:56.56ID:rTzGvJSm
>>830
ああなるほどありがとう!
832デフォルトの名無しさん
2021/09/03(金) 00:14:54.74ID:X1LFwexk
●Regular Expressionの使用環境
さくらエディタ

●検索か置換か?
検索

●説明
ある文字列を含まない形で最短一致させたい

●対象データ
「吾輩は猫」「吾輩は三毛猫」「吾輩は犬」「吾輩は犬」
という1行の文書です。

●希望する結果

「吾輩は猫」「吾輩は三毛猫」「吾輩は犬」「吾輩は犬」
              ^^^^^^^^^

「.*【猫を含まない】」
というような正規表現で、上記のように、
猫を含まない最初の「」に最短一致でマッチする結果を得たいのです。
どなたかお詳しい方、ご教示くださいませ
833デフォルトの名無しさん
2021/09/03(金) 00:17:33.53ID:X1LFwexk
連投すみません。
^^^^^^
がズレました。

「吾輩は猫」「吾輩は三毛猫」「吾輩は犬」「吾輩は犬」
のうち、3つ目のカギ括弧、
つまり、1つめの「吾輩は犬」にマッチする正規表現を探しております。
834デフォルトの名無しさん
2021/09/03(金) 00:36:24.12ID:OHAz9Fu/
「[^猫]*?」
835デフォルトの名無しさん
2021/09/03(金) 02:33:55.38ID:X1LFwexk
>>834
すいません><
例題を単純化しすぎました。
せっかくご回答いただいたのに申し訳ないです。

「吾輩はネコである」「吾輩はミケネコである」「吾輩は「ネコ」である」「吾輩はイヌである」

というように、排除したい文字列(ネコ)は複数文字なんです。さらに、カギ括弧が二重の可能性があります。
カギ括弧内にネコを含まないものなら、イヌ以外でもなにがマッチしても問題ありません。
左から見て内部に「ネコ」を含むカギ括弧を排除していき、最初にネコを含まないカギ括弧にマッチさせたいのです。
836デフォルトの名無しさん
2021/09/03(金) 02:34:57.11ID:1+MNr6V9
^.*?\K「(?~猫|」)」
^.*?\K「[^猫」]*+」
837デフォルトの名無しさん
2021/09/03(金) 02:39:58.48ID:1+MNr6V9
^.*?\K「(?~ネコ|」)」
838デフォルトの名無しさん
2021/09/03(金) 02:56:17.42ID:X1LFwexk
>>837
おおお…凄い…できました!
ずっと探し求めていた魔法がここに…

これは、なにが起こっているのでしょうか。
なんらかの後方参照が行われているのは分かるのですが…
839デフォルトの名無しさん
2021/09/03(金) 03:09:51.13ID:X1LFwexk
「(?~ネコ|」)の、?~は、「不在繰り返し」というのですね。

ということは、「(?~ネコ|」)は、
「の後に、【ネコ】の不在繰り返し 又は 」がくるもの、という意味ですね。

不在繰り返しなんて便利な表現があったとは…
ご親切にありがとうございます。
840デフォルトの名無しさん
2021/09/04(土) 02:41:25.14ID:ExeocnPJ
> ?~は、「不在繰り返し」というのですね
違う。?~ だけでは意味を成さない
(?~式) 「非包含オペレータ」 "式" を含まない文字列に一致する
式にあたる部分は "ネコ|」" なので "ネコ" と "」" を含まない文字列に一致
841デフォルトの名無しさん
2021/09/04(土) 10:50:54.40ID:vsW0UBqv
非包含オペレータと不在繰り返しは紛らわしいな
(?~ネコ)がネコのネにマッチするかしないか
842デフォルトの名無しさん
2021/09/04(土) 11:49:17.86ID:KRHaMmez
「吾輩はネコである」
「(?~ネコ)」 不一致
「(?~ネコ)(?~ネコ)」 一致
「(?~(?=ネコ))(?~ネコ)」 不一致


「(?~(?=ネコ))(?~(?<=ネコ))」
「ネコ」 不一致
「吾輩はネコ」 一致
「吾輩はネコである」 不一致

「(?~(?=ネコ).)(?~.(?<=ネコ))」
「ネコ」 不一致
「吾輩はネコ」 不一致
「吾輩はネコである」 不一致
843デフォルトの名無しさん
2021/09/04(土) 15:57:28.08ID:e0R2hmQ/
この不在繰り返しを、Python3.6のreモジュールで書く方法はありますか?
844デフォルトの名無しさん
2021/09/08(水) 12:26:11.39ID:R6BptgGx
むずすぎて全然分からん
まぁPythonで使えんみたいやしいいか
845デフォルトの名無しさん
2021/09/08(水) 14:14:17.23ID:QqH5BAVe
文字列の否定は否定先読みで
re.findall("「(?:(?!ネコ).)*」", string)
846デフォルトの名無しさん
2021/09/08(水) 15:37:03.14ID:bwkSQigi
(?~abc) "abc"に一致しない文字列に一致。"abc"の"a","ab","bc","c"に一致する
(?:(?!abc).)* "abc"の"a"に一致しない文字列
(?:.(?<!abc))* "abc"の"c"に一致しない文字列

abc に対し
(?~abc)c 一致
(?:(?!abc).)*c 不一致
(?:.(?<!abc))*c 一致
847デフォルトの名無しさん
2021/09/15(水) 04:13:47.03ID:2Sm06Jhf
(?~式) 非包含式
(?~) 非包含オペレータ(演算子)  (被演算子は~と)の間に内挿される)
/* 田中さんの元論文がこの使い分けを間違ってるわけだが */

概念を語る場合は、繰り返しや文字クラスや選択のように、単に「非包含」と呼ぶ
848デフォルトの名無しさん
2021/09/17(金) 16:17:14.17ID:J/w/zJeW
自己肯定感の低い人が仕事できない本当の理由


【致命的】個人で稼ぐのに向いていない人の特徴7選


自己肯定感の低い人にオススメの副業5選


【質問力】雑魚と思われてしまうダメな質問の仕方5選


集団の中で落ちこぼれ組がやりがちなこと


【人気者の基準】有名にならないと言われない暴言3選


【本質】みんながフリーランスになれない本当の理由

849デフォルトの名無しさん
2021/09/27(月) 17:11:29.79ID:yz6wzePk
下記のソフトで書庫ファイルをリネームしたいのですが、正規表現が必須のようです。
どうかご教示をお願いできませんでしょうか。
 https://www.vector.co.jp/soft/winnt/util/se481411.html

【書庫内のファイルの先頭に、親フォルダ名を追加したい】
 例: ○X△.zip 内の 00.jpg~99.jpg を ○X△.zip.00jpg~○X△.zip.99.jpg にしたい
850849
2021/09/27(月) 18:00:06.98ID:yz6wzePk
訂正させて下さい。
 親フォルダ名じゃなく親ファイル名でした。


下記のソフトで書庫ファイルをリネームしたいのですが、正規表現が必須のようです。
どうかご教示をお願いできませんでしょうか。
 https://www.vector.co.jp/soft/winnt/util/se481411.html

【書庫内のファイルの先頭に親ファイル名を追加したい】
 例: ○X△.zip 内の 00.jpg~99.jpg を ○X△.zip.00jpg~○X△.zip.99.jpg にしたい
851デフォルトの名無しさん
2021/09/27(月) 18:20:46.41ID:QHV+6MAZ
そのソフトの機能とあなたがしたい事が正確にはわからんが、
正規表現で自動でディレクトリ名は入らんよ。
それをやりたかったら普通はプログラミングの領域。

単に先頭に指定文字列を入れたいなら
検索:^
置換:○X△.zip
852デフォルトの名無しさん
2021/09/27(月) 18:36:25.58ID:W1wq+c4c
>>849
^:○X△.zip

アーカイブ名を参照するメタ文字が用意されていれば別だけど、一般的には都度指定するしかない

もし処理対象アーカイブが一定数以上あったり、定期的に一定数以上のアーカイブに対して同処理が必要になることが予想される場合、自分なら、1) 作業フォルダに解凍、2) リネーム、3) 再圧縮、4) 元アーカイブに上書きコピー、5) 後片付け、を指定フォルダ以下のアーカイブに対して実行するバッチファイルを書いて、それを実行すると思う(7z)
853デフォルトの名無しさん
2021/09/27(月) 19:31:31.78ID:wTAYfgov
>>850
親ファイル(zipファイルのことだよね?)の名前を人手で入れるなら
^:○X△.zip
みたいな感じで行けるんじゃね?
http://frostmoon.sa
kura.ne.jp/gui4reces/gui4reces0018ss_rename.png
854デフォルトの名無しさん
2021/09/27(月) 22:31:45.47ID:2WG9Jybb
ファイル名に拡張子以外のドットは特別な理由でも無い限り使わないようにした方が良い
あと質問内容は正規表現では無くソフトの使い方のようなので微妙にスレチ
作者の宣伝?
855デフォルトの名無しさん
2021/09/28(火) 09:31:17.72ID:fMeX4han
皆さん、ありがとうございます。
せっかくアドバイスを頂いたのですが、何が何やらさっぱりで・・・
せめて正規表現を少しでもかじってから再度教えを請いたいと考えていたので返信が遅れてしまいました。
しかし・・・
正規表現のサイトを少し覗いてみたのですが私には敷居が高すぎて・・
もう少し頑張ってみるつもりですが、かなりきつそうです
856デフォルトの名無しさん
2021/09/28(火) 09:38:51.90ID:ZQP3z5os
>>855
アドバイスじゃなくて答えが書いてあるんだから、せめて試せよ
857849
2021/09/28(火) 10:21:59.42ID:fMeX4han
す、すみません。
検索文字列とか置換文字列とか難しく考えすぎて、
^:○X△.zip が回答そのものだったとは思いませんでした。

試してみました。
しかし、ログでは成功してるはずなのに実際のファイルはリネームされていません。
ソフトの使用方法がおぼつかないため、もう少し試行錯誤してみます。
とりあえずご報告だけさせて頂きました。
858デフォルトの名無しさん
2021/09/28(火) 13:29:43.27ID:T0yrrR3v
○X△を○X△のまま使っただろ?
859849
2021/09/28(火) 20:59:21.69ID:fMeX4han
何でわかるんですかw

第一階層までしかリネームできないみたいです
そうなると、解凍してリネームして再圧縮が正解ですね。
バッチファイルは・・・・・・無理ですが
860デフォルトの名無しさん
2021/10/04(月) 16:07:06.15ID:N0nKW8hc
教えてください。
AAAA
AAAA(1)
AAAA(2)
AAAA(3)
という中から
()付きのものだけ抜き出す式はどう描くのでしょうか()の中身ではなくてAAA(3)などを丸ごとです。
お願いします。
861デフォルトの名無しさん
2021/10/04(月) 16:24:14.46ID:bhYXHQji
^.*?¥(.*?¥)$
862デフォルトの名無しさん
2021/10/04(月) 17:32:08.96ID:N0nKW8hc
>>861
抽出できない・・・です
ごめんなさい、
AAAA(3).doc
とか拡張子もありました。
863デフォルトの名無しさん
2021/10/04(月) 17:52:45.16ID:N0nKW8hc
次々すみません()の中は半角1文字の数字です。
864デフォルトの名無しさん
2021/10/04(月) 17:58:58.66ID:bhYXHQji
>>862
¥はバックスラッシュに置き換えな
^.*?¥([0-9]¥)
865デフォルトの名無しさん
2021/10/04(月) 18:06:36.32ID:bhYXHQji
あと、()が全角と半角では扱いが異なるから書き込むたびに変わってちゃダメ。
全角と半角両方に対応させたいなら^.*?[¥((][0-9][¥))]
866デフォルトの名無しさん
2021/10/04(月) 19:38:23.48ID:zsq22U2a
拡張子は含めるの?
867デフォルトの名無しさん
2021/10/04(月) 19:42:51.89ID:qPYIGz+e
.*\([0-9]\).*
868デフォルトの名無しさん
2021/10/15(金) 13:06:48.14ID:Wvwj+LKl
うんこおおおおおおおおおお

うんこ!!!!!!!!
ってjavascriptで正規表現で変換したいです
text.replace(/うん(こ)+/,"!")だと明らかに上手く行きませんがどうしたらよいのでしょうか?
869デフォルトの名無しさん
2021/10/15(金) 13:30:38.03ID:vygdYOMS
検索から違ってるし、function使わんと同回数繰り返すとかは無理
text.replace(/(うんこ)(.+)/,function(s,g1,g2){return g1+Array(g2.length+1).join('!')});
870デフォルトの名無しさん
2021/10/16(土) 08:23:59.89ID:akCvqHZs
先頭が-か+か0-9
以降0-9のみ
はどう書きますか?

-123 OK
12+3 NG
871デフォルトの名無しさん
2021/10/16(土) 08:43:22.00ID:6ga3nra2
^[\-+]?[0-9]+
872デフォルトの名無しさん
2021/10/16(土) 09:35:59.80ID:yphHFJu4
1つ目の文字クラスの中の円マークはなに?
873デフォルトの名無しさん
2021/10/16(土) 09:45:33.38ID:yphHFJu4
文字クラスの1文字目で使う場合には範囲指定と誤解される可能性はないから、エスケープ不要なのでは、という疑問です
874デフォルトの名無しさん
2021/10/16(土) 09:59:33.13ID:6ga3nra2
>>873
エスケープをつけておいたほうが人間にとって読みやすく、後々パターンを改変した時にミスせずにすむ
875デフォルトの名無しさん
2021/10/16(土) 10:04:58.76ID:6ga3nra2
「○○してもいい」が「○○しなければならない」に置き換わってしまう人たまにいるけど、あまりPGに向いてないかもね
876デフォルトの名無しさん
2021/10/16(土) 10:40:42.04ID:Yt5Fp2tM
悔しそう
877デフォルトの名無しさん
2021/10/16(土) 10:48:25.13ID:PMQb3sBw
質問者より先に回答者に対してあーだこーだ言ってくる奴にロクな奴はいない
と同時に質問者の自演の可能性もある
>>872-873みたいなのは分かってて聞いてるからそういうレスこそ不要なのでは、という疑問です
878デフォルトの名無しさん
2021/10/16(土) 11:02:19.42ID:+QyAV8Aw
悔しそう
879デフォルトの名無しさん
2021/10/16(土) 11:15:38.86ID:6ga3nra2
あまり偏屈な人は回答しないほうがいいと思うけど、現実世界で阻害されている偏屈な人ほどねじ曲がった回答に生きがいを見出してしまう
880デフォルトの名無しさん
2021/10/16(土) 11:24:47.28ID:PMQb3sBw
機械から見て無駄のない極力短い正規表現を作れる俺カッコイイみたいな自己満な人もいるからねえ
おれは、ぱっと見て分かりやすいとか修正しやすい書き方するなあ
そうすることでデメリットが多くなってしまうなら別だけどね
まぁケチ付けることが目的の人がいても仕方ないけど
881デフォルトの名無しさん
2021/10/16(土) 11:25:33.22ID:xOMo/rXl
けど...しまう
882デフォルトの名無しさん
2021/10/16(土) 11:27:32.20ID:PMQb3sBw
本当に知識がある人は知識マウント取らずに、
なぜそういう回答をしているのか推察できるからいちいち突っ込まない
どうしても回答したい場合は、他の回答者には触れず回答だけ書く
883デフォルトの名無しさん
2021/10/16(土) 11:42:35.80ID:y3W2HSwc
874だけで終わっとけば良かったのにw
884デフォルトの名無しさん
2021/10/16(土) 11:52:56.32ID:yYNJhuOF
自演バレバレでも「悔しそう」に反応せずにはいられなかったんだろ

長文が自己紹介過ぎて笑える
885デフォルトの名無しさん
2021/10/16(土) 11:59:55.88ID:6ga3nra2
MUST、SHOULD、MAYの理解が不完全な人はなんでもMUST扱いしたがる
冗長性を理解できない着物警察の思考様式
886デフォルトの名無しさん
2021/10/16(土) 12:03:18.95ID:qP61rC0r
おれも-はエスケープするな
つか+もエスケープする
エスケープ可能なのはエスケープしとく
887デフォルトの名無しさん
2021/10/16(土) 12:30:42.49ID:9AQLH6H/
俺は極力しない
888デフォルトの名無しさん
2021/10/16(土) 12:33:05.07ID:FxLIumwg
しないんじゃないかな
889デフォルトの名無しさん
2021/10/16(土) 12:39:14.15ID:igFsF4z+
ま ちょっと覚悟はしておけ
890デフォルトの名無しさん
2021/10/16(土) 12:41:17.72ID:BzHPp6pT
なんとなくプラスマイナスの順にしたいから ^[+\-]?[0-9]+ って書くかな
891デフォルトの名無しさん
2021/10/16(土) 12:47:32.25ID:akCvqHZs
質問者です
pythonなのでエスケープはr文字列頼りです

ところで871のだと
12+3 は 12,+3で取れますが
正規表現を使った、文字列の判定がしたいのです
例挙げたように、頭は-+0-9 以降0-9のみで構成された文字列のみTrue、それ以外はFalseしたい

一応 if len(re.findall(pat, s)) == 1 かどうかで判定できてる気がするけど
方法としてはこれでいいんですよね?
すいません正規表現関係なくて
892デフォルトの名無しさん
2021/10/16(土) 12:53:25.01ID:akCvqHZs
しかもハット忘れて偶然できてただけだっった(笑)

うーむ
893デフォルトの名無しさん
2021/10/16(土) 12:59:33.37ID:akCvqHZs
^[-+]?[0-9]+$
こうか
894デフォルトの名無しさん
2021/10/16(土) 13:52:27.11ID:wy7RR+Lb
>>891
re.fullmatchで
895デフォルトの名無しさん
2021/10/16(土) 14:12:10.41ID:UbsVp7JO
fullmatchってあったのか
そりゃそうか
896デフォルトの名無しさん
2021/10/16(土) 14:38:49.46ID:6SnREp4P
正規表現スレで、円マークという誤解を招く表現はやめてほしい
バックスラッシュと表現すれば誤解を招かない
897デフォルトの名無しさん
2021/10/16(土) 15:20:00.23ID:1kPG7eLG
回答で円記号を使われるのは気になる
わざわざ置き換え指示するくらいなら最初から正しく書けばいいのに
898デフォルトの名無しさん
2021/10/16(土) 15:25:19.02ID:CFrnAbxP
承認欲求を満たせないと見るや他人を下げて自分を上げようとする人は
自己評価は高いんだけど周りからの評価は低く不満を溜め込んでるタイプ

5chあるあるだけど中には粘着する人もいるので気をつけようね
899デフォルトの名無しさん
2021/10/16(土) 16:28:23.09ID:q69AYoXR
ID:6ga3nra2のことか
900デフォルトの名無しさん
2021/10/16(土) 16:51:02.62ID:UUKQ6Z7Y
>>899
おしい!
901デフォルトの名無しさん
2021/10/16(土) 17:35:12.23ID:VO4IgATZ
"質問者"や"回答者"という立場を異常に強調するのは
"質問者"の承認が欲しくて堪らないから

承認が得られない場合や承認を得ることを邪魔された(と感じた)ら
自己防衛のために他者を攻撃する

攻撃の度合いが強い人ほど病んでる度合いも強い
902デフォルトの名無しさん
2021/10/16(土) 17:49:26.91ID:hNeyEW9L
「俺は\でエスケープしてるけど気になるなら取ってくれ」
で済ませられなかったのかねえ
903デフォルトの名無しさん
2021/10/16(土) 18:00:14.65ID:QrnrtPBD
>○○してもいい」が「○○しなければならない」に置き換わってしまう人
これ自分の紹介かよ
エスケープしなければならない病に罹ってるな
904デフォルトの名無しさん
2021/10/16(土) 18:03:05.28ID:a3RnthCp
香ばしい奴にイチイチ構うな
そうやって相手するからそこに価値を見出してレス乞食へと変質して行くんだ
スルー出来ないおまえらも似たようなガイジ予備軍
905デフォルトの名無しさん
2021/10/16(土) 18:03:38.95ID:r+1DV466
>>883 に一票
まあそういう所にしか突っ込めない人がいるって思ってりゃいいかと
906デフォルトの名無しさん
2021/10/16(土) 18:21:20.67ID:6ga3nra2
なにか勘違いしている人多いみたいなんで説明しとく

そもそもcharactter rangeでの先頭または末尾での-を明確に定義しているのはPerlとPythonぐらいしかなく、
正規表現ライブラリのpcre, re2, boost, Onigmo いずれの文書にも記述はない。
よってpcre, re2, boost, Onigmoで"[-az]", "[az-]", "[a\-z]" が同じ動作をする保証はない。

以下に示したOnigmoの文法説明では182行目で明確に'-'の使用を求めている。
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
907デフォルトの名無しさん
2021/10/16(土) 18:26:32.71ID:6ga3nra2
誤:以下に示したOnigmoの文法説明では182行目で明確に'-'の使用を求めている。
正:以下に示したOnigmoの文法説明では182行目で明確に'-\'の使用を求めている。
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja

grepコマンドの組み込み正規表現の場合、文字集合で'-'を指定できるのは末尾のみ。以下にURLを添えとく。
https://linuxjm.osdn.jp/html/GNU_grep/man1/grep.1.html
908デフォルトの名無しさん
2021/10/16(土) 18:37:49.95ID:6ga3nra2
ちなみに、仕様書に先頭末尾の'-'に関する記述がないpcreやOnigmoでも"[-az]", "[az-]", "[a\-z]" が同じ動作をするのでひとまず安心していい
909デフォルトの名無しさん
2021/10/16(土) 18:50:30.23ID:hNeyEW9L
C#等、javascript,Powershell,WSH、Rubyなど全部同じ動作する
エスケープを強要するものがあるのなら実例を出してみろよ
910デフォルトの名無しさん
2021/10/16(土) 18:58:45.87ID:6ga3nra2
念のため書いとくが、Java正規表現にも.NET正規表現にも文字集合の先頭末尾エスケープなしハイフンに関する記述は見当たらない

Javaの正規表現
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/regex/Pattern.html

.NET の正規表現
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference
911デフォルトの名無しさん
2021/10/16(土) 19:02:53.95ID:6ga3nra2
>>909
実際のプログラムがどう動くかはあまり重要じゃないね
仕様書がすべてだよ
912デフォルトの名無しさん
2021/10/16(土) 19:03:26.64ID:hNeyEW9L
>>910
引っ込みがつかなくなったのかよ
後付の理論だってことは、>>874-875を見ればよく分かるぞ
913デフォルトの名無しさん
2021/10/16(土) 19:12:04.98ID:nVB+19gH
>>910
> .NET正規表現にも文字集合の先頭末尾エスケープなしハイフンに関する記述は見当たらない

明示はしてないけど
a hyphen character (-) is always interpreted as the range separator unless it is the first or last character of the group.
って書いてあるから最初か最後なら範囲文字として解釈はされないだろうね

で最初の文字のケースはないけど最後の文字のケースは例示されてる
[\s-] ⇒ Match a hyphen or a white-space character.

https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions
914デフォルトの名無しさん
2021/10/16(土) 19:12:23.95ID:6ga3nra2
>>912
何度も書くが、MUST、SHOULD、MAYはまったく違うものだよ
混同しないことだ
915デフォルトの名無しさん
2021/10/16(土) 19:17:00.69ID:6ga3nra2
>>909
.NETを列挙せず、C#・PowerShell・WSHを別々に列挙した時点で ID:hNeyEW9L が素人さんなのはよくわかった

>>913
訂正ありがとう
916デフォルトの名無しさん
2021/10/16(土) 19:23:50.02ID:6ga3nra2
Onigmoなにそれうまいの、という人のために説明しとくとサクラエディタの正規表現はOnigmoを採用してる
917デフォルトの名無しさん
2021/10/16(土) 19:27:24.61ID:BO6yK2Ly
C++の正規表現クラスは引数でJavascriptの正規表現を選べます。
これは良いかもしれない。
918デフォルトの名無しさん
2021/10/16(土) 19:30:44.77ID:ciQBbSHj
(規格確認してないけど)そもそもC++のstd::regexってECMA-262の規格を参照, になってなかったっけ
Boost::RegexはPCRE2とかの表現力があったけど標準入りの時点で文書化された規格参照になってた記憶
919デフォルトの名無しさん
2021/10/16(土) 19:35:15.45ID:BO6yK2Ly
std::regexはgrepとかawkとかあまりうれしい人が居無さそうなオプションもあるんだけど、ECMAScriptは多くの人がうれしくなるのでは?
920デフォルトの名無しさん
2021/10/16(土) 19:47:08.22ID:1zNIFcv9
WSHの正規表現って言語エンジン(VBScript、JScript等)それぞれで実装されてるのかと思ってたけど、俺の勘違い?
.NETの正規表現エンジンが使われることがあったりする?
921デフォルトの名無しさん
2021/10/16(土) 20:29:00.06ID:Kqq2n1Gw
マジキモいっすね
エスケープするしないの問題じゃないのに「なにか勘違いしてる人多いみたいなんで説明しとく」てwww
922デフォルトの名無しさん
2021/10/16(土) 20:37:45.55ID:wy7RR+Lb
PCREに明記されてるからね
https://www.pcre.org/original/doc/html/pcrepattern.html#SEC9

The minus (hyphen) character can be used to specify a range of characters in a character class. For example, [d-m] matches any letter between d and m, inclusive. If a minus character is required in a class, it must be escaped with a backslash or appear in a position where it cannot be interpreted as indicating a range, typically as the first or last character in the class, or immediately after a range.
923デフォルトの名無しさん
2021/10/16(土) 20:39:03.57ID:I2E7AJLT
>>920
スクリプトエンジンの指定(jscript9等)はできるけど、正規表現エンジンの指定はできないはず
少なくとも自分は知らない
924デフォルトの名無しさん
2021/10/16(土) 20:43:45.26ID:75KO56vr
論理的に反論できなくなると人格攻撃するしかなくなっちゃうんだろうね
925デフォルトの名無しさん
2021/10/16(土) 20:50:25.14ID:hNeyEW9L
>>922
さすがに[b-d-z]は気持ち悪いな
926デフォルトの名無しさん
2021/10/16(土) 20:56:26.53ID:kPRtjNBv
質問した人は気を悪くしたかもしれないけど
>>873の質問はいい質問だったね
いろんな意味で
927デフォルトの名無しさん
2021/10/16(土) 20:56:48.25ID:6ga3nra2
>>922
訂正ありがとう

それはさておき、先頭または末尾でハイフンを指定する場合はエスケープしてはならないみたいな仕様はあるんだろうか?
928デフォルトの名無しさん
2021/10/16(土) 21:00:15.89ID:hNeyEW9L
>>914
どこを読めばそうなる?
俺は最初からそういう哲学を持っているのなら、絶対に>>874-875のような回答にはなってないだろって言ったんだぞ
929デフォルトの名無しさん
2021/10/16(土) 21:00:48.73ID:6ga3nra2
>>926
仕様外動作に備えてエスケープは必要、というのが回答になると思いますけどね
930デフォルトの名無しさん
2021/10/16(土) 21:02:06.43ID:6ga3nra2
>>928
理由をひとつだけに絞ってるのはなぜ?
人間側の理由、仕様側の理由、それぞれあるでしょ
931デフォルトの名無しさん
2021/10/16(土) 21:05:15.08ID:hNeyEW9L
>>930
レス内容と時間経過で、最初はそんなことを露ほども思ってなかったのが
理由を探してそっちのほうに話を持っていったのが分かるからさ
932デフォルトの名無しさん
2021/10/16(土) 21:12:06.82ID:6ga3nra2
>>931
全然違う。>>874-875は人間側の理由として完結しているけど追加で、仕様側の理由も書いただけだよ
書いた本人が言ってるのに推理小説みたいに無駄に裏読みしても意味ないよ
あなた、ひょっとしてモリカケ問題にのめりこんでるタイプ?
933デフォルトの名無しさん
2021/10/16(土) 21:12:31.27ID:PMQb3sBw
>>884
>>891でお礼の一言もないから自演なのかやっぱ
934886
2021/10/16(土) 21:15:28.50ID:75KO56vr
思ってたよりエスケープ可能なのはエスケープする人はいないもんなんだな
オレは機械的にエスケープしてるのも少なくないのでより多めではあるんだろうけど
935デフォルトの名無しさん
2021/10/16(土) 21:17:13.92ID:hNeyEW9L
>>932
>>875で、してもいい、しなければいけないに拘ってるところが
仕様に明記されてないから書くべきとの哲学を持ってる人がするレスではない
ということ
936デフォルトの名無しさん
2021/10/16(土) 21:24:54.32ID:6ga3nra2
>>935
仕様に明記されてないということは「仕様外」という意味にしかならないよ
書くべきと思い込んでいるのはあなたのほうだし、技術板で哲学とかなにを言いたいのかわからないし
精神病んで休職してるのが伝わってくるから、そのくらいにしとけば?
937デフォルトの名無しさん
2021/10/16(土) 21:31:11.06ID:iYaW2gC3
>>923
指定したスクリプトエンジンの中で .NET の正規表現エンジン使う奴はあるのか?
ってことだと思う
俺の知る限り多分ない
938デフォルトの名無しさん
2021/10/16(土) 21:33:41.76ID:hNeyEW9L
>>875は、書かなくてもいいというのを肯定してて、けれども書いたほうがより良い
という考えでないと出てこない
最初から書くべきだと思ってる人なら書いてない文章だ
939デフォルトの名無しさん
2021/10/16(土) 21:36:54.55ID:PMQb3sBw
質問者と回答者(ID:6ga3nra2)が同一人物で自演って事?
940デフォルトの名無しさん
2021/10/16(土) 21:43:42.85ID:6ga3nra2
>>938
マジで病んでるな
好きなだけ赤木ファイルの謎を追いかけたらいい
941デフォルトの名無しさん
2021/10/16(土) 21:54:38.21ID:6ga3nra2
Microsoft Beefs Up VBScript with Regular Expressions
https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/scripting-articles/ms974570(v=msdn.10)?redirectedfrom=MSDN


Regular Expression Syntax (JavaScript)
https://docs.microsoft.com/en-us/previous-versions/1400241x(v=vs.100)
942デフォルトの名無しさん
2021/10/16(土) 21:57:37.86ID:kP7MiIn1
色々な意味や方面でガチの人は理解しないし理解されないよなあ
943デフォルトの名無しさん
2021/10/16(土) 22:11:08.63ID:caYv+2Nn
ホモ以外は帰れ
944デフォルトの名無しさん
2021/10/16(土) 22:24:05.01ID:6ga3nra2
むしろホモが帰れ
945デフォルトの名無しさん
2021/10/16(土) 23:17:21.33ID:senq7Tfg
あやふやだったら全部エスケープすればまぁ動く
同僚やlinterに文句言われるくらい
946デフォルトの名無しさん
2021/10/16(土) 23:39:42.65ID:1zNIFcv9
>>923
>>937
ありがとう
WSH共通のオプション的なものにしろスクリプトエンジン側にしろ、.NETの正規表現エンジンが使われるケースが思いつかなかったんだけど、一般的な認識みたいで安心したよ
947デフォルトの名無しさん
2021/10/17(日) 07:56:05.72ID:mIAwyFSs
esc幾つも入れるより、\Q\Eの方がスマートな気がしてるんだけどあんまり使われないのは何で?
948デフォルトの名無しさん
2021/10/17(日) 08:28:28.33ID:N+Nl+RmC
Perl以外じゃ使えないから
まぁ、他でもメタ文字をそのまま使えるオプションが有るのがほとんどだけどね
949デフォルトの名無しさん
2021/10/17(日) 10:24:56.81ID:mIAwyFSs
そうなのか、ありがとう
950デフォルトの名無しさん
2021/10/17(日) 18:01:06.39ID:p8oc8mfi
Pythonお使いの方、正規表現は、reとregexのどっち使っていますか?
regexがアトミックグループをサポートしている、などという話は知識として知ってはいるのですが、
reが残っているということはreにも実用上の優位点があるということですよね。それは何なのでしょうか
951デフォルトの名無しさん
2021/10/17(日) 21:30:56.51ID:E1qJZsEj
ないよ。regex使えるなら使うべき
952デフォルトの名無しさん
2021/10/17(日) 23:24:37.14ID:rEReGylo
コアに入れてしまった以上、気楽になくせないだけじゃないの
953デフォルトの名無しさん
2021/10/18(月) 00:56:20.45ID:fcbr/1wh
昔reで書いたコードを書き直さずに使えるのが最大のメリットだと思うけど
954デフォルトの名無しさん
2021/10/18(月) 01:10:10.73ID:IgDyba7Y
「後方互換を破壊するに足る理由」が無いので、そのまま残されている
955デフォルトの名無しさん
2021/10/18(月) 07:31:05.25ID:XtnzC8HY
>>934
だってエスケープしてるなんて
おともだちに知られたら恥ずかしいし
956デフォルトの名無しさん
2021/10/18(月) 08:28:55.87ID:CI2UP6iO
エスケープは恥だが役に立つ
957デフォルトの名無しさん
2021/10/18(月) 08:46:32.68ID:PPwA/bGd
python2からpython3への後方互換の捨てっぷりを思えば、
さっさとreを捨ててregexが標準になってもおかしくないはずだが、そうなっていないのはなにか事情があるのかな?
958デフォルトの名無しさん
2021/10/18(月) 08:55:29.74ID:K+CpcSgx
reで不便したことないけどregexにしかない有用機能ってなにがあるの?
959デフォルトの名無しさん
2021/10/18(月) 14:36:27.24ID:TKHV76Qy
日本語などの処理とか
960デフォルトの名無しさん
2021/10/19(火) 11:49:02.44ID:q6QnFAh4
pythonistaでregexインストールしようとしたら、c言語使ってるんで無理だよ的メッセージが出ました。
そうなると、re使うしかないわけで、そういう意味では存在価値ありますね。
961デフォルトの名無しさん
2021/10/19(火) 13:36:44.32ID:WfNe98xT
reがregexを取り込めばいいってだけなのでは?
少なくともreが対応してる範囲でregexも同様に使えるということだし
あまり大きいと組み込み用途とかでは難しいのかもしれないけど

urllibはそんな感じで後発を取り込んでるよね
962デフォルトの名無しさん
2021/10/19(火) 14:38:55.63ID:4nkSMT7f
取込みして欲しい
963デフォルトの名無しさん
2021/10/23(土) 08:19:13.63ID:eRVGYV8c
AHKで、文字列中の単語の間にスラッシュがある場合はその単語の後ろ(区切り文字やピリオドの前)に閉じ括弧を付けたいのだけど、例えばRegExReplaceを使って実現する方法を誰か教えていただけないでしょうか。
こんな、感じにしたいと思ってます。
変換前: aaa bbb/ccc ddd
変換後: aaa bbb/ccc) ddd
964デフォルトの名無しさん
2021/10/23(土) 11:35:17.68ID:0zN24xO8
(\w+\/\w+)
$1)
文字列に日本語が入るなら\wを適切なやつに変えて
965デフォルトの名無しさん
2021/10/23(土) 15:13:21.57ID:eRVGYV8c
>>964
グループ化って、こうやって使うんでうね。すごく勉強になりましたし、非常に助かりました。ありがとうございます。
966デフォルトの名無しさん
2021/10/27(水) 20:23:03.98ID:TntzyF5u
●Regular Expressionの使用環境
javascript
●検索か置換か?
検索
●説明
abcとdefというキーワードが最大1回順不同で出現するのに一致したい
●対象データ
abc def→一致
def abc→一致
abc→一致
def→一致
→空白のみでも一致
→何もなくても一致
abc def g→異なる単語が入っていると不一致

簡単な書き方はありますか?
967デフォルトの名無しさん
2021/10/27(水) 20:44:43.49ID:dNMmh9m9
>>966
var str = 'なんか';
str.replace(/abc|def/g, '');
if (str.trim() === '') console.log('一致');
else console.log('不一致');
968デフォルトの名無しさん
2021/10/27(水) 21:13:34.52ID:dNMmh9m9
str = str.replace(/abc|def/g, '');
だった
969デフォルトの名無しさん
2021/10/27(水) 21:45:36.38ID:TntzyF5u
ありがとうございます。
ちなみに正規表現だけで上記は可能ですか?
970デフォルトの名無しさん
2021/10/27(水) 22:06:08.57ID:BM1dPtJu
javascript使うんだろ
何で他の式を使ったらダメなの?
まあorに空白を入れとけばtrimは不要かもね
あと最大1回とは2回出るとダメってことなのか?
abcabc→不一致?
971デフォルトの名無しさん
2021/10/27(水) 22:38:09.67ID:FvdEROp3
>>966
素直に
^ *(?:(?:abc)? *(?:def)?|(?:def)? *(?:abc)?) *$
じゃだめなの?
972デフォルトの名無しさん
2021/10/27(水) 22:44:32.89ID:TntzyF5u
abcabcはabcが2回でるので不一致です。
javascriptの場合教えてもらったコードで問題ないですね。
正規表現だけで表現できると便利だなーとおもったまでです。

>>971 ありだと思います。
973デフォルトの名無しさん
2021/10/27(水) 23:05:28.48ID:h1zi3AMh
967はabcabcに一致するんじゃないかなあ

^(?: |(abc|def)(?!.*\1))*$
974デフォルトの名無しさん
2021/10/28(木) 09:10:36.00ID:Fr3tDLQH
>>973
こんな書き方できたんだ。知らんかった。
975デフォルトの名無しさん
2021/10/29(金) 00:41:45.01ID:p2ooNE+J
こんなスレがあったんですね
今後お世話になろうと思います^^
976デフォルトの名無しさん
2021/10/30(土) 19:56:09.69ID:y9dUwbDd
Pythonの正規表現を変数などに入れておき、他の正規表現の一部として再利用する方法ってあるのでしょうか。

第一の正規表現を
hoge =[abcd]
としてhogeに格納しておいて、

別の正規表現で
(【hoge】|[efg])

のように、【】の部分で変数を引用するイメージです。
977デフォルトの名無しさん
2021/10/30(土) 20:12:23.79ID:FdnrrKGs
>>976
普通に文字列で持っておいて結合するだけじゃダメなの?
hoge = r'[abcd]'
...
r'(' + hoge + r'|[efg])'
978デフォルトの名無しさん
2021/10/30(土) 20:13:14.90ID:y9dUwbDd
>>966
試しに考えてみました。
問題あればご指摘ください。

abc defのときに、間の空白がどの程度許容されるのかがわかりませんが、とりあえず1文字の空白があってもなくても良い\s?、ということで考えます。


場合分けすると、

abcが冒頭に来るもの(defはあってもなくても可)
defが冒頭にくるもの(abcはあってもなくても可)
どちらもなく、空白はあってもなくても可
の3種類にわけられますから、

^abc\s?(def)?
^def\s?(abc)?
^\s?

であり、このどれかがあてはまればいいので、
(^abc\s?(def)?| ^def\s?(abc)?|^\s?)
となります。

^は3つに共通しているので、カッコの外に括り出してもいいですね。すると
^ (abc\s?(def)?| def\s?(abc)?|\s?)
となります。
979デフォルトの名無しさん
2021/10/30(土) 20:19:09.28ID:y9dUwbDd
3つを合成する時に間に変なスペースが入ってしまっていて、マッチを妨げていました。

^(abc\s?(def)?|def\s?(abc)?|\s?)
ですね。
980デフォルトの名無しさん
2021/10/30(土) 20:27:08.27ID:y9dUwbDd
>>977
それは盲点でした!
正規表現オブジェクトの再利用ということばかり考えていましたが、複数の正規表現に同じ文字列を代入すれば同一の効果が得られますね。

ありがとうございます。
981デフォルトの名無しさん
2021/10/30(土) 22:28:52.36ID:lg5lGqAB
>>978もですが色々アイデアありがとうございます。

空白の条件は書き忘れですね。

abcとdefの間は空白一つ以上、先頭、末尾は空白あっても無くてもOKでした。
982デフォルトの名無しさん
2021/10/30(土) 23:11:57.73ID:y9dUwbDd
>>981
そうであれば

^(abc\s+(def)?|def\s+(abc)?|\s?)\s?$
で良いと思います。

間の空白を1以上とし、
忘れていた行末$を補い、
パターンの後に空白があっても大丈夫なようにしました。
983デフォルトの名無しさん
2021/10/30(土) 23:35:05.65ID:4m+F11LP
>>982
それ ' ABC DEF' みたいに先頭に空白があるケースにマッチしなくね?
984デフォルトの名無しさん
2021/10/30(土) 23:56:32.32ID:OkX3vbx3
>>982
それ 'ABC' みたいに末尾に空白がないケースにマッチしなくね?
985デフォルトの名無しさん
2021/10/31(日) 00:22:50.48ID:Os0N65jy
>>984
ご指摘ありがとうございます。
大変勉強になりました

^\\s?(abc(\s+def)?|def(\s+abc)?|\s?)\s?$

のように直しました。
abc のあとにdefが来るとき、
defのあとにabcが来るとき、
これらの場合のみ空白が必須なので、
空白と後に続くものを、まとめて括弧に入れるべきでした。
986デフォルトの名無しさん
2021/10/31(日) 00:32:18.65ID:Os0N65jy
^\s?(abc(\s+def)?|def(\s+abc)?|\s?)\s?$

冒頭のドルマークが1つ多かったです。
すいません。


あとは、冒頭に\s?を置くのであれば、選択肢の3つ目は不要ですね。
仮に空白文字しかない場合、冒頭の\s?が行末までマッチしてしまいますから、選択肢3つ目で空白がマッチすることはない。
というわけで、3つ目の選択肢を消した別解を考えました。

^\s?(abc(\s+def)?|def(\s+abc)?)?\s?$
987デフォルトの名無しさん
2021/10/31(日) 00:49:08.05ID:Os0N65jy
何度もすいません。
行頭と行末は、*を使うつもりが、?を使ってたから変なコメントになってました。

^\s*(abc(\s+def)?|def(\s+abc)?)?\s*$

これで決定校です!
988デフォルトの名無しさん
2021/11/03(水) 09:32:14.31ID:u//4ywbB
「正規表現一覧表がパクられた」――DeNAのRPAサービスで個人ブログからの無断転載が発覚 取り下げに
https://www.itmedia.co.jp/news/articles/2111/02/news174.html
989デフォルトの名無しさん
2021/11/03(水) 10:19:24.89ID:3o+9eeb8
それ見たけど大昔から結構どこにでもある様な表だよね
自意識過剰じゃね?
990デフォルトの名無しさん
2021/11/03(水) 11:54:53.38ID:K+2zXBgv
https://murashun.jp/article/programming/regular-expression.html
991デフォルトの名無しさん
2021/11/03(水) 13:01:45.68ID:6fv+OhcH
客観的に観てもコピられた可能性は高いと思うが
裁判で勝てるかどうかは微妙
992デフォルトの名無しさん
2021/11/03(水) 13:24:24.94ID:U7i9huA/
そんなことより改変もまともにできないのはヤバい

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

Regular Expression(正規表現) Part15 	YouTube動画>7本 ->画像>12枚
993デフォルトの名無しさん
2021/11/03(水) 14:52:06.73ID:2qQw+lMw
パクられ元にパクられだ疑惑(はてブ情報)
 http://web.archive.org/web/20210302113534/https://troutlurefishing.jp/regex.htm

パクられ元
 http://web.archive.org/web/20210118220247/https://murashun.jp/article/programming/regular-expression.html

パクリ元
 http://web.archive.org/web/20211030075247/https://coopel.ai/help-center/191
994デフォルトの名無しさん
2021/11/03(水) 14:56:33.55ID:V2aH3YMI
態と元・先の使い方がおかしい
パクられ先では?
995デフォルトの名無しさん
2021/11/03(水) 16:19:18.89ID:epFspok0
そもそもgooooooogleにしておかないでgo...gleにしてる時点で
元パクリサイト(今回の騒動の主)のパクリ確定だな
996デフォルトの名無しさん
2021/11/03(水) 16:22:38.72ID:epFspok0
ん? 上の2つどっちが先なんだ?
997デフォルトの名無しさん
2021/11/03(水) 16:31:21.33ID:epFspok0
アーカイブされた時間は真ん中が先だな
先後がよくわからんので、>>995の結論については取り消しておく

正規表現を使わない場合、同じ文字の繰り返しって、...以外ではどう表現する?
gogle, google, gooogle ... という例ならある程度わかるんだが
998デフォルトの名無しさん
2021/11/03(水) 16:55:49.57ID:X6BWa2vR
>>997
アーカイヴではそうなる
はてブ論調では後述のように解されてるけど、根拠不明
https://b.hatena.ne.jp/entry/s/www.itmedia.co.jp/news/articles/2111/02/news174.html

> オリジナルも別のサイト https://troutlurefishing.jp/regex.htm の改変に見えるけど、仮の図表として入れてたのをそのまま出しちゃったんだろうなぁ。。
https://b.hatena.ne.jp/entry/4710603849468972162/comment/roshi
999デフォルトの名無しさん
2021/11/03(水) 19:48:21.44ID: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
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
1000デフォルトの名無しさん
2021/11/03(水) 20:02:22.42ID:ebAE+z9+
次スレ
Regular Expression(正規表現) Part16
http://2chb.net/r/tech/1635936601/
-curl
lud20250122152333ca
このスレへの固定リンク: http://5chb.net/r/tech/1568640311/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「Regular Expression(正規表現) Part15 YouTube動画>7本 ->画像>12枚 」を見た人も見ています:
twinkle for iOS 正規表現専用
キタギマNG用の正規表現作ったよー
【DELL】Studio XPS 8100 Part7【H57 Express】
【かっさん】加藤純一ID無しスレpart2973【GOLD EXPRESS】
【SEGA】SOUL REVERSE ソウルリバース part.16
【SEGA】SOUL REVERSE ソウルリバース part.18
【Legend】★★Lionel Messi Part2★★ 【メッシ】
【SEGA】ソウルリバース ゼロ:SOUL REVERSE ZERO Part.129【ソルゼロ】
【SEGA】ソウルリバース ゼロ:SOUL REVERSE ZERO Part.116【ソルゼロ】
非正規雇用の人達Part21
TF非正規アイテム専用スレッド PART77
TF非正規アイテム専用スレッド PART63
TF非正規アイテム専用スレッド PART59
TF非正規アイテム専用スレッド PART76
TF非正規アイテム専用スレッド PART72
週刊アスキー part37 【正規スレ】
【正規スレ】国家一般職 Part422【二次試験】
【赤い】 AnyDVD 正規キツネ Part29 【狐】
■■■レクサス LEXUS UX Part31 (正規) ■■■
【表現者たちへ】Canon EOS 20D Part49【必要十分】
AliExpress】偽ブランド情報【DHgate】 Part8
【乞食】Aliexpress ゲームリンク専用スレ Part.4
【乞食】Aliexpress ゲームリンク専用スレ Part.51
【乞食】Aliexpress ゲームリンク専用スレ Part.57
AliExpress ゲーム攻略・雑談スレ Part.8【ワッチョイ】
AliExpress ゲーム攻略・雑談スレ Part.12【ワッチョイ】
FREETEL Priori 3 LTE part16(Priori、Priori2含む)
【申請】Ingress ポータルリコン (OPR) Part.22【審査】
【SEGA】ソウルリバース ゼロ:SOUL REVERSE ZERO Part.69【ソルゼロ】
【SEGA】ソウルリバース ゼロ:SOUL REVERSE ZERO Part.122【ソルゼロ】
資格の勉強ばかりしているニート・非正規職員 Part2
【赤い】 AnyDVD 正規キツネ Part22 【狐】
昭和59年度 (1984.4-1985.5)生まれの非正規Part7
Tablacus Explorer [ 誑 ] Part7
SONY Xperia XZ Premium Part18
【ToS】Tree of Savior part1277
au Xperia Z Ultra SOL24 Part42
【ToS】Tree of Savior part1219
【ハンソル】Hundred Soul Part1
【ToS】Tree of Savior part1180
【ToS】Tree of Savior part1137
【ToS】Tree of Savior part1205
【ToS】Tree of Savior part1218
【iToS】Tree of Savior 国際鯖 Part8
【FANZA】宝石姫 Reincarnation Part325
【がんばれ】ingress山梨の隔離スレ Part.4
【Jailbreak】iOS 12.x 脱獄スレ Part5
【Jailbreak】iOS 12.x 脱獄スレ Part8
【RDR2】 Red Dead Redemption 2 Part2
docomo Xperia XZ Premium SO-04J Part30
docomo Xperia XZ Premium SO-04J Part32
docomo Xperia XZ Premium SO-04J Part49
docomo Xperia XZ Premium SO-04J Part54
【ToS】Tree of Savior part1316【Steam】
SONY Xperia XZ2 premium SO-04K SOV38 part20
【PS4】Red Dead Redemption 2(RDR2) Part49
LEGEND再び ☆☆ 柚希礼音(35) ☆☆ REON PartI
【PS4】Red Dead Redemption 2(RDR2) Part85
【PS4】Red Dead Redemption 2(RDR2) Part20
【オグレ】OGRE YOU ASSHOLE【オウガ】Part.16
【PS4】Red Dead Redemption 2(RDR2) Part29
【PS4】Red Dead Redemption 2(RDR2) Part17
SONY Xperia XZ Premium アクセサリースレPart3
【PC】RESIDENT EVIL 3 / BIOHAZARD RE:3 Part 5
04:58:57 up 51 days, 6:02, 2 users, load average: 8.86, 12.36, 19.47

in 1.5973041057587 sec @1.5973041057587@0b7 on 030518