◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:Regular Expression(正規表現) Part15 YouTube動画>7本 ->画像>12枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1568640311/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part14
http://2chb.net/r/tech/1489511075/ 次スレは
>>980 宜しく
天ぷら等
>>2 以降
スルーされにくい質問のテンプレと例 ●Regular Expressionの使用環境 Java1.5 ●検索か置換か? 検索 ●説明 各行の1番目のAまでを検索したい ●対象データ ABCA BCAA CABA ●希望する結果 ABCA ^ BCAA ^^^ CABA ^^ ※ ^ はアンダーラインだそうな ^^;
●Regular Expressionの使用環境 サクラエディタ bregoning.dll ver 3.06という記載があります ●検索か置換か? 置換 ●説明 うしろに数字を付けたい。 あ というのを /(^.*)/$1/ で置き換えると あ になります(変わらない)。 これを、あ→あ00にするために /(^.*)/$100/ とはできません。 $1等の直後に、数字を付け足すためにはどのように 表現したらよいか教えてください。 元の行の末尾に付け足すとは限らないので、 $1(実際はもっと多いのですが・・)の直後に数字を付け足す方法をお教えください。
>>7 ありがとうございます。
ヘルプを見るという基本がなってませんでした
もうしわけありません。
クロスワードの基本ルールと同様に各マス1文字だが、通常と異なり各ラインが単語になるとは限らない 縦のラインを横ラインをそれぞれ検索対象のテキストと見做して両方がマッチすればOK ちなみに1回で1ライン全てにマッチする必要は無くて複数回検索して全マスにマッチする形でも良いみたい
>>10 まず
EP|IP|EF
の列を埋めてみよう。
>>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;
的な考え方をしてたわ・・・
全制覇した。疲れた。本来はもっとのんびり楽しむものだよな。
アカウント持ってないから login はできないけど 自分が解いた結果はまだ見られるな。 クッキーを削除したら見られなくなるんだろうか。
>>16 なんじゃこりゃwww
本末転倒だけどこれ数独ソルバーみたいにコンピューターに解かせられんの?
テキストエディタで試したら全27ラインマッチする状態になってるのに正解にならんなあ
どうもブラウザのせいだったようで、同じ内容を普段使ってないChromeで試したら正解扱いになった、よかった 作った人は凄いけど、解くのは1個1個できるところから埋め、条件を少しずつ絞りこんで行けば案外見た目ほど難しくはない 正規表現の可変長の書式の影響でクロスワードよりピクロスを解く感覚に似てる気がするのでその辺やってた人はちょっと有利かも あと記憶力に余程の自身がなければ、ちょっと大きめに印刷して各マスに細かい条件を書きながらやったら大分楽になると思う
●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 よろしくお願いいたします。
3つ目の,以降から,field5までの間をキャプチャで良さそう。
>>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)を調整すれば実際のデータにも適用できると思います
質問を読んで直ぐにこれを書けるのなら速いけど もし自分だったらあれをこうしてこれをこうしてと考えて試してる 間にテキストエディタとエクセルを行ったり来たりしながら タブの挿入と置換と削除を繰り返した方が速いところが 悩ましいw
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
>>26 修正
tr ではなく、tr! で、直接レシーバー(文字列)を変更できる
>row[ 3 ] = row[ 3 ].tr( ",", "、" ) # 列4
row[ 3 ].tr!( ",", "、" ) # 列4
それ splice でできるんじゃね? と思ったのでやってみた。 perl -nF, -e 'splice( @F,3,0,join("、",splice( @F,3,@F-5+1))); print( join(",",@F));'
>>26 カンマでカラム分割してるからrow[3]にはカンマが含まれないよ
ARGF.each do |line|
line.match(/((?:.+?,){3})(.+)((?:,.+){1})/) do |match|
puts match[1] + match[2].gsub(",", "、") + match[3]
end
end
こういうのって力技で変換するよりも
CSV生成側でクウォートし直したほうがいいよね
手間をかけたくないなら、そんなフィールドは末尾に置くのが良い。 そうしておけば何を書こうと邪魔にならない。 いつかは手作業の限界を感じるかもしれないが、それを遅らせることはできる。
>>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
>>32 いやそりゃクウォートしてれば問題ないよ
a,b,c,あ,い,う,d
を
a,b,c,"あ,い,う",d
に
変換する処理が必要なわけで
そこができてないから困ってるんじゃないのかな
クォートしてなかったら、そもそも、CSV にならない! 列内に、カンマが含められないから、列数も変動する
バグのほとんどが設計段階で生じる、典型的な例かw バグを設計段階で修正せず、実装段階で修正しようとするから、 ますますダメになるという例w SE・上流工程が馬鹿だと、こういうのが多いw Ruby などで実装した事がないからだろうw ダメな事をやる香具師が、あまりにも多いw
なにこの人 要望・仕様を満たせないバグありのプログラムを書いておいて それを指摘されたら「設計が悪い」と逆ギレしだしたよ Ruby使う人ってこんなしょうもないおっさんに成り下がるのか
>>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フィールド」の内容がカンマだけの場合にも対応 (.*[^,]) → (.*)
●Regular Expressionの使用環境 サクラエディタ bregoning.dll ver 4.12 ●検索か置換か? 置換 ●説明 をふくむ行(複数)を削除 ●対象データ A.jpg B.jpg C.jpg ●希望する結果 A.jpg Bだけを削除するなら^.*B.*\nってわかるんですけど B、Cを削除する方法がわかりません 誰か教えてください よろしくお願いします
>>40 いまいちやりたいことがはっきりしないが、
Aのみ残したなら、^[^AA].*?jpg¥n
BCのみ消したいなら、^[BC].*?jpg¥n
Aのみ全角なのは故意なのか?
を含む行を削除
でググればすぐに見付かるんだが
https://yanohirota.com/regex-delete-row/ キーワードを含む行(複数指定) ^.*(キーワード1|キーワード2).*$(\r\n|\r|\n)?
●Regular Expressionの使用環境 Mery ●検索か置換か? 置換 ●説明 パターンにマッチする行までの全ての行をキャプチャしたい ●対象データ 20191001 吾輩は猫である 名前はまだ無い …… 20191002 親譲りの無鉄砲で 子供の頃から 損ばかりしている …… ●希望する結果 20191001[Tab]"吾輩は猫である 名前はまだ無い ……" [改行] 20191002[Tab]"親譲りの無鉄砲で 子供の頃から 損ばかりしている ……" 日付と本文が交互に現れるテキストを日付と本文とに分けてキャプチャして置換したいのですが、上手く行きません。 最短一致を使用すると本文が一行しかキャプチャできないし、最長一致ですと最後の日付までの全行がキャプチャされてしまいます。 どうかご教示下さい。
>43 検索 (^[0-9]{8})\n 置換 \n$1\t
Ruby では、 text = <<"EOT" 20191001 あ 20191002 い う EOT # キャプチャー部分の、#{ $1 } は、8桁の数字 p res = text.gsub( /^(\d{8})\n/ ) { "\n#{ $1 }\t" } print res 出力 [空行] 20191001[Tab]あ [空行] 20191002[Tab]い う
>>44 ご回答ありがとうございます。
すみません。本文部分を"で括りたくて、数字8桁に挟まれた部分にマッチさせたいのです。
>>46 CotEditorでドットが改行に一致する状態なら以下でできる
(^¥d{8})(.*(?=¥n¥d{8})|.*(?=$))
Meryは知らん
(^\d{8})\n((?~^\d{8}))$ \1\t"\2" 最後の行が改行されてると"がズレるからそこだけ手作業
>>43 ^([0-9]{8})\n((?:(?!\n[0-9]{8}\n)[\S\s])+)
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\Z) (?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\z) ↓ $1\t"$2"
>>50 negative lookaheadとか書きつつ全然negativeじゃなかったわ
皆様ありがとうございます 最短一致と先読みを組み合わせて (\d{8})((?:.*\n)*?)(?=\d{8}) のような感じでマッチしました 単に.*だけだと行末までで止まってしまうので明示的に.*\nの繰り返しと指定しないといけなかったようです
/(A|B*|C+|D?|E?|)+/ は /[A-E]*/ と同じなんだろうか。
PCRE2 Version 10.34 21-November-2019
https://www.pcre.org/ 今でもアクティブに更新してるのってPCREの他はre2と鬼車系くらいなのかな 昔はライブラリの話も結構してた気がするけど
テキストエディタで見えないけど何かがある状態 MacのBBEditだと逆さまの赤い「?」が表示される状態なんですけど こういうのを正規表現で捕まえる事って出来ないですか?
>>62 色々やってみたけど
非単語構成文字に含まれてしまい上手くこれだけ抽出出来ないです
一体こいつは何者なんだろう? もうちょい悩んでみます
そういうときはバイナリエディタで開いて該当部の文字コード引きなよ。
ウムラウトなどのアクセント付きアルファベットにのみ一致させる正規表現をお教えください。
正規表現だけではまだできないんじゃないかな? 一般的には各言語が持ってるUnicodeの正規化機能を使って検索対象を基底文字+結合文字の形に正規化してから、結合文字を検索する
日本語なら、NKF というライブラリがあるように、 ウムラウトなら、その国のライブラリがあるかも知れない 知らないけど まあ、日本人に聞いても、ムダだと思うw 使っている国の人に、聞いた方がよい
cpanライブラリの中に一般的な正規表現集めたものがあるから その中にあるかもね
あるいは文字コードで標準ラテンのz(U+007A)よりあとを全て拾うように範囲指定するとか。
>>66 数は知れてるんだから普通に[ÄäÏï …]ってやればいいんじゃね?
サクラエディタの正規表現ライブラリbregonig with Onigmoの場合、大文字小文字区別なしでßや\x{00DF}がssにヒットするので困る。
>>71 見た目が同じäでも文字コードの表現は複数ある
文字の種類も含めてこれで全部といえる集合を作れるならそれでいける
日本語で濁音が含まれる文字にのみ一致させる正規表現を求めてるのと似てる
●Regular Expressionの使用環境 鬼雲6.2.0 &Mery ●検索か置換か? 検索 ●説明 行中の1個目の=にだけマッチさせたい 意味合いとしては (?<=^[^=\n]+)= なんだけど >戻り読みの式は固定文字長でなければならない。 >しかし、最上位の選択子だけは異なった文字長が許される。 だそうで+はダメみたい (?<=^(?~=))= 戻り読みの中に非包含もダメだった (?<=^[^=\n]|^[^=\n]{2}|^[^=\n]{3}| .... |^[^=\n]{1000})= とかすれば無理矢理出来そうだけどもっとスマートな書き方無いかな?
>>77 ありがとう
速っ。数日悩んであれこれ試してたのが嘘みたいなあっさり回答w
\Kとか意味分かってなかったけどこうやって使うんですね
重ね重ねありがとうございました
>>75 それだとウムラウトついてないのも引っかかるよね
\K いいなそれと思ったけど自分の環境では使えなかった残念
>固定文字長で >最上位の選択子だけは異なった文字長 これはこういう意味かな (?<=^[^=\n]{1,1000})=
鬼車のは (?<=ab|cd) だけじゃなく (?<=ab|cde) みたいなのも可ってことだったと思う 戻り読みを本当に後戻りしながらマッチングしてる実装ってほとんどなくて 大抵は文字列を一旦n文字分巻き戻して先読み相当の処理をするって感じになってるんで パターンコンパイル時に「n文字分」が確定できない表現は弾かれる
グレップ坊や というソフト使ってますが 正規表現で、データだけ検索 データーを除外したい どいう表記になりますか?
データを表現する正規表現が基本 除外については反転オプションないの? 本家 grep には -v で反転する
データ(?!ー) データ(?=[^ー]) 否定先読みか先読みが使えるならこれで出来る 独自のものだと適切なエスケープが必要かも VB6ランタイム必要とあるからたぶんVBだろうけど
●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です
>>87 > うまくいかない
なぜどううまくいかないのかを書かないの?
何も削除されずに元のファイルがそのままです。 エラー表示等はないです。
^(.{2})(.{3}).(.*)$ $1/$2$3
sed -E "s/^(..)(...)\s(.*)/\1\/\2\3/" .\ファイル.txt
●Regular Expressionの使用環境 正規表現の本・テキストで疑問に思った部分ですので特に環境は無いです ●対象データ 太郎はテニス部のキャプテンです。 太郎はサッカー部のキャプテンです。 太郎は野球部のキャプテンです。 太郎はバスケ部のキャプテンです。 ●検索か置換か? 検索 ●希望する結果 太郎はテニス部のキャプテンです。 太郎はサッカー部のキャプテンです。 太郎は野球部のキャプテンです。 ●説明 通常の 太郎は(テニス|野球|サッカー)部のキャプテンです では無く バスケ という単語を使い正規表現を作りたいのです ()を使った場合(使わなくても バスケ を用いた方法であれば良い) の否定文・除くの書き方がわかりません ^ を使っってみましたが上手く行きませでした 太郎は(^バスケ)部のキャプテンです。 ・・ダメ 太郎は^(バスケ)部のキャプテンです。 ・・ダメ 太郎は(\^バスケ)部のキャプテンです。 ・・ダメ バスケ を使った場合どの様に記述すれば良いのでしょうか?
否定は、(?!文字列) でも、太郎は(?!バスケ)部の、とは書けないよ 「太郎は」に続く「バスケでない任意の1文字以上の文字列」部のキャプテンという風に考えてみてくれ
>>93 正規表現だけでは否定を完全実現できない。
だからこそ、例えばgrepには -vオプションがある。いずれのライブラリやアプリも正規表現とは別の方法で否定を実現している。
太郎は(?!バスケ).*部のキャプテンです。 太郎は(?!バスケ).* (?!.*バスケ)太郎は.*部のキャプテンです。 (?!.*バスケ)太郎.* (?!.*バスケ).*
太郎は(?!バスケ).*部のキャプテンです。
にて出来ましたが
(?!バスケ) の扱いを .* でさらに処理しなきゃいけないのは全く思いつかないです
今回のを参考に今後も学習してみます
皆様
>>94 -
>>97 ありがとうございました
^(?!.*バスケ)(?=.*キャプテン)(?=.*太郎).*
'あ'.match(/[あ゙い゙ゔえ゙お゙]/u) (環境依存文字ですが、[]の中身は濁点つきの「あいうえお」です) 'あ'は濁点なしなのでマッチさせたくないのですがしてしまいます これってマッチしないようにする方法はないですか? JavaScriptです
>>101 自己解決しました
'あ'.match(/\u3099/u) //マッチしない
'あ゙'.match(/\u3099/u) //マッチする
^(?!.*バスケ(?!ット(?!ボール(?!選手)))).* バスケ ←不一致 バスケット ←一致 バスケットボール ←不一致 バスケットボール選手 ←一致 太郎はバスケットボール選手としてバスケ部に入部している ←不一致 太郎はバスケットボール選手としてバスケット部に入部している ←一致
マッチしたカッコ内の文字列をを利用する方法ってどうやるんでしたか?
http://hogehoge.jp http:// (.*).jp
このアスタリスクの部分を利用するのはどうやるんでしたかね
t1ではないです
>>105 >>2 > スルーされにくい質問のテンプレと例
> ●Regular Expressionの使用環境
正規表現よりも、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 >>110 >>108 はHTMLをパースしたいんじゃなく
HTMLの一部を生成したいんじゃろ
>>108 .jpが末尾につく行がリンクだと仮定してjavascript
/^(.+\.jp)$/gm
上記の正規表現で
<a hef=“
http://$1 ”>
http://$1< ;/a>
正規表現のフラグのmで複数行対応、gで複数の結果で対応出来ん?
(https?://\S+) <a href=“\1”>\1</a>
1) (hoge) 2) (hoge, fuga) 3) (hoge, fuga, piyo) 2) のみにマッチする正規表現のご教示よろしくお願いいたします 鬼雲
hogeとfugaを後で使うと仮定して \((.+),(.+)\)
ID:bUEb5r3d 様 ありがとうございました。m(_ _)m 「\([^,]*,[^,]*?\)」で希望動作になりました
どういたしまして。 ちなみに+じゃなくて*にしてるのは (,) にも一致させたいという事? あと?は無くても動かん?
[^,]*だと改行と閉じ括弧を含んでしまい 次の行まで選択してしまうのでは?
確かにこんなデータも想定するとアウトやね ((hoge,huga)piyo) 改行はオプション次第だね
指定した2つの文字XYの間がn文字以下(0を含む)にマッチする検索方法教えてください マッチ例n=3 XY XaY XabcY NG XabcdY
●Regular Expressionの使用環境 実際に使う環境は不明ですが、まずはサクラエディタで試そうと思います。 ●検索か置換か? 検索。マッチ部分を抽出できる必要はなく、含むかだけわかれば良いです。 ●説明 文章(サクラは複数行NGとのことなので、今は1行)の中に「市」という文字が入っているかを判定したいです。 しかし、「横浜市」のような地名が入っているかを判定したいので、「巨大都市」「姉妹都市」のような特定のワードは排除したいです。 >>103 の前後が逆のパターンになると思うのですが、単純に「^(?!.*(?!(?!巨大都|姉妹都)市)).*」とすると何もマッチしなくなってしまいます。 (そもそも「^(?!.*(?!ット(?!ボール))).*」の時点で「バスケット」にマッチしません) ●対象データ・希望する結果 ここは巨大都市だ (マッチなし) ここは横浜市だ ^ ここは巨大都市の横浜市だ ^ >>126 (?<!巨大都|姉妹都)市
Negative Lookbehindを使う
https://regex101.com/r/kP6luP/1 >>127 できました、ありがとうございます
後読みというのもあるんですね
どなたか教えてください。0が含まれる行のみ/以降を削除したいです。 (処理前) 2/3004 67//1 503/11/4 4/6/978 (処理後) 2 67//1 503 4/6/978 実際の文字列は数字とは限りません。可能かわかりませんがどうぞお願いします。
>>129 使用環境も書きましょう。
プログラミング言語かテキストエディタかでも大分違ってきますし。
スルーされにくい質問のテンプレと例
●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
※ ^ はアンダーラインだそうな ^^;
>>131 すごい!完璧に希望どおりにできました!
アリガトウゴザイマス!!!
●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
>>133 正規表現の方言がマイナー過ぎて難しい
:^isDigit: はPerl5でいう [^0-9] と等価という理解で合ってる?
ファイル名の最後の数字部分だけ取りたいなら (\d+).jpg とかじゃ駄目なん?
>>133 そもそも :^isDigit: の前に .*は必要?
>>134 その辺は捨てます
拡張子直前の数字だけを連番扱いです
>>135 それでいいです
書き方が変わってますが考え方は一緒です
>>137 ないとマッチしませんでした
書き忘れましたが ファイル名だけでなくファイルパスを含む場合があります・・ ex. /a/b/c/d/_0000_1111_2222_3333.jpg 3333.jpgのようなパターンさえなければ対応できているのですが これが来た場合にうまくいきません
>>139 >>136 のだと
拡張子のピリオドがエスケープされてないから
(\d+)\.jpg
でキャプチャ箇所を抽出すればよいのでは?
>>140 (/a/b/c/d/_0000_1111_2222_)?3333.jpg
>>138 メソッドは何を使っているの
メソッドによって「文字列の先頭で一致する」とか
「文字列の任意の場所で一致する」とかあるでしょ
前者を使っているのでは?
後者なら
>>136 の類で上手く行くと思う
さもなくば ^(|.*:^isDigit:)(:isDigit:+)\.(:isAlphabetic:+)$ でどうかな
JavaScript なら、これで一致するので、 キャプチャー部分だけを取り出す var re = /(\d+)\.jpg/g;
文字列の先頭からしかマッチできないんなら .*(\d+).jpg でいいんじゃね ルールがローカルすぎてよくわからんが
>>133 >これだと3333.jpgなどのパターンに対応できない
ORでそのパターンをカバーしてやればいいよね
>>145 先頭からスキャンするメソッドしかないようです
試して見たところうまく行きそうなのでテストしています
あまり関係ないですがisDigitやisAlphabetic自体がメソッド名で
char.isDigit(); みたいに内部的に呼ばれています
>>147 それだと最長一致の関係で
3333のうち3だけ取り出されてしまいます
>>149 こちらもうまく行きそうです
後ほど結果ご報告致します
(.*[^\d])?(\d+)\.jpe?g \2
一通り検査して全てパスできました 皆様ありがとうございました それにしてもうまい方法があるものですね勉強になります・・
VSCode なら、Regex Previewer という拡張機能がある JavaScript, PHP の正規表現をテストできる
正規表現の段位、級位みたい試験があると転職に役立つかな 正規表現3段所持みたいな 試験問題はほとんどパズルだな 当方は頭悪いので、複数の単純な正規表現使用派
正規表現必須!てな現場もそうそう無いだろうし 使えて当たり前、だけど高度過ぎる常人に思い付けないようなものが必要になる場面もまず無いだろうし そうなったら出来る奴に丸投げすりゃいいし プログラム内なら全て正規表現任せにせずに前処理した方が良いケースも多々あるからそれ絡めてのスキルだと思うし 方言が多い事や解が複数あり得る事も試験化には問題 マークシート選択方式では引っ掛け問題ばかりになるだろうし何か違う気がする 資格化したところで精々、文系脳の奴がどれだけ論理思考が出来るか?の目安とか雑なIQ判定くらいにしか役立ちそうにない 義務教育内でこんなのあるよ程度に最低限くらいは教えておいて欲しいけど資格化までは疑問かな
>>156 君は正規表現の前に日本語の義務教育受けてこいw
俺もちゃんと何言ってるのか分かったし、特に読んでて疑問も覚えなかったね
難題を解決したらあいつスゲーなとなるけど なかなかその機会が訪れないよな
論文とかの文章ならどうかと思うけど こういう掲示板での改行の仕方とか含めての表現では 別に問題ないよなと思った
義務教育やり直せレベルにはみえない 雑文としては意味が通じないような文では無いだろう 157の日本語力が低杉なんじゃ?
>>161 パズルとしてはいいけど業務でやられると保守できなくなるしな
>>157 フルボッコw
最初の方で「~し」を多用してるのがちょいウザいけど内容的にはまあ頷けるわな
>>161 そいつじゃないとできないっていう状況を会社は嫌がるからね
いつやめるかもわからんし
資産がゴミ化してしまうのを恐れる
そもそも問題が複雑だから複雑な正規表現になってしまうのでは? そういう場合はそいつじゃないとできないという状況になってしまうこともありうる
うん、そういう場合もあると思うけど 多くの人はそもそも正規表現で解決出来るかもという発想がなくて 手間と時間をかけて頑張るか、その仕事を断る そんな場合が多い気がする
まあbison/flex使って片付けてたらそれはやめてくれとも言われたこともあるしな 引き継げないだろと
>>168 一例として…
頑張れば1つにまとめられる
でも場合分けすればコードは長くなるし性能も劣化するけどわかりやすく書ける
って言うケースはそれなりにあると思うよ
頑張りすぎちゃって誰もメンテできないような手に負えないSQLってたまに出くわすけど、 それと同じような要領で頑張りすぎちゃって誰もメンテできないような正規表現が出てきたら・・・・ 自分だったらSQLのときよりもさらに全力で逃げ出すかなあ 正規表現ってただでさえ魔法のような暗号文化しがちだし(後で読解に困ることも多いし) 仕様を簡潔明瞭にコードに落とし込むスキルがないダメプログラマが 力技で正規表現ゴリゴリ書くことを考えるとかなりの恐怖 エスアイアーの現場ならむしろ安全のため正規表現全面禁止にしておくほうがマシなんじゃなかろうか
三項演算子でも同じ問題あるね 可読性と簡潔性は必ずしも両立しない
仕様がわかっていれば ちゃんとしたドキュメントが残っていれば何とでもなる 暗号をわかりやすいプログラムに変換可能だから とりあえず動いているので触りたくないというのどうにもならない それはそのプログラムが近い将来破綻することを意味する
>>172 正規表現は仕様の分かるテストケース一式を必ず用意させれば問題ない
つまり難しい正規表現を使いこなす能力よりも
もれなくテストケースを書ける能力のほうが大事
>>175 あーあーそれはなんか分かる・しっくり来るな。完全同意だわ。
>>175 でもそれって正規表現使っているか否かに関わらず本来なされているべきことだよね
正規表現とか特定の機能を使ってるところだけ特別扱いしてドキュメントやテスト仕様を残させるとか
絶対サボる人が出てきそう
でもってサボったところに限って誰も直せないようなクソコードと化すパターン
>>177 仕様の分かるテストケースってのはテストコードのことね
正規表現は作る時に必ずマッチする例とマッチしない例を書いて確認するでしょ?
それを仕様の分かるテストコードにしてセットで扱えるようにしておくってこと
コードレビュー時も正規表現だけ見てレビューしても効果薄いから
テストコードとセットでレビューする
>でもそれって正規表現使っているか否かに関わらず本来なされているべきことだよね
これはそうでもないよ
複雑なSQLの場合は仕様の分かるテストコードを一式用意するのは結構難しくて
ある範囲を超えると手間に見合わないから仕様書とSQL自体のレビューだったり手動テストで補完する
正規表現は純粋関数として扱えるのでその辺の難しさがない
人っていついなくなるかわからないからね 事故だったり勝手な理由で辞めたり
●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です。(できる限りシンプルな書式でお示しください) サンプルお示しいただけたら、あとはググりながら自分で調べます。 ググったのですが、サンプルになるいい感じのシンプルな書式が見当たらず どうにもうまく正規表現を作れずにおります。何卒宜しくお願い致します。
カレンダーは西向く侍があるから正規表現単独では無理では……
>>181 意味がよくわからんが、
任意の日付から14日前(後?)を抜き出すってことなら
正規表現よりはscriptの領域だろ。
>>182 大体でもできないでしょうか。
と書こうと思ったときに思いつきました。。。
実行速度に問題が出るかもしれませんが、
3月15日または、3月16日または、3月17日または・・・4月15日。
って力技でやってみます・・・。
もし、ほかにも「こういう方法があるよ」って素敵なアイデアお持ちのかた
いらっしゃいましたら、ぜひレスをください。宜しくお願い致します。
>>184 そもそも4/15から14日前で何で3月が入るんだよ。
間飛んでる可能性があるって事?
だとすればなおさら正規表現向きではない。
>>185 すみません、そこは書き間違えです。
awkってコマンドでできそうなので
もう少し調べてみます。
スレ汚し失礼いたしました。
>>186 3/15〜4/15限定での力技なら
2020(¥-03¥-(1[5-9]|2[0-9]|3[0-1])|¥-04¥-(0[1-9]|1[0-5]))
>>183 ありがとうございます。
scriptというのが大きなヒントになり解決に至りました。
結果的にはこれでできました。
cat 対象ログファイル | awk '"2020-04-01" <= $2 && $2 < "2020-04-02"'
性器表現ばっかりにとらわれてました・・
ありがとうございます。
何を言いたいのかエスパーでもわからん オーダーはもっと正確に
>>181 ちょっとだけややこしい検索にはawkがおすすめ
●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 よろしくお願いいたします。
〇使用した正規表現(置換) .*((([0-9]{1,3}\.){3})[0-9]{1,3}).* $1 が抜けてました
今の奴を少し手直しして .*\b(([0-9]{1,3}\.){3}[0-9]{1,3}).* とか .* (([0-9]{1,3}\.){3}[0-9]{1,3}).* 必ずfrom〜timeに挟まれるなら .*from ([\d.]*) time.* とか
>>193 とても意味がわかって書いているとは思えないが。
ログがそのパターンだけならこれでいけるでしょ。
¥d+¥.¥d+¥.¥d+¥.¥d+
頭が192.168.だけならそれで絞ってもいいし。
>>194 両方ばっちりうまくいきました。
ありがとうございます。
\dとか\bとかいろいろあるんですね。
\t位しか知りませんでした。
ありがとうございます。
推奨はしないけど、元の奴で、.*に?を追加して .*?((([0-9]{1,3}\.){3})[0-9]{1,3}).*
ランダムな文字列によるコピペ荒らしで 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,} こんな風にすると新たな種類の文字がキャプチャされていくように思えますが 既に登場した文字が再び登場するとマッチしなくなります
例を挙げると ↓慮↓鸞↑↓↓→慮↑←←↑→↑鸞↑→←→艪慮慮↑鸞鸞慮慮艪艪鸞→→↑慮↓→↓↓↑ 慮鸞鸞艪艪→慮鸞艪鸞鸞↑慮艪慮艪慮↑←慮↑↑慮↑←艪→←鸞↑↓↑↑↓艪↓鸞慮→→ →艪←艪←↓↓←艪←↑→←←←鸞↓↓艪↑鸞←鸞←↓慮鸞←慮←慮↓慮慮慮慮↓↑艪 こんな感じの荒らしです 文字は毎回ランダムで変わります 登場する文字の種類が少ないという点でマッチさせたいと思っています
(.)\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]* こんな感じ?
>>201 試したらそれだとほぼ全ての文章にも当てはまるみたいです
^(.)+(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)* 文字クラス中で後方参照使えないなら否定先読みで代替
訂正 試してなかった ^(.)\1*(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)*
無理だと思ったけどなんかできたわ 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}
>>203-205 ありがとうございます!
後方参照難しいですね…
言ってる通りの条件でやると滅茶苦茶誤爆して使い物にならんと思う 例が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)*$ 【改行】とその前の改行を削除
別の判定要件にしないと誤爆頻発しそう... 例えば「特定コード範囲の文字が連続n回出現でNG」とかじゃダメなの?
>>208 確率的に連続しないケースが結構出ちゃいますよね
文字→文字または文字パターン、でどうだろう そのボットの仕様を把握してないし実際のレスも見たことないのでなんとも言えないけど、文字種の制約以外に傾向を見いだせないってこと?
>>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,}
で完璧に対応出来てる
17文字もあるのに文字種が8種以内って 自然言語としては有り得ないわけですよ そのエントロピー的な性質をターゲットにしてる つまり完全ランダムじゃなくて電光掲示板的に嫌がらせメッセージを目立たせたいという意図を持ってるから可能になる手法
こうかはばつぐんだ! 必死にNG逃れのためのスクリプト書いたのに全て通用しなくて発狂して逃げたww
結果として片棒担がされてた訳か
http://2chb.net/r/poverty/1589560323/870 870 番組の途中ですがアフィサイトへの転載は禁止です (ワッチョイW 2bde-sAUE) 2020/05/17(日) 00:30:59.00 ID:LtSh5oo60
再度書き込みなっちまったけど、レスすんなよ
グズ正規表現野郎。
お前が煽ったせいで、さらにサキオタアンチがめんどくさくなった。
皆、ひっそり、IDやワッチョイと、少しの正規表現でNGしてた。
それらができない5chブラウザとかあるのに。
自分だけ調子に乗るなよクズ。
>>215 それ荒らし本人が正規表現で完封されるのが悔しくて書いたやつだぞ
そうなのか でもはたから見てると一緒だと思うよ 荒らし構うのはただの荒らしだよ
>>217 この荒らしは誰からも無視されてるのに何年も続けてる奴だからな
自分がターゲットにされて遊ばれて悔しいという体験は初めてだろうな
放置すれば荒らしが消えると思うのは間違い
キチガイは何年でも休まずに荒らし続ける
しかも手動で
そのキチガイの世界を壊してあげる作戦
自粛警察みたいな奴だな 正義とか妄信しない方が良いぞ
アホを悔しがらせて頭の体操になるなんて最高やん こんな快感なこと他にある?
機械学習で正規表現を獲得するみたいなの出来ないですかね
*でも+でもどちらでもよいという場面では*にするのが慣例でしょうか?それとも文字通りどちらでもいいのかな?
このスレに来る奴って論理的思考をする人達だと思ってたけど、 慣例とか持ち出すような奴も来るんだな 意味が有って違うSyntaxなんだから適切な方を使え
どっちでもいいってどういう場合だ どっちかになるだろ
例えば対象が1回以上の繰り返しだとします 0回以上には1回以上が含まれているのだから、どちらかが適切であるという積極的な理由が見つかりません
一つも無くていいってのと一つは必ず無いといけないってのは両立する場面は無い
「1回以上」ならつべこべ言わずに"+"だな 「0回は外したい」という意味を含むのであれば "*"は仕様から外れる 個人的には"*"はできるだけ使わない
1回以上であることが分かっているのであれば0回の可能性がないことを示しておけるというのが合理的理由だよ。 *でマッチさせられるとしても後からソース見て混乱するだけだ。慣例といえば慣例だが機能すればいいというものでもない。
>>227 読む人(未来の自分含む)のことを考えれば、可能な限り対象を絞り込んだ方が(設計意図が読み取りやすくて)よい
A+とAA*の効率化の話かと思った AA*の方が最初のAで最適化される分だけ速いとかなんとか
>>232 オートマトンを組むので速度は変わらないと思うが
上を下としたいのですが、2回に分けることは可能ですが、1回でやれますでしょうか?スラッシュが含まれる場合、そこをエスケープしたいのです
scriptタグ貼ると怒られますので、画像です(´・ω・`)、、、
>>234 正規表現: (<([^>]+)>[^<]*<)(/\2>) 置換 : "$1\$3" 環境によっては 置換: "$1\\$3" としないとダメなこともあり
>>235 は.NET
>>236 はperl
sed だと
置換: "\1\\\3"
<スクリプト>(ここが変化)</スクリプト> って感じでスクリプトとスクリプトの間が変化するだけじゃない?
<script>([^\b]*?)</script> "<script>\1<\\/script>"
https://ideone.com/jkDxgX ごめんなさい
scriptタグだけではないです
行頭と行末に"を挿入し、スラッシュをコメントアウトしたいのです、、、(´・ω・`)
>>242 タグ内にタグ(正確には < )が入らないなら
>>235 さんので出来るよ
> 行頭と行末に"を挿入し
タグの間に改行が入ることは無いの?タグは関係なしに文字通りに行頭と行末?
環境も分からないし
>>2 のテンプレ通りに条件を例示して
鬼雲 (?<!")(<([^>\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> タグの外側直近に"があるものは否定(先|戻り)読みで"を見ているので無理
●Regular Expressionの使用環境
mery2.6.7です
●検索か置換か?
置き換えしたいです
●説明
先頭と行頭に"を追加し、/をエスケープしたいです
●対象データ
https://ideone.com/mNblKp >>243 了解です
直しました
複数回に分けてやるのが普通なんでしょうか?
>>245 これダブルクォーテーションもエスケープしなきゃいけないんじゃないの?
>>246 すみません、勘違いしていました
エスケープ対象は"で、/はエスケープ対象ではないです。
vscodeのスニペットに登録する際に、"をエスケープしないといけないんです
これ、なにげに面倒ですね
>>247 HTMLが一般的ではないんだけど
通常はタグと閉じタグとが別の行になることが多いし
あるいは全てが一行というものもあるんだけど
こんな特殊なものにだけ対応でいいのか?
また各タグ毎に""だとダメなのか?
こうすれば行が違ってても大丈夫となるけど
【例】 <h1>h1</h1> → "<h1>"h1"</h1>"
自分macなのでmery使えないの試せない javascriptのマクロが使えるみたいじゃん 正規表現だけだと厳しいかも var code =`<!DOCTYPE html> 〜省略〜 </html>` var code = code.replace(/(<.*?>)\n/g, '"$1"\n').replace(/\//g, '\\\/') console.log(code) javascriptの置き換え部分だけ書くと上のでいけるはず meryのマクロの体裁に整えればこれでいけると思う 環境によって\はバックスラッシュだし$もバックスラッシュです
var2回もいらんし。 ¥nは$にしないとそのスクリプト自体動作失敗してるでしょ。
>¥nは$にしないと へえそうなんだ macだとそのままいけるんだよね var 2回いらねはさすがに難癖だね
>>248 vscodeのスニペット登録はそういうルールのようです
やはり複数回に分けるのが利口でしょうか
プログラムだって何回かに処理を分けますもんね
必須ではないですが、知識として知りたいなあと思った次第です
>>251 無駄にプライドが高そうなタイプだなw
varの意味がわかってれば2回はつけんよ。
それだと最終行に¥nがなかったら処理されない。
https://ideone.com/QOYdYP ひょっとするけど タグ関係なく単に各行を""で括るってだけなんじゃ?
スニペット登録でググってみたら jsonで記述と書かれてる やっぱりタグは無関係で 行の前後を""で括るだけだし、カンマ区切りも要る "Inner": { "prefix": "in", "body": [ "<section id=\"$1\">", "\t<div class=\"inner\">", "\t\t$2", "\t</div><!-- .inner -->", "</section>" ], },
そもそもキー入力の短縮だし、基本はテンプレート登録だ "Print to console": { "prefix": "log", "body": [ "console.log('$1');", "$2" ], "description": "Log output to console" あと、スニペット登録入力用のvscode拡張機能もあるようだ
#一行目 AAAランダム文字列1AAAランダム文字列2BBBランダム文字列3BBBランダム文字列4CCC #二行目 AAAランダム文字列5BBB このような文章があって AAAランダム文字列2BBB だけを1回の処理で抽出することは可能ですかね? AAA〜CCCで挟まれ、かつAAA〜BBBの真の最短マッチというのでしょうか 二行目は抽出したくないです AAA((?!AAA).)*CCC ↓ AAA((?!AAA|BBB).)*BBB と2回の処理ではできたのですがどうも悔しいです
>>260 AAA.*(AAA.*?BBB).*CCC
ランダム文字列の最初(最後)の文字がA(B)だった時は?
>>177 画像を右クリック、キャッシュ処理-NGファイル
リンクからでも出来るが再度取得しに行ってしまうのが無駄になるかも
>>261 早速ありがとうございます
ですがそのやり方ですと自分が確認した限り最初のAAA〜CCCまで全て抽出されてしまうようです
言い忘れてしまい申し訳ないのですがperl正規表現を使いgrepで抽出しようとしています
>>262 すいませんわかりやすくAAAと表記していますが実際はhttpsから始まるURLでBBBも複雑な固定文字列ですのでまず連続することはないと思います
あったとしてもそれは仕方ないのでここでは考えないものとしていただければ…
>>265 それは正規表現の問題じゃなくgrepの使い方の問題で
キャプチャグループを取り出せてないだけだと思う
pcregrep -o1 'AAA.*?(AAA.*?BBB).*CCC' <input>
とか
grep -oP 'AAA.*?¥K(AAA.*?BBB)(?=.*?CCC)' <input>
とか工夫して
>>266 失礼しました
grepの使い方が悪かったのですね
そちらの方法で無事抽出できました
ありがとうございました
マークダウンのマッチのさせ方について この2つのうち、上だけをマッチさせたいです #半角スペースh1 #半角スペース半角スペース半角スペースh1 しかし ^# .*$ だと、両方マッチします。半角スペースが1つの場合のみマッチさせられるでしょうか
ありがとうございます # h の部分だけマッチします 一文字の繰り返しの部分は、どう指定してるんでしょうか?
だとスペースがマッチしません ありがとうございます
chmateから改行コードが見えるレスのNGワードはどうやって登録すればいいですか?
わかる方教えてください 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
> 大量にあるファイルを > 今後も処理の必要がある スクリプトでやるものじゃね? 以下で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
>>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箇所)
ただし誤爆は起きるかもしれない
なお誤爆の可能性は、 1) ファイル先頭に、 6/28 xxx で始まっていた場合 2) 2020/ 6/28/ 9 xxx とか引き続き/ 9とかがある場合 3)ファイル末尾で、2020/ 6/28(改行コードなし)で終わっている場合は変換されない まあ改良すれば3)は問題なくなるけど
2)は間違い 2020/ 6/ 8/ 9 とかの場合に訂正
あ、1)も間違ってる 6/ 8 xxxに訂正(空白なしで数字1文字で始まる場合)
秀丸なら普通にマクロでプログラム書いた方が楽じゃない?
1)は、\G(?!^)というふうに先頭の場合を除けばいける 残りの2)3)は工夫次第
難しく考えなくても置換対象以外に"/ "が無いなら /[ ] /0 で一発
これでできないかい? FIND:(?<=¥d{4}/[ ¥d]¥d/) (¥d)|(?<=¥d{4}/) (¥d)(?=/) REP:0$1$2
こっちのほうが確実か。 FIND:(?<=¥d{4}/) (¥d)(?=/[ ¥d]¥d)|(?<=¥d{4}/[ ¥d]¥d/) (¥d) REP:0$1$2
>>287 それ試した?それが可能な処理系って何?
選択子で両方を対応するなら
>>279 の用に\G使わないとスペースが両方にある場合に失敗するぞ
277 です
皆さんありがとうございます!
レベルが低くて理解できないのもありますが、勉強のためにしっかり精査してみます
>>285 まさにそれですわ
てゆーか別に正規表現使わなくても実現できるという罠
勉強になりました m(_ _)m
改めましてありがとうございました。
>>289 で?質問者はなんて書いている?
pythonとかCotEditorとか書いてあるかい?
質問者の環境で失敗する式を書くならせめて
pythonでならこれで出来る、くらい書けやks
>>291 質問者が文句を言うならともかく、なんでお前が切れてるんだよ。
自分が正解書いてるのに余計なこと書くなって言いたいのか?www
カルシウムとっとけよ
>>290 なんとなくそうじゃないかなーと思った
俺も昔同じ罠にハマった事あるからw
解決して何より
>>292 あぁ?理由なら書いてんだろ
おまえのような底意地の悪いゴミカスが気に食わないからじゃ
さっさ死ね
アプリからファイアウォールにまで使われる正規表現を標的にした「ReDoS攻撃」とは?
https://gigazine.net/news/20200701-redos-cheet-sheet/ ネット中は正規表現を使わないではだめなのか
でもブラウザも中で使っているだろうし
正規表現についてですが、このhtmlの置き換えは一発でできますか?
この前からいろいろ試してるんですが、、
https://ideone.com/vpxoNS 行頭と行末にダブルクォーテーションをつけ、urlの部分はエスケープしています。
vscodeでスニペットを登録する際に、このようにダブルクオーテーションを使用する必要があるのです。
(^<.*?)(".*?)(".*>)$ "$1¥¥$2¥¥$3" ↑vscode内の検索置換 それと全く同じパターンであれば可能だが、dqが複数出てくる場合はできない。 他のパターンも考えたら、 1.dqのみエスケープ、 2.行頭行末にdqをつける の2アクションにするか、vscodeでそれ用のjsでも書いて処理するか。 スニペット登録したいものをまとめて書き出しておいて2アクションで処理しても大して手間は変わらんだろ。
Ruby で、" を、\" に置換してから、 冒頭・末尾に、" を追加する str = '"ja"' str.gsub!( '"', '\"' ) puts '"' + str + '"' #=> "\"ja\""
VScodeのプラグインにSnippet Generatorてのがあるみたいだがそれじゃダメなん?
漏れなら、Ruby, PowerShell で、 クリップボード経由で変換するスクリプトを書いて、 ダブルクリックで起動できるように、起動部分をVBS で書くかな?
正規表現よりもJSON.strinfigy()を使ったほうが簡単 スニペット用のJSONを出力すればいいだけだからJSでもRubyでも好きなの使えばいい
JavaScript const kaoru = '薫' '[薫子]'.match(`[${kaoru}]`) '[薫子]'.match(`\[${kaoru}\]`) '[薫子]'.match(new RegExp(`[${kaoru}]`)) '[薫子]'.match(new RegExp(`\[${kaoru}\]`)) 全てマッチしてしまうようですが、マッチさせたくありません [ や ] そのものを文字として扱って判定するにはmatchの引数をどうすればよいでしょうか
>>306 それはJSの質問やろ
RegExpコンストラクターを使って2回エスケープ
教えてください。基本的な質問で恐縮です。 20200706T030000Z SUMMARY:打合せ LOCATION:中野 DTEND:20200706T043000Z から、 $1 0300 $2 打合せ $3 中野 $4 0430 を抜き出すにはどのようにすればよいでしょうか。
^\d{8}T(\d{4}).*+\nSUMMARY:(.*+)\nLOCATION:(.*+)\nDTEND:\d{8}T(\d{4})
今まで何となくで使ってきたけどキャプチャの変数って式に対し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 中野___ どの環境でもこういう仕様なの?
>>310 深く考えてなかったがそういうもんだと思ってた
キャプチャグループが増殖するとは考えもしなかった
もしキャプチャグループが増えるとして 与えられた文字列によって増える順番が異なってくることが考えられるしね
キャプチャしたけりゃ繰り返しや\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を参照
有効にしていない理由は、どの程度役に立つかはっきりしないため
●Regular Expressionの使用環境 サクラエディタ ●検索か置換か? 置き換え ●説明 3の倍数行あるテキストを、3行ごとに1行にまとめたい ●対象データ ※対象データは、必ず半角英数字です。 e A8 11A9 c 2 LB5 3 d 8X5 ●希望する結果 e A8 11A9 c 2 LB5 3 d 8X5 よろしくお願いいたします。
>>314 サクラエディタはよく知らないけど
一般的な正規表現なら /(.*?)¥n(.*?)¥n(.*?¥n)/g を "$1 $2 $3”で置換すればいいと思う
(?:^.*+|\G.*+[\r\n]+.*+)\K[\r\n]+(.*+)[\r\n]+ _\1_ "_" は半角sp 最終行末尾に改行が無くても可
[\r\n]+ は空行がある場合にズレるから使ってる改行文字に直して CRLFなら\r\n
質問です。デリミタが基本的に「/」が選ばれるのなぜですか?慣例だから?
>>318 ここに来るような人は論理的思考をすると思ってたんだけど、
慣例とか持ち出す奴まで来るのな
|や@なんかと比べれば分かるだろ
●Regular Expressionの使用環境 Ruby2.5 ●検索か置換か? 置換 ●説明 スペースを削除したい。ただしダブルクオーテーション内は処理対象から除外 ●対象データ ABC, DE F,"G HI" ●希望する結果 ABC,DEF,"G HI" ダブルクオーテーション内以外に対して処理するって結構ありそうだけど見つからないような・・
そのフォーマット通りなのか あるいは任意でダブルクォーテーションの処理をするのかで変わってくるな
(?>".*?"|[^"スペース]++)*+\Kスペース を削除
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 で対応しています。
/<img[^>]+test\.jpg[^>]+>/g JavaScript では、これで両方に一致する。 [^>]+ で、> 以外の文字を、1文字以上。 g で、すべての箇所に一致する test.jpg だと、. は任意の1文字を表すから、意味が異なる。 ドットという文字に一致させるには、\. とエスケープが必要
aタグ含めてマッチさせたいんでね? それでも単純に|で繋げば済む話だと思うけど
あってもなくてもいいものは末尾に?を付ければいいよ ((<a [^>]++>)?(?:<img[^>]+test\.jpg[^>]+>)(</a>)?)
>>9 これ面白いな。プログラミング授業に採用すべき。
>>326 ありがとうございます!
[^>]+ って発想がありませんでした・・。
>>328 ありがとうございます。
++ のところは一つですよね?
こんな感じをベースにやってみようと思います。
>>325 こういうの正規表現じゃなくcss selectorやxpath使った方が簡単だよ
> リンクに囲まれた test.jpg または、画像だけののどちらかがあって > /(^.*)(<a href=".*?>\n*<img .*?test.jpg.*?>\n*<\/a>)(.*$)/s > /(^.*)(<img .*?test.jpg.*?>)(.*$)/s ^(?=.*test\.jpg).++$ こういう事では?
>>331 ありがとうございます。
たしかにその2つのほうがphpソースとしては分かりやすくなりそうですね。
>>329 前半はいいけど、後半がきつい
総当たりで力技ぐらいしか思いつかんわ・・・
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プロパティに不随する値を消したいのです(´・ω・`)
〜; か、;〜; の、〜の中に、border という文字列が、あれば良いのか?
どういうことですか? borderプロパティとその値を削除したい感じです border(プロパティ):red 1px solid(値);
あとborder-color:〜とかも消えちゃうね
あとプロパティじゃなくて値やコメントにborderって入る可能性が無いかな? \bborder\s*:[^;}\r\n]++;? ぐらいがいいのではないかな これでもxx-borderとかプロパティがあったり?(無いだろうけど) 、また値を改行されて書かれたりしたらダメなんだが
処理系がかかれてないので++がダメだったら+に代えるように
ありがとうございます できましたが、解説サイトありませんか? 記号がヒットしないもんで、、、
(自分の投稿分だけ)
[]は[]内に挙げた任意の1文字
+は直前の文字だけで構成される文字列,*は0文字以上、+は1文字以上
つまり[a-z]+はa-zの範囲の文字だけで構成される長さ1以上の任意の文字列
?は直前の文字(列)がないものも対象(あってもなくてもいいということになる)
[]内先頭の^は否定
つまり[^;]は;以外の任意の文字
まとめると:の前は
border, border-width等borderファミリーまとめて対象にしている
:の後は:直後〜最初の;までが対象
>>344 では:以前にスペースがあると対象にならない
丁寧にありがとうございます。難しいですね。 border(-[a-z]+)?:の部分はなぜグループ化する必要があるんでしょうか?
>>348 それは
>>347 の
> まとめると:の前は
> border, border-width等borderファミリーまとめて対象にしている
border:を対象にするために
border(-[a-z]+)?:というborder《【頭に-付いたa-z任意文字列1文字以上】があってもなくても》:指定になってる
>>347 のいってる空白云々はborder :のようにrと:の間に空白あるとマッチしないという意
元cssの書き方次第で漏れるからあまり向いてるとは言えない気がする
空白を気にして\s?や[:blank:]?を間に入れ込むのも精神的にツラい
その場限りならいいけど
borderとborder-styleなどを対象にする場合、括弧を使うことで不足分を補うというイメージでしょうか? borderとborder-styleという指定になってるんですね
>>350 border(-[a-z]+)?: の ? をどこに効かせるか
border-([a-z]+)?: だと - が必須になる(- に ?が効かない)ので border: にマッチしない(border-abcdef: にはマッチする)
正規表現 入門 でググってそれ見ながら ↑のパズルで遊んでみたら?
border-radiusも忘れないであげてください...
説明が下手だと良く言われるでしょ? 笑えるくらいグダグダなのなw
Mery(鬼雲の仕様?)なら border\s*(-[a-z]+)?:[^;]+; で:前の改行や空白文字も対象にしてくれるけど エンジンによっては対象にならないし 可能なパターン全てに対応させようと思ったら正規表現メモになってしまう(相当面倒だということ) どーでもいいけど [-a-z]か(-[a-z]+)*にした方が良かったか border-なんとか-かんとか みたいなのもある?
最小一致のやり方を教えて下さい
<h1>aaa</h1><h1>aaa</h1>
最初のh1要素だけ取り出すことはできないでしょうか?
<h1>(*?)</h1>
これではだめです。
>>351 ありがとう
手を動かします
<h1>[^>]+h1> [^>]+ は、> 以外の文字が、1文字以上
<h1>(?>.*?</h1>) <h1>(?>(?s).*?</h1>) <h1>(?~</h1>)</h1> <h1><a id="abc">abc</a> </h1>
>>357 ,358,359
全部だめでした
ちなみにmeryです
いつもいい忘れます
ごめんなさい
>>357 これでいけました
しかし順番にマッチするんですね
順番に置き換えていくならいいですが、全て置き換えを行う場合
>>357 だと出来ないですね
削除 ^.*?\K<h1>.*?</h1>(.*) \1 ABCに置換 ABC\1
●Regular Expressionの使用環境 サクラエディタ ●検索か置換か? 置換 ●説明 空白を除去するのに\sで検索してますが アルファベットの文字間では空白を残したい ●対象データ ジャッキー チェン:Jackie Chan ●希望する結果 ジャッキーチェン:Jackie Chan
スペースの直前直後が[a-zA-Z]ならマッチせず それ以外ならマッチするという正規表現でいいのかな? もうちょっと仕様を詰めたほうがいい気がする John Paul IIの2つ目のスペースは削除? George W. Bushの2つ目のスペースは削除?
(?<=[^A-Za-z])\s(?=[^A-Za-z])|(?<=[^A-Za-z])\s(?=[A-Za-z])|(?<=[A-Za-z])\s(?=[^A-Za-z])
>>369 スペースの前後ともアルファベットならマッチせず、それ以外ならマッチするです。
その他の条件はありません。ちなみに行頭と行末のスペースにはマッチさせたいです。
>>370 ありがとうございます。行頭が残るようですが希望のことができました。
>>371 ^\s++|\s++$|(?<=[^A-Za-z])\s(?=[^A-Za-z])|(?<=[^A-Za-z])\s(?=[A-Za-z])|(?<=[A-Za-z])\s(?=[^A-Za-z])
ORでは1つで良いような (?<![a-zA-Z])¥s|¥s(?![a-zA-Z])
ゼロ個でも \s(?!(?<=[A-Za-z].)(?=[A-Za-z]))
>>374 へぇーー
速度的にも有利っぽいしこのパターン覚えとくわ
\s(?!(?<=[A-Za-z].)[A-Za-z]) 肯定先読み要らないよね。ある方が見やすい気がしなくもないけど
374の「選択子がゼロ個」と「集合の否定」の話じゃなければアサーションを入れ子にする必要もないのですよ \s(?>(?![A-Za-z])|(?<![A-Za-z].))
●使用環境
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-->
〜
●希望する結果
あいうえお
>>379 RegEx Labちょうど使ってたので
>>379 $が行末にマッチしてないだけなら、単に改行\Rに置き換えてみてもいいし正規表現の頭におまじない(?m)を足してみてもいい
置換じゃなくて検索なら
(?<=名前:<[^>]{0,99}?>).*?(?=</a>)|(?<=名前:)(?!<).*+
>>380 >>381 こんなに色々なやり方があるんですね……勉強になります。
無事検索できるようになり本当に助かりました。
ありがとうございました!
grepのperl正規表現オプションを使ってURLのホスト名を抽出したいです
http://2chb.net/r/tech/1568640311/l50 http://www.google.co.jp/ このスレだったら”mevius”
googleなら”www”
「
https:// 」or「
http:// 」と「.」に挟まれた文字列の最短一致でできそうなのですがなぜか上手くいきません
1文字に挟まれたパターンは検索して出てくるのですが、複数文字に挟まれたパターンはあまり出てこなくて、この際はっきりしたいので「〇〇〇と△△△に挟まれた文字列の中身のみを最短一致で抽出」パターンも教えてください
>>383 /https?:\/\/([^./]+)/
grepもperlも知らないけどこんな感じでどうや
△△△が一文字なら△を含まない文字の連続で取るといいと思う
複数文字の場合は知らない
>>384 早速ありがとうございます
ですがそのやり方ですとgrepでは抽出できませんでした
△△△は複数の種類の文字ですね言葉足らずでした
正しくは「ABC」と「DEF」に挟まれた文字みたいなものですね
$ cat input.txt
http://2chb.net/r/tech/1568640311/l50 http://www.google.co.jp/ $ grep -Po '(?<=:\/\/).+?(?=\.)' input.txt
mevius
www
>>386 できなかったか、すまん
これは自分には無理だわ
知識もないのにでしゃばるべきじゃなかったな
pcregrepならキャプチャグループを番号指定して出力可能 $ pcregrep -o1 ':\/\/(.+?)\.' input.txt
>>388 いえいえ
>>387 >>389 おー、これでできました
pcregrepのやり方もありがとうございます
Javaで setMethod(); getMethod(); setBake(); みたいなgetter,setterは検出したくなく、 Methoda(); Methodb(); bake(); みたいなset, getで始まっていない()付きの文字列を含む 行を正規表現一行で検出するするのはどうしたらいいのですか?
^(?=.*?\b(?!set|get)[A-Za-z]++\(\);).* ^(?=.*\b(?!set|get)[A-Za-z]+\(\);).*
申し訳ありません。 Methoda() { Methodb(){ c = z.Methoda().Methodb(a,b) みたいな行は検索の対象にいれたいのですが よろしくお願いします。
もうちょい目的と仕様をはっきりさせたほうがいいんじゃない? get/setではじまってない()付きの文字列を含む行なら問題ないけど get/setではじまってないメソッド定義やメソッド呼び出しをもれなく抽出したいということなら 正規表現だときつい気がする 後者ならコードをパースして使ってるメソッド一覧を出力するようなツールを探したほうがいいかも
^(?=.*?\b(?!set|get)[A-Za-z]++\(\)).*
(?<=(?:\n|^|\.))(?<!set|get)[a-zA-Z]+\(
引数が無い and setter, getterではないメソッドを含んでいる行です ひょっとして正規表現内では表現できないかもしれません。 文脈自由レベルでしょうか?
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>
>>397 いやもう
\b(?!set|get)\w+\(\)
でいいんでしょ
JavaScript では、これで複数行マッチ(g)できた /<a[^>]+>.*言語.*<\/a>/g <a で始まって、> 以外の文字が、1文字以上続いて、> 言語の前後に、.* <\/a> で終わる 他には、Ruby でスクレイピングすれば?
>>400 おかしいな、それでうまくいかなかったのに
と思ったら入ってくるHTMLソースに改行がないようだ
</a>のあとに改行入れるとうまくいくように見えるけど、HTMLソースがおかしくなる
正規表現以前の問題だったわ
別に抜き出すだけなら、 一旦、</a> の後ろに、改行を追加してから、正規表現を使えば? それか、HTML をコピーしてから、やるとか
"/(<a(?>[^>]+)>(?>[^<]*?言語[^<]*)<\/a>)(?:<a(?![^<]*言語)(?>[^<]+)<\/a>)*/$1/g"
"/<a(?![^<]*言語)(?>[^<]+)<\/a>//g"
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)
以下略
冗談抜きでそんな無駄な努力するよりxpathとかそっち系おすすめするぞ
単純なスクレイピングはcurl+pupが楽
$ curl -s
https://mevius.5ch.net/tech/subback.html | pup '#trad > a' text{} | grep 言語 | head -5
>>405 のopen-uri を、下のように、外部コマンドのcurl にも出来るけど、
普通は、わざわざ外部コマンドを呼ばない
url = "http〜"
doc = Nokogiri::HTML( open( url ) )
html = `curl http〜`
doc = Nokogiri::HTML( html )
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
httpを含まない行の/を年に置き換えたい
●対象データ
https://5ch.net/ 2020/9
●希望する結果
https://5ch.net/ 2020年9
こんなもんでもよろしいでしょうか。 あんまりうまくないと思いますが。 よろしくお願いいたします。 置換前 ^(?!http)([0-9]{4})(/) 置換後 $1年
>>410 ありがとうございます。うまくいきました。
>>403 >>404 なんかすげえな
>>402 ,405-408
いろいろやり方あるんだね、サンクス
●Regular Expressionの使用環境 Linux awkとか、sed。 目的が置換なので、コマンドはなんでも構いません。 ●検索か置換か? 置換 ●説明 = 任意の文字列 : を置き換えたい ※前後に半角スペースあり。 ●対象データ hogeghoe = type: furagura mogemoge = syntax: mojamoja ●希望する結果 hogeghoe type: furagura mogemoge syntax: mojamoja ※スペースで置き換えた例 よろしくお願いいたします。
>>413 取り消します。精査する前に書き込んでおり
間違いがございました。すいません。
●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。
●検索か置換か?
置換
●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。
●対象データ
hogeghoe = type: fuga:fuga
mogemoge = syntax: moja:moja
※置換目的のコロンの後ろにさらにコロンがある場合があります。
=から「次の最初のコロン」までが置換対象です。
●希望する結果
hogeghoe fuga:fuga
mogemoge moja:moja
※スペースで置き換えた例
よろしくお願いいたします。
>>414 sed 's/ =[^:]*://g'
>>415 ありがとうございます。理解を超えた書き方なので
そのまま利用いたします・・・
>>416 そんなに難解ではないぞ
: でない文字が0個以上続いて
その後に一文字だけ : があるパターンを
すべてスペースに書き換えるというだけの意味
●使用環境: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
とりあえず鬼雲なら \d\d?:\d\d\n(([^\n]+\n)+) で\1なり$1なりで取り出せるけど どー使うのかしらねーけど改行に続く時刻消せばいいんじゃねw
\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 → ★
>>419 >>420 ありがとうございます!
試してみたところ、Meryでは問題なく動作しているようでしたがRegEx Labでは動作しませんでした…
> 時間の直前の空行
>テキスト終端(例だとテキスト1\n 456.png\n)の改行文字
どちらも含めずに取得したいです。
(?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)
これでよかったっぽい (?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)
>>423 どうだろうね、基本的な構造は
>>418 と同じだけど
データの改行コードがどうなっているのか謎だったのでとりあえず全種類対応しようと欲張ったらこんなことに
\n に置き換えるとこう
(?m)(?<=^\d{1,2}:\d{2}\n)^[\s\S]*?(?=\n+\d{1,2}:\d{2}\n|\n*\z)
長い短いではなく、試行回数が多い記述(行ったり戻ったり何度もやり直すもの)が遅い そういうのは逆に記述を詳しくしたりして長くするほうが速い
>>424 問題なく動作しました、ありがとうございます!
本当に助かりました!
>>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
\d{1,2}なら\d\d? \d{2}なら\d\d の方が短く済むから2桁以下なら無駄
それは見易さと短さのどちらを優先するかによる 短いだけが正義では無い 2つ程度で見易いもクソも…と思うかも知れないが慣れない者にとっては数字の方が見易いらしい 俺は断然\d\d?派だが でもこれは(?:\r?\n|\r)→(?:\r\n?|\n) 同じ意味だが \r \r\n \n をどう表すか?ってことだから後者のように前方を固定した方が分かり易いと思う RtoLが関係してたりするのだろうか?
今どき\rだけとか見ないし\r?\nで良くね? 駄目?
●Regular Expressionの使用環境 c# .net Framework 4.8 ●検索か置換か? 検索 ●説明 「,」区切りの2桁の文字列を全て取得したい(Split関数でなく)。 ●対象データ 04,05,28 ●希望する結果 04 05 28 ●補足 現在使っている正規表現は右です (\d{2})(?:,(\d{2}))* これを使うと、対象となる2桁の数字のうち、最初と最後のものしか取得できません 対象データが4個以上でも同様です
以前
>>409 で質問し解答を頂いた者です。
内容は同じなんですが、この置換を他のパターンでも応用したく再度質問致します。
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
◆を含まない行の▲を■に置き換えたい
◆▲■は任意の文字列で、文字数も決まっていません。
●対象データ
Sst68▲h4◆
DRkPP2▲V
NN▲◆9K12XV▲
G▲RL88▲A7
●希望する結果
Sst68▲h4◆
DRkPP2■V
NN▲◆9K12XV▲
G■RL88■A7
どうぞよろしくお願いいたします。
>>437 返信ありがと
だけど上手く取得できないです
対象データが 04,05,28 のときにマッチしたグループを全部出力すると
04,
04
となります
>>438 MatchじゃなくてMatches使ってね
よく考えたら単に¥d{2}でもよくない?
>>436 ちっとも極端じゃないよ
対象テキストが長くて酷いと数sと数msとか何千倍、何万倍も差がつく
もっと極端なことにもなって、だんまり(終わらない)状態になることもある
あ、そのリンク先の表現でのことじゃなく一般的な話としてのことなので、念のため
>>439 おかげさまで出来ました。ありがとうございます
数年前に某技術系Q&Aサイト全体が30分以上応答不能になったことがあったけど、アレもbacktrack絡みの正規表現処理(に高負荷をもたらす投稿)がトリガーだったはず
Jane系のNGEx,ReplaceStr.txtの正規表現で酷いものが投稿されることがある よく吟味しないと 対象スレ(ちょっと長いスレとか)によってはだんまりとか発生する
>>435 一旦、grep で、◆ を含まない行だけを抽出してから、処理すれば?
grep -v "◆" ファイル名
バックトラックは対象が簡単に一致するものしか無いのであればそれほど気を使わなくても良いが 一致しないものがある場合 一致しない に至るまでに全パターンを試すから その挙動を必要最小限に抑えたものとそうでないものとでの試行数は桁違い 対象が長くなれば数倍どころでは済まない 大抵の場合、人が確認する際のロジックを再現するのが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 もっと軽い >>445 単なるテキストならいいのですが、用途としては
リネーマーソフトReNamerやAdvanced Renamerなどで
バッチ処理にも使いたいので。
>>435 (?:^(?!.*◆)|\G(?!\A))(.*?)▲ → $1■
>>448 出来ました!素晴らしいです!マジ感謝です!ありがとうございました。
一文字だけで改行するのを NGにするには どうしたらいい?
oniguruma6.9.6 Windows10のVS2019で64bit版だとtestc.exeが無言で終了する、32bitだと正常。 Winodws7でVS2015U3だと64bitでも32bitでも正常に動作する。 これ、以前からWindows64bitが鬼門だなあ
●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 書き込む前にたくさんググりましたが、ダメでした
>>453 俺のところじゃ、そのままでも正常だけどなあ(win7だからか? PS ver.5.1)
その3行だけじゃあ表示も出力もされないので
$file_contents
を最後に追加した
その入力ってJane系のiniファイル(SJIS)だよね?
ファイルに出力もして確認してみた
(デフォではUnicode16になっちゃうのでout-fileでencoding指定)
Windows 10、PSVersion 5.1 では、 input という名前が、ダメ!
>>456-458 おっしゃる通りに変数inputの名前を別の変数名にしたら出来ました
inputは予約語みたいなものだったのね
ありがとう
VSCode を使っていれば、白色になる・注意されるから、おかしいとすぐに分かる まあ、echo などのエイリアスも、白くなるけど
質問 abc を a,b,c に一発で変換する正規表現を教えてください!
461じゃないけど、知らなかった。 行頭じゃない&行末じゃない だけ言えば字間全てに入れてくれるんだ。
●Regular Expressionの使用環境 Perl5 ●検索か置換か? 検索 ●説明 文字列中のX,YY,ZZZのどれかが最初にあるまでのX,YY,ZZZを含む抽出 ●対象データ ABXCDXEFYYGH ABYCZZZDXEFYYGH ABCDXXGHZZ ●希望する結果 ABX ABYCZZZ ABCDX お願いします
>>466 ($out) = ($in =~ /(.*?(?:X|YY|ZZZ))/)
>>466 試してないけど、
\A.*?(X|YY|ZZZ)(?=(X|YY|ZZZ))
>>467-468 ありがとうございます。
最初のでできました。
ublacklistでPinterestをブロックする正規表現教えて下さい
行末以外の改行を任意の一文字(今回はアットマーク)に置換したいのですが可能でしょうか? 改行コードは、crもlfもcrlfも混じってるものとしてお願いしたいです。
>>471 行末の改行と行末でない改行を区別する方法がわからぬ
CSVみたいな感じ?
初学者なのでうまく伝わるか心配ですが、 固定長で末尾に改行が入っているレコードファイルを扱っています その中で、末尾だけでなくレコード中にも改行コードが含まれるようなデータがあり、それを置換したいといった具合です。 UNIX上での話なので、Perlやsedで置換できればと思います。 よろしくお願いいたします。
sedはデフォルト行ベースなので改行コードを全部置換すればいい
/[\r\n]++(?!$)/@/g こんな感じじゃね?分からんけど
固定長ごとに出てくる改行以外の改行ってことじゃね 改行含めて80文字固定長なら80文字目や160文字目以外の37文字目や53文字目に出てくる改行
あーすまんそういうことか それだと固定長単位に読み取って置換と出力のループかな while read -N10 line || [ "$line" ]; do echo "$line" | tr -d '¥r¥n' echo done < input.txt
やりたいことは、
>>477 さんの仰る通りです。
少ない情報の中、皆さん色々とありがとうございます。
明日以降試してみます、本当にありがとうございます。
改行コードは、cr・lf・crlf の3種類あるのか? 固定長の末尾の改行の後には、何が入っている? ヌル文字か? 例えば、100バイトの固定長で、内容が80バイトなら、 残りの20バイトには、何が入っている? それとも、内容の80バイトの部分だけが、渡ってくるのか?
CR なんとかReturn LF LineFeed CRLF なんとかReturnLineFeed
echo -en "abcde a\ncde a\rcde a\r\nde abcdef a\ncdef a\nc" | sed -re ':b;y/\r\n/@@/;/.{5}/!{N;bb};'
>>471 CRLFは@2個に置換でいいんだよね?
CRLFを@1個に置換したら固定長ファイルとして
ファイル構造がおかしくなるわけだし
先日質問させていただいた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 と言った具合に、改行を消してから固定長に区切って再度改行付与という形でうまくいきました! 皆さんに教えてもらった方法とは少し異なりますが、ここで質問しなければ検索ワードすら導き出せませんでした。 皆様には感謝してもしきれません。 ありがとうございました。
[]で囲まれた単語は/\[.+\]+/gで見つかるけど 文中に複数[]で囲まれた範囲があるとうまくいかない '['以降で一番近い']'にマッチさせたいんだがどうやるか教えて
英数字7桁[0-9a-zA-Z]の文字列から(改行を経て)先程とは異なる英数字7桁の文字列まで最短一致させる正規表現を書きたいのですがわかりません… 一つ目の7桁の英数字は変数fistに入ってます new Reg(first +"(.*\n)*?"+ここから先がわかりません どなたかよろしくお願いしますm(_ _)m
最短一致ということは行当たりが[0-9a-zA-Z]{7}ではなく別の文字列も含んでいそうな つまり「0123abc\ndef4567」だけではなく「あいう0123abc\ndef4567かきく」もあるとか 見本出した方がいいのではないかな
>>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"だけを除外する方法がわからず困ってます。
>>494 訂正 「大文字と数字だけの7桁に設定変更させてください」って文言が抜けてました
>>493 すいません、その後の調整方法がわからないんです...
日本語がおかしくなってました 01ABC23〜01DEF23と切り抜きたいのですが、 first = "01ABC23"と入っているので、firstという変数を使いつつ[0-9A-Z]{7}から"01ABC23"だけを除外する方法がわからず困ってます。
>>496 "(?!" + first + ")[0-9A-Z]{7}"
>>497 ありがとうございますm(_ _)m
↓だと最短一致しないのですが、真ん中がおかしいのでしょうか?
let reg = new RegExp(first+"(.*\n)*?"+"(?!"+first+")[0-9A-Z]{7}");
改行を含めた最短一致は([\s\S]*?)か(.*\n)*?でできていたのですが、何故か最短にならず困ってます
>>498 真ん中とは+で繋げた"(.*\n)*?"の部分のことです
日本語すら怪しくてすみません
>>498 自己解決しました
スレ汚しすみませんでした
答えてくださった方々ありがとうございました
[正規表現の[表現力[は]ネストに]勝てない] ※Perlの拡張とかは除く
繰り返しの中で使う時、時間のかかる正規表現を避けたいが、結局試すのが一番 if x=="abc" と if x=~/^abc$/ の比較など(簡単すぎる例) 重要なシステム内で複雑な表現を使う場合テストも重要だが、 どうしてもおかしくなったら調べる式になってしまう
お願いします ●Regular Expressionの使用環境 VBScript ●検索か置換か? 置換 ●説明 [hoge]をブラケットごと消したい [[hoge]]の場合は残したい ●対象データ abc[hoge]def ghi[[hoge]]jkl ●希望する結果 abcdef ghi[[hoge]]jkl ^^^^^^^ 否定戻り読み否定先読みで試してみたのですが、ブラケット2回の場合にマッチせずブラケット1回の場合にのみマッチさせる方法が分かりませんでした よろしくお願いします
>>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つ以上ある場合はどうするか?
すぐ思いつく方法としては、変換をループさせて、文字列に変化がなければ終わりとか
(¥[hoge¥])(?!¥])|[^¥[](¥[hoge¥])
https://regex101.com/r/xhea5T/1 ([^\[])\[hoge\]([^\]]) $1$2 (^|[^\[])\[hoge\]([^\]]|$) $1$2
>>504 -
>>508 ありがとうございます。
やってみます。
※間はタブです ●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 というデータに置き換えたいです。 よろしくお願いいたします。
>>514 説明の部分に誤りがありました。
●説明
(ABC|JKLHI7)を反転させたい
でなく
(ABC|JKL|HI7)を反転させたい
でした。
区切りは全角空白なのかい? まあこんなのでどう? (ABC|JKL|HI7)|[0-9A-Z]*→$1
>>516 ありがとうございます。
その発想まったくありませんでした。
ほしいものカッコで包んで|要らないもので置き換え
御見それしました。
ありがとうございます。
XABCXのようなものまでABCにしたいなら、末尾を+?に変えた方がいいかも
面白いなあ 逆に正規言語じゃない言語ってどんなのか気になる
文脈も先読み後読みrematch駆使すれば取れそうに思うけど、本来どこまでやっていいんだっけ 理論とか分からん
正規表現で記述可能な文字列の集合を指して正規言語という が、その意味で使われたのかは定かでない
取り敢えずその言語がn要素の有限集合ならstr1|str2|...|strn で表現できるのでは 文字列の長さを制限して、有限の文字集合なら すげーつまらないけど
無作為な文字列から、特定の言語に属する部分列を検出しろ、って問題にどれだけ簡潔に答えられるかってことだよな どう計ったものか
AIに正規表現を設計させたらどんなものになるのだろう
●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/ > "▼ここをアクセス.*(http.*\n)+?" python分からんけど "▼ここをアクセス.*?(http.*?\n)"
自己解決 "▼ここをアクセス.+?(http.+?)\n" でいいみたい
正規表現ってパズルとしては面白いけど
https://oraclesqlpuzzle.ninja-web.net/regex/index.html 可読性に問題あるんじゃね?
もっとマシな別の表記方法が必要じゃないか?
理解の過程で可読性に問題があるのではと疑問を抱き、 別の表記法の必要性を考え、 そのあと別の表記を実際に考えるところまでやると、 正規表現考えたケン・トンプソンすげーなってなる
>>532 > もっとマシな別の表記方法が必要じゃないか?
定期的にそう言うのが話題になるけどなかなかいい記法が無いんだよね
abc+
程度の簡単な奴と
^((?!aaa).)*((?=aaa)a((?!aaa).)*){3,5}((?!aaa).)*$
みたいなパット見よく分からん奴を1つの記法で簡単に見易くするのはなかなか難しい
やるとしたらアスキー文字以外の文字や記号を加えてもうちょっと役割を分散させると、機能を保持しつつ見やすくはなるが、そうすると今度はラテン文字圏の人が「自分が解らないものは悪」でいかに不要かを全力で説き始めると思う。
ASCII外の文字使うと入力コストが高くなるじゃん
?とか^とか二つの意味を持つのは何とかしてほしかったよな まあ分かるからいいんだけど
可読性を犠牲にして短く書けるのが正規表現 正規表現と同じことを可読性の高い表現で記述しようとすればなにかと長くなる ただある一定以上複雑な正規表現は普通のプログラミング言語で書き直したほうが可読性も保守性も高い
普通のプログラミング言語で正規表現ライブラリ使ってます
>>541 改行してコメント書くのは Perl の正規表現でもできたりする
>>541 その例にある(?<url>.*?)みたいな名前付きキャプチャも
可読性を上げられる数少ない要素だと思うけど
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))*$
>>545 ^(?:CABC?|ABC(?:AB)?)+$
でよくない?
それで同じ結果になるな regex 101 でやると
正規表現には「必ず」コメントが欲しいな できれば例も 典型例と境界例も
お願いします ●Regular Expressionの使用環境 JavaScript ●検索か置換か? 置換 ●説明 数字の文字列の間の1個以上の空白や改行を カンマで置換して繋げたい 33034640, 33034640, 21703214 ●対象データ 33034640 30203225 21703214
前後の数字チェック入り(区切りに\t,\fを除く) (JavaScriptって言ってもWSH(JScript)や古いとダメ) text.replace(/(?<=\d)[ \r\n]+(?=\d)/,", ")
text.replace(/(?<=\d)[ \r\n]+(?=\d)/g,", ")
>>550 それすると文頭や文末にあるスペースにもカンマがついて変になっちゃいます。
>>553 iPadのtextwellっていうアプリでやってるんですが・・・何故か動かないです
>>554 うーんなんだかなぁって感じだけど
look-behindが使えない環境ならキャプチャして上書きすればいいよ
https://regex101.com/r/ttVIeE/1 文頭,文末のスペース,改行を残す必要がないなら先にtrimしちゃえば良いのでは str.trim().replace(/\s+/gm, ',')
浮動小数点数の仮数部の正規表現がたとえば
https://qiita.com/hitsumabushi845/items/1b1a4921d515f662b416 を見ると
([0-9]+(\.[0-9]*)?|\.[0-9]+)
とかなり煩雑な感じなんですが、これを[0-9]+と\.?のインターリービングとして表記できればより簡潔になるはずなのに、なぜ正規表現にインターリービングがないのか、ご存知の方いらっしゃいませんか?
>>559 どういう意味?
[0-9.]+
っていうことか?
12.34.56
こういうものも拾うことになるけど
0-9が1回以上、.が1回以下現れるパターンを簡潔に書ければいいんだよね
>>559 0.123とかだけでなく.123みたいな表記も含めてるから煩雑に見えるだけでしょ
例えばpythonだと、 \d と書くと、 [0-9] と同じ意味になるんだが、その程度の省略ができるだけでは不満?
まず\dと[0-9]は一致しないケースがあるからダメでしょ 単なるバイトシーケンスとして扱っているときは \d == [0-9] だけど、 Unicodeの文字列として扱っているときはUnicodeのNdカテゴリに一致するかを見るので \dが全角の「0」に一致したりする Pythonもこういう仕様持ってた気がするけどちょっと最近触ってないから怪しい
([0-9]+(\.[0-9]*)?|\.[0-9]+)
なんかほかのものもマッチする
0.
0.0.0
https://regex101.com/r/MK7ZcW/ \dより\wで嵌ることが絶対多い(Unicodeの場合)
動きそうで動かないのは、\s\Sかな 改行かなにかで引っ掛からなくて困る事がある
>>567 0. にマッチするのは仕様通り
0.0.0 にマッチしてるのはグローバルフラグを付けるてるから 0.0 と .0 にマッチしてる
外せばマッチしないよ
>>571 .0にマッチするのは正しいんじゃないの?
要らないなら[0-9]+(\.[0-9]*)?で済むでしょ
数値として正しくないものの一部にマッチするのがいやなんだろ そりゃ前後の条件を指定してないからマッチするのは当然なんだから (?<![0-9.])と(?![0-9.])を前後につけりゃ弾けるよ
>>573 そういう話ではない
>>559 のリンク先の正規表現から浮動小数点数の指数部である
末尾の([eE][+-]?[0-9]+)?を除いてるからおかしいだけ
そしてリンク先によると.123は意図的に含めてる
>>572 .0 にマッチするのは正しいよ
0.0.0 にマッチするのがおかしいって話ね
マッチしない行を正規表現で抽出したいとき、 必ず、^(?!.*残したい文字).*、この書き方になってしまいます、 必ず^(?!.*と).*で残したい文字を包むという書き方です。 ほかの書き方があれば教えてください。 例えば、以下のようなログファイルでerrだけ残したい場合は ^(?!.*err).* と書いてerrを残します [日付] warn メッセージ [日付] info メッセージ [日付] err メッセージ [日付] info メッセージ 特段、これ以外の書き方が出来ず困ったという例も無いのですが、 ほかの表現を(あれば)知ることで、もっと知識を増やせるのではないとおもいお伺いします よろしくお願いいたします。
>>567 のリンク先を確認したが
([0-9]+(\.[0-9]*)?|\.[0-9]+) が
0.0.0 の全体にマッチしているわけではない
>>576 >例えば、以下のようなログファイルでerrだけ残したい場合は
in-placeで置換するより、残したいものを抽出して新しいファイルを作成したほうがよくないか?
用途によっては日付とログレベルを指定してログファイルに直接クエリを投げてもいい
>>578 >>579 すいません、めっちゃ肝心なことが抜けてました。
使用している環境は主にサクラエディタです。
>>576 (.*err.*)|.* → $1
https://regex101.com/r/5BF9AH/1 それか鬼雲の非包含オペレータで ^(?~err)$
>>580 余計なお世話なんだろうけどログファイルをわざわざエディタで開いて
マッチしない行を正規表現で置換して保存するのは無駄じゃないのって話
↓例えばgrepならこれでよくて指定も簡単だし自動化もしやすい
$ grep 'err' all.log > err.log
マッチしない行を正規表現を使いそうな例として
たまたま思いついただけならならいいんだけど
そもそもサクラエディタにはマッチしない行を抽出する機能あるからあまり真剣に考えたことない
ログの加工をエディタでやろうとするのは筋が悪いわな
加工というか、ログは必要な部分だけ抽出して見たいという需要はある
たまにトラブルシューティングとかで検索する程度ならLog Parserみたいなやつでそれなりに捗るよ
検索はリニアなので量が増えると遅いけどgrepに比べれば条件指定がしやすい
https://www.microsoft.com/en-us/download/details.aspx?id=24659 速度を求めるならBigQueryとかの検索/分析系のDBに突っ込む
>>580 サクラエディタ(bregonig.dll 4.10以降)使ってるなら
>>581 も書いてるけど非包含オペレーターが使えます
鬼雲およびbregonig.dllの作者さん(
@k-takata)自身がQiitaに使い方とかも載せてます
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd regexエンジンって皆さんどういう基準で選んでますか? ちょつとググるとcommon lispのcl-ppcreがダントツというベンチが出てきますが本当でしょうか?(このスレで言及が見当たらないもので…) perl風なのがちょっと気になりますが
特に制限なきゃ俺の採用基準は ・使おうとする言語で楽に使える奴 だな あとダントツの基準や何を対象にするかは人によって違うから君の考えるダントツを説明しないと回答しようがないと思うぞ
ユースケースで速度は変わるからそれだけじゃなんとも言えないよね NGフィルターみたいなものを高速にしたい場合に言語標準以外で考えるなら re2かhyperscanを候補にするかな
>>591-593 言葉足らずでしたごめん、線形にコードした化学式から部分構造マッチで設計に活かそうかと(古典的だけど)
chemspider.com等から100GB(100万エントリー)のテキストにまとめたが、重複や興味あるデータ以外はawk/sedでメモリに載せずに10GBまでは落とせるかも
コマンドライン引数で正規表現文字列を取り、そのままパイプで渡せる言語(cl、python等)なら速ければ何でもいいかなと
有名なperl/grepもパイプから読むけど、検索効率のためになんかキャッシュしてるようで、すぐメモリが膨らんでクラッシュする
あんまり後処理できないけど、sedのg/re/pはスケーラブルみたい g/re/commandのcommandでちょっと実験する限り、command中でmatch情報が使われてなければ保持しないのかな? 保持するmatch情報を指定出来き、match情報を得るたびに外部ファイルへ追記できる処理系が必要なのだろうか
パイプ自体キューだからメモリ膨らむって理解してるんだけど違うのかな
>>596 メモリに載らないのはパイプ、みたいにバカの一つ覚えしてるんですけど、落とし穴あったりするんですかね?
バッファリングモードには一応気をつけてるつもりですが、詰まらないようにflushを書き加えて再コンパイルしたり
さすがにインタプリタまでは手を入れませんが…
パイプ避けるとなると、
ファイルを100くらいに細かく割り、ループ内で各ファイルを順にメモリマップ、regex掛けて(マッチ情報、ファイル名、行番号)をdbmsに格納
目ぼしいマッチ情報をクエリで拾いながら、(ファイル名、行番号)でシークしてマッチ部分に処理を適用&db書き戻し
って感じになりますかね?
>>597 プロセスの使用メモリ見ながらバッファリングは調整してますが、regex処理系のメモリ使用量がI/Oの収支と合ってないのでキャッシュだと思います
いや合ってるのかな…シェルの知識が乏しいので
基本はスループット最大化を目指してエンジンとパイプ前後のバッファリングモードを調整で合ってますよね?
linux/bashだと改行待ちで詰まりやすいのでstdbufが効くならそれで、効かないなら強制フラッシュ
win/pwsh6&7のパイプラインは逆にバッファリング殆ど貯めないようで、pythonだとio.Streamでかなり改善しました
>>600 詳しく!
regex highwayあたりでググってもノイズだらけです
正規表現が向いてる用途かどうか微妙だなぁ
少ないデータ量で目的にあったライブラリを使ってみて性能の最適化はそれ次第だな
https://www.rdkit.org/docs_jp/Supplementary_Text_jp.html#jp-notes-6 データの中身と検索用途にあったデータベースに入れて
速度は並列度を上げるほうが楽でメンテもしやすくて速度も出やすいような
>>602 RDkitもちろん使ってるよー
SMILESの検索性上げたのがInChIで、その辺扱ったり、代表的な特徴量を生成するライブラリは沢山あるんだけど、もうやり尽くされた感じで
既存のデータが正規表現で扱う想定のフォーマットだから、まずは正規表現で引っ掛けて独自フォーマットに変換、という感じです
あと、勝手にオンラインから拾って来てくれたり便利なんだけど、10GB単位のリクエスト送りまくるとアク禁食らいそうだから、こっそりゴッソリ落としてきたw
PowerShellの正規表現がちゃんとコンパイルできる事や、パイプの属性が細かく指定できてかなり速い事に気付いた、灯台下暗し
ちょっとスレチぎみですまなかった
目処が付いたら効率的な正規表現とかまた相談に来ます
正規表現を考えた人にノーベル賞を授与すべきと思うが まだ生きているのか、何賞がいいのかなどよくわからない
正規表現を考えたのはケン・トンプソンではないみたいだけど
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??じゃあ時系列自体は最初の認識であってるのかな
UNIXツールに導入したのと正規表現を考案したのとは全然別のことだよね
>>604 は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?
別に正規表現である意義もそんなにないと思うし、どうでもいいのでは?
>>609 少なくとも
>>604 ではunixツールなんて一言も言ってないけど?
なんかデムパ受信しちゃう系の人なのかな?
論理とか言うなら
>>609 はなぜ
>
>>604 は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?
なんて言い出したのかを説明すべきだわね
609は、『604は「実装した人に賞を」とは言ってないじゃん(あくまで考案した人に賞を)』と言ってるにすぎん
言ってもないことで絡まれる604が不憫だわ 基地害に絡まれるってこういうことなだな...
604 「正規表現を考えた人にノーベル賞を授与すべき」 605「正規表現考えたのはケン・トンプソン」 (ケン・トンプソンはコンピュータ科学分野のノーベル賞と言われるチューリング賞を受賞済み) 607 「正規表現を考えたのはケン・トンプソンではない」 608 「Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違い」 609 「UNIXツールに導入したのと正規表現を考案したのとは全然別」 この流れで下の文の意味が分からないなら小学校からやり直したほうがいい 「604は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?」
絡まれてるのは604ではなく609 ってとこまで読んだ
>>617 もうそういうレスしか返せないなら黙ってたら?
自分も辛いだろw
>>618 >608 「Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違い」
608 「Wikipedia見た限りでは、UNIXツールに導入したのはケン・トンプソンで間違いない」
>>618 お前はごたくを言う前に
>>604 が言ってもないunixツールの話をなぜ
>>609 が言い出したのかちゃんと説明してみろよ
「604は言ってないぞ」と609が指摘しただけ その609になぜ食いつくんだよ
そんなに感情的になる要素見当たらないんだけど何に反応しちゃったのか?
>>624 > 「604は正規表現をUNIXツールに導入した人にノーベル賞授与すべきだと言ってるのかな?」
↓
> 「604は言ってないぞ」と609が指摘しただけ
って解釈しろと?
そもそもunixツールとか言ってるのは
>>608 だけで言ってないと指摘するなら
>>605-607 も含めろよ
発言者の意図したものとか行間を読むとかできないで、その表面しか見ないのはアスペの特徴とか
誰でも ⇒ ID:vSOTAguS のみ まあこの後に単発が来るのかもしれないけどw
>>626 ケントンプソンじゃないと指摘されたのがよほど悔しかったんだろ
>>608 の言い訳がましい文章に悔しさがにじみ出てる
609の意図を理解できない読者がいる以上、「誰でも」という認識は誤解と思う
「〜だと言ってるのかな?」 これは (実際には言ってやしないだろ?)と言う言葉が省略されてる というか省略するのが普通で通常なら十分に読み取れるはず
もうええやん 609の文章を正しく読み取る能力の無い奴にそもそもこの板は向いてない
相手が日本語書いてるからと言って通じるとは限らない 言葉の通じないバカを言いくるめようとするからこうなる 相手に言葉が通じるか見極めるスキルと耐性・スルー力を身に着けろ
喧嘩するにも同程度の知能を有してないとダメってことだな
単発わらわら湧いてて笑うわ どっちが必死なんだかw
>>604 は単に偉大な先人に感謝してるだけだと思うんだが…
「正規表現を考えた人」って表現したのがまずかったのか?
バカが身の程しらずにもこのスレに迷い込んでくるから
●Regular Expressionの使用環境 C# ●検索か置換か? 置換 ●説明 アダルトビデオDBから取得したタイトルの最後が 女優名だった場合は消したい ●対象データ 女優 |タイトル ----------------------------- 三上悠亜 |下着モデルをさせられて… フェチズム9ランジェリーSpecial 三上悠亜 三上悠亜 |三上悠亜のPLATINUM SOAP 高橋しょう子|バキュームフェラ大好きお姉さんのディープスロート・たっぷり射精・追撃おしゃぶり 高橋しょう子 高橋しょう子|高橋しょう子 初BEST 12タイトル720分 ●希望する結果 女優 |タイトル ----------------------------- 三上悠亜 |下着モデルをさせられて… フェチズム9ランジェリーSpecial 三上悠亜 |三上悠亜のPLATINUM SOAP 高橋しょう子|バキュームフェラ大好きお姉さんのディープスロート・たっぷり射精・追撃おしゃぶり 高橋しょう子|高橋しょう子 初BEST 12タイトル720分
●Regular Expressionの使用環境 Windows PowerShell ●検索か置換か? 置換 ●説明 「秒・コンマ」を「時・分・秒・コンマ」に置換 ●対象データ start="123.45" ●希望する結果 start="00:02:03.45" よろしくお願いします 割り算の商とあまりはPowerShellの関数で 2 = [int](123/60) 3 = 123 % 60 で求められます
鬼雲 ^(\S+)[ ]*|.+\K\s++\1$ ^([^|]+)[ ]*|.+\K\s++\1$ .Net だとこんな感じ?未確認 (?<=^([^|]+?)\s*|.+)(?>\s+)\1$ 空文字に置換
>>645 [TimeSpan]::new(([double]$start)*10000000).tostring("hh\:mm\:ss\.ff")
>>644 Ruby なら、そういう関数がある
delete_suffix!(suffix) -> self | nil
self の末尾から、破壊的に suffix を削除します
[PARAM] suffix:
末尾から削除する、文字列を指定します
[RETURN]
削除した場合は self、変化しなかった場合は nil
"hello".delete_suffix!("llo") # => "he"
"hello".delete_suffix!("hel") # => nil
>>644 .replace(/^(([^\s| ]+)[\s ]*|.+?)[\s ]*\2[\s ]*$/gm, "$1")
.replace(/^[ ]*(([^|]+)[ ]*|.+?)[ ]*\2[ ]*$/gm, "$1") 行先頭に空白がある場合が抜けてた(\sは半角スペースに変更) 姓名の間にスペースある場合も同じデータならマッチする 三上 悠亜 |下着モデルをさせられて… フェチズム9ランジェリーSpecial 三上 悠亜
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_+-]+)*@
が正しくないですか?
(ごめんなさい。上記修正です。。) 本来なら、 [a-zA-Z0-9_+-]+(\.[a-zA-Z0-9_+-]+)*@ が正しくないですか?
ありがとうございました。 こんなツール初めてしりました。 aaaaaあaaaaa@ ↑でも合致しますので、ページの説明としては不適切におもいました。
>>652 メールアドレスのアカウント部の判別って意味だろうから、
メタ文字ではなく本来\が必要な、文字としてのドットだね
>>656 ありがとうございました。確信がもてました!
●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>単独だと一致するが日付と株価を全部つなげると駄目なので一致するようにしたい 御教示よろしくお願いします
構造があるものは、正規表現では難しい。 スクレイピングは、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
>660 回答有難うございます テストツールではじかれるのそういうことなんですか perlでならCSSセレクタ使って取れるんですが遅くてRubyでも同じでしょうね
>>659 対象データの各行の後ろに実際には日本語はないってことでいいんだよね?
日付の正規表現省略</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の前のスペースインデントに対応できると思う
>>663 訂正
日付の正規表現省略</td>\s+<td class="YYY">(?<open>[0-9,.]+)</td>\s+<td class="YYY">(?<high>[0-9,.]+)</td>\s+以降の正規表現省略
空白とか考慮してねんじゃねーの 提示されてるデータ見ても</td >始値だけ違ってるし 改行の扱いで転けてる可能性も
対象データの後ろの日本語は注記で実際にはありません
>663,664 有難うございました \s+ でつなげて上手くゆきました
Pythonで以下の条件に当てはまる正規表現はどうしたら実現できるでしょうか。 半角英数字(大文字小文字)255文字までとハイフンのみOK --の連続は不可。行末がハイフンで終わるのも不可 ここまではできてるんですが、どなたか知恵を頂きたいです。 ^[a-zA-Z0-9-]*(?<!-)$
pythonなら正規表現だけで処理しなくても 抜き出した後に--が含まれるのを除くとかどうにでもなるだろ。
^(?:(?!--)[a-zA-Z0-9-])*(?<!-)$ ^(?!.*--)[a-zA-Z0-9-]*(?<!-)$ まあこの2つの書き方を覚えればいいんじゃない? ただ空行もマッチしちゃうよ
>>670 確かにそうですが、ちょっと格好つけたかったんです。
>>671 おぉぉぉぉありがとうございます。
とっても助かりました!!
おかげでこの先、頑張れそうです。。。(定時まで)
自分で理解できない正規表現とか組み込んで、この先メンテナンスできるんだろうか。 一時的なことならいいが
この程度見れば何してるか理解できるよね 2つは記述は似てるけど考え方が少し違う
条件が曖昧なので2通り(定時回ってそうだが)
# ハイフン含めて255文字
^([0-9A-Za-z]|-(?!(-|$))){1,255}$
# ハイフンは255文字に含めない
^(-?[0-9A-Za-z]){1,255}$
>>675 試したら"?>"など知らんって言われた
単純に ^(-?[a-zA-Z0-9])[0,255]$ とかで良かったんじゃないかな
みなさんありがとうございます。 こんな正規表現良く書いたねーって先輩のレビュアーに言われて、 詳しく説明してって言われたんですが説明できなかったので、 頂いた数々の秘技を頑張って理解していこうと思います。(定時まで)
以前使っていた正規表現の質問専用スレが見当たらないからここで聞きたい javascriptで以下のマッチングを行うとマッチするけど、キャプチャの分が取得されない。 どうしたらいいんだろう let abc = "/abcd/357/1/"; let regex = /^\/abcd\/(\d+)\/\d+\/$/gi; let result = abc.match(regex); console.log(result.length); この出力が1になる。(\d+)も含めた2になってほしい
matchAllかwhile regex.exec(string) !== null
解決したわ
gあるとキャプチャ取得されないって書いてあったわ
>>683 すまん
元データ 1621299591.842348,378,666,111,84 これをサブパターンで以下のように抽出したいです。 1621299591.842348 378 666 111 84 最終的な目的としては、ZabbixでCSV形式ログから値を取りたいです。 いろんなサイトを参考にしてるんですが、簡単そうに見えてこれが実現できる例が見つけられず。
>>685 それって正規表現で処理する部分なのか?
本当にそのままのデータなら/,/¥n/だろ。
>>685 Zabbixは1つの値で1つのitemなので
(.*),(.*),(.*),(.*),(.*)みたいな正規表現を使って$1~$5を出力するそれぞれ別の依存itemを登録するんじゃない?
ありがとうございます。 logrt["/var/log/^.*\.txt$","^([0-9]+).([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+)$",,,,\3,,] こんな感じでできました。 ご指摘通り\3のところを\4や\5にしたアイテムを別途作成。
>>690 依存アイテムの保存前処理で上の正規表現入れてできました!
こんにちは 質問です ●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 よろしくお願いします
正規表現だけで可能なのか? 適当なスクリプト使った方が手っ取り早いような。
まずパラグラフをどう判断するかの条件も書かれてないしね 書かれてる2項目だけでいいならできるけど、 望むことはパラグラフの1行目の自動取得だろうし
>>694 ちなみに、上記限定だったらどう書くの?
自分はちょっと思い浮かばない。
各段落1行目の前が空行でそれ以外に空行は無い とか 1行目行頭だけが"/"で他の行頭には"/"は無い とか 1行目だけが保ち得る条件が必要なのと 各段落の行数が同じで無いとキャプチャは出来ても置換で参照使えなくね? ・1行目の一意な条件 ・段落の行数が一定 このふたつの条件満たさないと正規表現だけでは無理じゃね?
段落の最大行数に合わせて置換式書いておいて置換後 2度目に 行頭が "^=" の行を削除 なら行数不定でも出来るだろうけど 美しくないしスクリプトの方が適してると思う
可変長戻り読みしか思いつかなかった
>>692 https://regex101.com/r/DcrdT0/1 エディタ代わりにこのページを使うならUpdate Regexは絶対にするなよ
みなさんありがとうございます
>>698 https://regex101.com/r/DcrdT0/1 のようにしても Sublime ではマッチしないんですが
おすすめのエディタはありますでしょうか?
また、
> エディタ代わりにこのページを使うならUpdate Regexは絶対にするなよ
なぜでしょうか?
>>699 https://regex101.com/r/fg8u8n/1 を見ればわかるとおり「対象とする文章も保存される」ため
一般的に漏洩したら問題でしょ?
●Regular Expressionの使用環境 サクラエディタ ●検索か置換か? 検索(正規表現で色を付けるため) ●説明 各行の最後に現れる:の直後から行末までを一致させたい ●対象データ intval:i:1 strval:s:0,1,563,11,1913,1033 ●希望する結果 1 0,1,563,11,1913,1033 よろしくお願いします
:と改行以外が行末まで続くんだろ :([^:\n]*)$ お願いしないといけないようなところあるか? どーせ:はハイライトしたくないとかだろうけど 肯定戻り読み(?<=regex)使うだけだよな (?<=:)([^:\n]*)$ これお願いしないといけないようなところあるのか?
>>702 超ありがとうございました!
(肯|否)定(先|後)読みがうまく使えなくて・・・
●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] よろしくお願いします。
ほぼそのままだろ www.atmarkit.co.jp/ait/articles/1411/07/news133.html
pythonです .foo.xxx_var .foo.foo.yyy_var この二種類の形式の文字列があるとき xxxとyyyだけほしいんですがどう書いたらいいですか?
def getxy(s): return s[s.rfind('.')+1:s.rfind('_')] a=getxy('.foo.xxx_var')
('.') ('_') 顔文字みたいで可愛くてワロタ
>>708 rfind知りませんでした。ありがとう
不格好だけど
findall("(.+\.)?(.+)_var")[0][1]
でも取れました。正規表現てどんな順番で書いていけばいいのかわからん…
s='.foo.xxx_var' re.search('([^.]*)_',s).group(1)
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 ]
各言語でそれぞれ書き込む事態にでもならなきゃ自分の行いがいかにウザイかを実感できない人なんだろう まったくの場違いだと言うのにそれに気づかないもんな
先頭以外の A をすべて S に置換 って一般解としてどう書くの? AAAEAA を ASSESS にしたいとか
下URLにあるPerlのRegexp::Optimizerのように、正規表現を最適化するC/C++用ライブラリはご存じないですか?
https://metacpan.org/pod/Regexp::Optimizer ●Regular Expressionの使用環境 python3.8.5 ●検索か置換か? 置換 ●説明 <数字>以外の<>を外したい ●対象データ [<< ><test<<012>>name1><> >] ●希望する結果 [ test<012>name1 ]
可変長の否定戻り読みが使えるなら <(?!\d+>)|(?<!<\d+)> 数字の桁が3桁固定なら <(?!\d+>)|(?<!<\d\d\d)>
>>724 すいません、説明が足りなくて
可変長で、可変長扱えないです(´;ω;`)
あれか <(\d+)>のサイズ取得して動的にするのか…
>>723 re.sub(r'(<[0-9]+>)|[<>]', r'\1', '[<< ><test<<012>>name1><> >]')
>>507 のパターン
これ使い勝手良いね
>>723 pythonなら正規表現だけにこだわらなきゃ<¥d+>さえ拾えばどうとでもなるだろ。
数値がネストした構造の一番内側にあるとは限らないんじゃないの?
>>727 すごい
これどうなってるんですか?
なんでorの前のヤツだけ置換されるの?
>>731 | の左右どちらに一致した場合でも \1 に置換している
ただし片方にしか \1 に対応する括弧がない——というのがミソ
左側 (<[0-9]+>) に一致したときの \1 は 一致した全体なので結果として何も変わらない
右側 [<>] に一致したときの \1 は空なので削除される
<><abc><value<123<x>>/value><> こういうパターンはあるのか?
>>734 だからもしこういうのがあるのなら、上の回答じゃダメじゃん
<abc>は消えないぞ
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を生成するみたいな
でもさー 結局のところ自分の理解できる範囲で対処できないとブラックボックスでしかないから保守できないよな
ネストがある構造物は、パーサーを使わないと保守できない。 Ruby のNokogiri みたいな、XML/HTML パーサー 正規表現でバグると、他人が手を出せないので、 結局、パーサーで作り直しになる アンチパターンの常識 モジュール・デザインパターンの知識が無いから、 何にでも正規表現を使う、香具師と言われている
ネストがある構造はRDBで管理するという方法もあるな
>>727 のパターンは構造を見てない
ノンマッチな><だってホイホイ喰っちまう奴なんだぜ
manの解析させるルーチンで無制限にネスト潜るの一度だけ書いたこと思い出したわ
1行に「半角スペースと全角スペースが3文字以上ある時」を検出するにはどうすればいいのでしょう?
(.*\040|.*\201\100){3} とかか
>>747 SJISだったらこうしないとだめか
(([^\201-\237\340-\357]|[\201-\237\340-\357].)*(\040|\201\100)){3}
●Regular Expressionの使用環境 サクラエディタ ●検索か置換か? 検索(正規表現で色を付けるため) ●説明 各行の「CR」または「LF」の改行コード部分に一致(CR+LFは一致させない) ●対象データ あ\r い\n う\r\n ●希望する結果 \r \n よろしくお願いします
なんとか自分で調べて見たんですが、下の正規表現で合ってますか? [\r\n](?!\n)$
(\r(?!\n))|((?<!\r)\n) でどうだろう
文中もしくは単独で特定の文字列がある場合を除く ってどうやるの?
^(?~特定の文字列)$ ^(?!.*特定の文字列).*$
>>758 ×非包含パラメータ
○非包含オペレータ
>>759 他の正規表現とつなげると問題が起こる。
例えばコメントの直後にbbbが来るのを \/\*.*?\*\/bbb として
/* */aaa/* */bbb
にマッチさせると /* */aaa の部分も含んで全体がマッチしてしまう。
でも少なくとも解2でいいんじゃないか 表現力もたいして変わらない 数文字減るだけののシンタックスシュガーに見える
●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でない行を検索して置換できれば良いかなと考えています。 よろしくおねがいします
>>764 -aも足してgrep -nUaPでも試してみては?
>>764 そのテキストファイルはASCIIなの?
UTF-16だったりEBCDICだったりしない?
>>764 なぜかマッチしないのはcygwin付属のgrepコマンドのバグかもしれないし、
cygwin本体のバージョンを書くか
ダウンロードサイトも書くべきかと
>>764 あとは-Uオプションを外してどうなるか試してみるとか
単純に\nがgrepに食われてるだけだと思う オプションに-zを入れれば\0区切りになるから\nは残せそうだけど ファイル全体が1行になるだろうからやりたい事は多分できない \rを\r\nに統一したいなら各行の末尾以外の\rを\r\nに置換すれば良さそう grepで検索だけして手作業で直すつもりなのかな
テキストファイルなんだよね? だったらテキストエディタで開いて改行コードをCRLFに指定して保存するだけで 改行コードは揃うと思うけど 俺の使ってるエディタでCRLF,CR,LFの3つを混在させたファイルでやってみたけど 全部CRLFに変わってくれたよ
grepは行単位で処理するが、行は\nで終わることになってる
>>771 のいうようにgrepが\nを食ってしまうので\nは検索できない
行末にマッチさせたいなら\nではなく$を使う
が、改行コード変換したいだけならCygwinに最初から入ってるunix2dos/dos2unixでも使えばいい
>>774 単独のCR(\r)は古いMACに見られる改行コードだから
UNIXの改行LF(\n)でもDOSの改行CRLF(\r\n)でもないよ
>>775 dos2unix/unix2dosは旧macの改行も変換できるので問題ない
ニュー速VIP板 (?<=ニュー速)VIP(?=板) ↑これは分かるけど (?=ニュー速)VIP(?<=板) ↑これが分からん
(?=ニュー速)VIP VIP(?<=板) これらに一致するものは有り得ない (?=.*ニュー速)VIP こうなら有り得る 先読み (?=abc) はabcの左側aの手前の「位置」に一致するもの xabcとあればxとaの間の位置に一致 戻り読み (?<=abc) は先読みと反対でabcの後ろcの後の「位置」に一致するもの abcxとあればcとxの間の位置に一致 つまり (?=ニュー速) は「ニュー速」の「ニ」の手前の位置に一致するものなので (?=ニュー速)ニュー速 で無ければ絶対に一致しない条件式となる
>>778 ああ分かった /VIP(?<=IP)/ というのはVIPの右に(?)がある事からしてVIPのPの右の位置にマシンがカーソルを合わせて次に<という左矢印がある事からしてカーソルの左側にPがあるかどうかを探って次にその一つ左にカーソルを動かしてそのカーソルの左側にIがあるかを探るって訳か
文字にするとややこしいけどイメージはしやすいな
> ニュー速VIP板ニュー速板 二つ目の「ニュー速」だけを対象にしたい (?<=VIP板)ニュー速 前方に「VIP板」のある「ニュー速」 一つ目の「ニュー速」だけを対象にしたい ニュー速(?=VIP板) 後方に「VIP板」のある「ニュー速」
(否|肯)定(先|後)読みは、^(行頭)や$(行末)と同様に"位置"にマッチするメタ文字(「アンカー」)として機能する
ここにある正規表現サンプルのURLを取得する正規表現ですけど
間違ってないですか?
https://www.megasoft.co.jp/mifes/seiki/s310.html urlに'があるurlだと'の後が取得できなくなる。
>>783 間違ってるけどメタ文字解説読めばそんなこと分かるだろ
厳密なのはいつもの
http://www.din.or.jp/ ~ohzaki/perl.htm#httpURL
これなんで5matchsなの?
>>788 >>787 ああなるほど一文字ずつマッチする上に空文字もマッチするのか
でもtest stringをabcdefとして3マッチになるかと思ったら2マッチなのな
abc(def)?|def 空文字に一致しないよう書くべき
windowsなんですが、正規表現を使ってファイルのリネームしたいです hofajkfjda.jpg fasfdajl.jpg というファイルがあった場合 new1-hofajkfjda.jpg new2-fasfdajl.jpg としたいです 連番を含むのですが、正規表現で可能でしょうか? また、何のツールを使うといいでしょうか?できればlinuxとwindowsで共通で使えるものがいいんですが。
それ正規表現の話じゃないよねスレチ ファイル名降順(昇順)で頭に(new連番-)付加ならFlexible Renamerとか色んなリネームソフトで出来る 任意の順ならバッチやPowerShell 後は該当スレでどうぞ
不可能じゃないけど、近所のコンビニへ行くのに絶対にプライベートジェットで行きたいですとか言われてる感じ もっと他に簡単で向いている方法があるでしょって話
文字列の集合を表す記法が正規表現 連番という集合を示せるならできるかもね 自分は知らないけど
>>792 秀丸ファイラー
ファイル選択→「F2」→「Alt+2」、で連番リネームモードになる
>>795 了解です
>>797 flexible renamerにしました。
これより新しくて良いソフトってあるんでしょうかね。
質問続けるならせめて礼くらい言ってからにしろ そもそももうスレチなんだから他へ行け池沼
>>798 >>793 読んだ上でその書き込みなら流石に傲慢が過ぎる
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
複数行モード出なくても改行に一致させる事は可能ですか?
一致と呼んでいいのか分からないけど$が改行に対応すると思う 文字セットには使えないけどab(c|$)みたいな分岐は可能
複数行モードって何? mオプション(マルチラインモード)のこと? それとも逆にオプションなし通常の場合やsオプション(シングルラインモード)のこと? これの違いは解説でも読めば分かるけど ^ $ . の動作の違いってだけだから、\n,\rはどの場合でも有効だよ
JavaScriptの正規表現によるmatch検索で、「10918」ピッタリの数が存在するか調べたいときのことです 「1091」でも検索に引っかかってしまいます。 どうしたらよいでしょうか 以下の条件では10918だけでなく1091でも検索に引っ掛かります let a = 1091; new RegExp(`(?<!\d+)${a}(?!\d+)`, "i")
>>806 に追記
データは場合によっては「数字 数字 数字」になっており、そこから特定の数字だけ存在するか調べたいです
関係ないけどlookbehind内で正規表現が使えない言語とか多いのな
区切りがあるならlook aroundする必要ないよね
>>806 正規表現である必要ないんじゃない?
後読みの必要ある?
aa●abbbcccd□ddeee aa□abbbcccd●ddeee 両方にヒット表現をお願いします
そのまんまであれば aa[●□]abbbcccd[●□]ddeee
あ、そうか aa●abbbcccd●ddeee aa□abbbcccd□ddeee はヒットしてほしくないのです
じゃあ (aa●abbbcccd□ddeee|aa□abbbcccd●ddeee)
やっぱりそれしかないですかね。実際は
(.*●.*□.*)|(.*□.*●.*)
でこうなるのです
>>816 aa([●□])abbbcccd(?!\1)[●□]ddeee
EmEditorはしらないなー (?m:(.*●.*□.*)|(.*□.*●.*))
>>818 そのダイアログはCtrl+Cでテキストコピーできると思うからググりやすいように
コピペしてほしいな
あとEmEditorはBoost.RegexとOnigmo(鬼雲)を使い分けられるから、
オプションでどっち使ってるのかも教えて
https://jp.emeditor.com/text-editor-features/history/new-in-version-15-7/ >>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 「直前に"一つ目のパターン"がない位置」を指すメタ表現
日本語的には"直後に"じゃね? 読んで行く方向、カーソルの前方だとしても直前だと意味が逆転しそう
>>820 この(?!/1)は分かるけどその次の[●□]との繋がりが分からん
どういうこと?
ありがとう完全に理解した \1 は ([●□]) のことを指してて (?!\1)[●□] で前の ([●□]) で選んだものと被らないようにしてるわけか
>>828 (?!\1) は「1つめの括弧で一致した内容はこの位置(の直後)には現れない」という言明
([●□]) が ● に一致したなら (?!\1) は (?!●)
([●□]) が □ に一致したなら (?!\1) は (?!□)
なので最初の [●□] と二つめの [●□] では必ず互いに異なる文字が一致する、という具合
●Regular Expressionの使用環境 さくらエディタ ●検索か置換か? 検索 ●説明 ある文字列を含まない形で最短一致させたい ●対象データ 「吾輩は猫」「吾輩は三毛猫」「吾輩は犬」「吾輩は犬」 という1行の文書です。 ●希望する結果 「吾輩は猫」「吾輩は三毛猫」「吾輩は犬」「吾輩は犬」 ^^^^^^^^^ 「.*【猫を含まない】」 というような正規表現で、上記のように、 猫を含まない最初の「」に最短一致でマッチする結果を得たいのです。 どなたかお詳しい方、ご教示くださいませ
連投すみません。 ^^^^^^ がズレました。 「吾輩は猫」「吾輩は三毛猫」「吾輩は犬」「吾輩は犬」 のうち、3つ目のカギ括弧、 つまり、1つめの「吾輩は犬」にマッチする正規表現を探しております。
>>834 すいません><
例題を単純化しすぎました。
せっかくご回答いただいたのに申し訳ないです。
「吾輩はネコである」「吾輩はミケネコである」「吾輩は「ネコ」である」「吾輩はイヌである」
というように、排除したい文字列(ネコ)は複数文字なんです。さらに、カギ括弧が二重の可能性があります。
カギ括弧内にネコを含まないものなら、イヌ以外でもなにがマッチしても問題ありません。
左から見て内部に「ネコ」を含むカギ括弧を排除していき、最初にネコを含まないカギ括弧にマッチさせたいのです。
^.*?\K「(?~猫|」)」 ^.*?\K「[^猫」]*+」
>>837 おおお…凄い…できました!
ずっと探し求めていた魔法がここに…
これは、なにが起こっているのでしょうか。
なんらかの後方参照が行われているのは分かるのですが…
「(?~ネコ|」)の、?~は、「不在繰り返し」というのですね。 ということは、「(?~ネコ|」)は、 「の後に、【ネコ】の不在繰り返し 又は 」がくるもの、という意味ですね。 不在繰り返しなんて便利な表現があったとは… ご親切にありがとうございます。
> ?~は、「不在繰り返し」というのですね 違う。?~ だけでは意味を成さない (?~式) 「非包含オペレータ」 "式" を含まない文字列に一致する 式にあたる部分は "ネコ|」" なので "ネコ" と "」" を含まない文字列に一致
非包含オペレータと不在繰り返しは紛らわしいな (?~ネコ)がネコのネにマッチするかしないか
「吾輩はネコである」 「(?~ネコ)」 不一致 「(?~ネコ)(?~ネコ)」 一致 「(?~(?=ネコ))(?~ネコ)」 不一致 「(?~(?=ネコ))(?~(?<=ネコ))」 「ネコ」 不一致 「吾輩はネコ」 一致 「吾輩はネコである」 不一致 「(?~(?=ネコ).)(?~.(?<=ネコ))」 「ネコ」 不一致 「吾輩はネコ」 不一致 「吾輩はネコである」 不一致
この不在繰り返しを、Python3.6のreモジュールで書く方法はありますか?
むずすぎて全然分からん まぁPythonで使えんみたいやしいいか
文字列の否定は否定先読みで re.findall("「(?:(?!ネコ).)*」", string)
(?~abc) "abc"に一致しない文字列に一致。"abc"の"a","ab","bc","c"に一致する (?:(?!abc).)* "abc"の"a"に一致しない文字列 (?:.(?<!abc))* "abc"の"c"に一致しない文字列 abc に対し (?~abc)c 一致 (?:(?!abc).)*c 不一致 (?:.(?<!abc))*c 一致
(?~式) 非包含式 (?~) 非包含オペレータ(演算子) (被演算子は~と)の間に内挿される) /* 田中さんの元論文がこの使い分けを間違ってるわけだが */ 概念を語る場合は、繰り返しや文字クラスや選択のように、単に「非包含」と呼ぶ
自己肯定感の低い人が仕事できない本当の理由
VIDEO 【致命的】個人で稼ぐのに向いていない人の特徴7選
VIDEO 自己肯定感の低い人にオススメの副業5選
VIDEO 【質問力】雑魚と思われてしまうダメな質問の仕方5選
VIDEO 集団の中で落ちこぼれ組がやりがちなこと
VIDEO 【人気者の基準】有名にならないと言われない暴言3選
VIDEO 【本質】みんながフリーランスになれない本当の理由
VIDEO 下記のソフトで書庫ファイルをリネームしたいのですが、正規表現が必須のようです。
どうかご教示をお願いできませんでしょうか。
https://www.vector.co.jp/soft/winnt/util/se481411.html 【書庫内のファイルの先頭に、親フォルダ名を追加したい】
例: ○X△.zip 内の 00.jpg~99.jpg を ○X△.zip.00jpg~○X△.zip.99.jpg にしたい
訂正させて下さい。
親フォルダ名じゃなく親ファイル名でした。
下記のソフトで書庫ファイルをリネームしたいのですが、正規表現が必須のようです。
どうかご教示をお願いできませんでしょうか。
https://www.vector.co.jp/soft/winnt/util/se481411.html 【書庫内のファイルの先頭に親ファイル名を追加したい】
例: ○X△.zip 内の 00.jpg~99.jpg を ○X△.zip.00jpg~○X△.zip.99.jpg にしたい
そのソフトの機能とあなたがしたい事が正確にはわからんが、 正規表現で自動でディレクトリ名は入らんよ。 それをやりたかったら普通はプログラミングの領域。 単に先頭に指定文字列を入れたいなら 検索:^ 置換:○X△.zip
>>849 ^:○X△.zip
アーカイブ名を参照するメタ文字が用意されていれば別だけど、一般的には都度指定するしかない
もし処理対象アーカイブが一定数以上あったり、定期的に一定数以上のアーカイブに対して同処理が必要になることが予想される場合、自分なら、1) 作業フォルダに解凍、2) リネーム、3) 再圧縮、4) 元アーカイブに上書きコピー、5) 後片付け、を指定フォルダ以下のアーカイブに対して実行するバッチファイルを書いて、それを実行すると思う(7z)
>>850 親ファイル(zipファイルのことだよね?)の名前を人手で入れるなら
^:○X△.zip
みたいな感じで行けるんじゃね?
http://frostmoon.sa kura.ne.jp/gui4reces/gui4reces0018ss_rename.png
ファイル名に拡張子以外のドットは特別な理由でも無い限り使わないようにした方が良い あと質問内容は正規表現では無くソフトの使い方のようなので微妙にスレチ 作者の宣伝?
皆さん、ありがとうございます。 せっかくアドバイスを頂いたのですが、何が何やらさっぱりで・・・ せめて正規表現を少しでもかじってから再度教えを請いたいと考えていたので返信が遅れてしまいました。 しかし・・・ 正規表現のサイトを少し覗いてみたのですが私には敷居が高すぎて・・ もう少し頑張ってみるつもりですが、かなりきつそうです
>>855 アドバイスじゃなくて答えが書いてあるんだから、せめて試せよ
す、すみません。 検索文字列とか置換文字列とか難しく考えすぎて、 ^:○X△.zip が回答そのものだったとは思いませんでした。 試してみました。 しかし、ログでは成功してるはずなのに実際のファイルはリネームされていません。 ソフトの使用方法がおぼつかないため、もう少し試行錯誤してみます。 とりあえずご報告だけさせて頂きました。
何でわかるんですかw 第一階層までしかリネームできないみたいです そうなると、解凍してリネームして再圧縮が正解ですね。 バッチファイルは・・・・・・無理ですが
教えてください。 AAAA AAAA(1) AAAA(2) AAAA(3) という中から ()付きのものだけ抜き出す式はどう描くのでしょうか()の中身ではなくてAAA(3)などを丸ごとです。 お願いします。
>>861 抽出できない・・・です
ごめんなさい、
AAAA(3).doc
とか拡張子もありました。
>>862 ¥はバックスラッシュに置き換えな
^.*?¥([0-9]¥)
あと、()が全角と半角では扱いが異なるから書き込むたびに変わってちゃダメ。 全角と半角両方に対応させたいなら^.*?[¥((][0-9][¥))]
うんこおおおおおおおおおお ↓ うんこ!!!!!!!! ってjavascriptで正規表現で変換したいです text.replace(/うん(こ)+/,"!")だと明らかに上手く行きませんがどうしたらよいのでしょうか?
検索から違ってるし、function使わんと同回数繰り返すとかは無理 text.replace(/(うんこ)(.+)/,function(s,g1,g2){return g1+Array(g2.length+1).join('!')});
先頭が-か+か0-9 以降0-9のみ はどう書きますか? -123 OK 12+3 NG
文字クラスの1文字目で使う場合には範囲指定と誤解される可能性はないから、エスケープ不要なのでは、という疑問です
>>873 エスケープをつけておいたほうが人間にとって読みやすく、後々パターンを改変した時にミスせずにすむ
「○○してもいい」が「○○しなければならない」に置き換わってしまう人たまにいるけど、あまりPGに向いてないかもね
質問者より先に回答者に対してあーだこーだ言ってくる奴にロクな奴はいない
と同時に質問者の自演の可能性もある
>>872-873 みたいなのは分かってて聞いてるからそういうレスこそ不要なのでは、という疑問です
あまり偏屈な人は回答しないほうがいいと思うけど、現実世界で阻害されている偏屈な人ほどねじ曲がった回答に生きがいを見出してしまう
機械から見て無駄のない極力短い正規表現を作れる俺カッコイイみたいな自己満な人もいるからねえ おれは、ぱっと見て分かりやすいとか修正しやすい書き方するなあ そうすることでデメリットが多くなってしまうなら別だけどね まぁケチ付けることが目的の人がいても仕方ないけど
本当に知識がある人は知識マウント取らずに、 なぜそういう回答をしているのか推察できるからいちいち突っ込まない どうしても回答したい場合は、他の回答者には触れず回答だけ書く
自演バレバレでも「悔しそう」に反応せずにはいられなかったんだろ 長文が自己紹介過ぎて笑える
MUST、SHOULD、MAYの理解が不完全な人はなんでもMUST扱いしたがる 冗長性を理解できない着物警察の思考様式
おれも-はエスケープするな つか+もエスケープする エスケープ可能なのはエスケープしとく
なんとなくプラスマイナスの順にしたいから ^[+\-]?[0-9]+ って書くかな
質問者です pythonなのでエスケープはr文字列頼りです ところで871のだと 12+3 は 12,+3で取れますが 正規表現を使った、文字列の判定がしたいのです 例挙げたように、頭は-+0-9 以降0-9のみで構成された文字列のみTrue、それ以外はFalseしたい 一応 if len(re.findall(pat, s)) == 1 かどうかで判定できてる気がするけど 方法としてはこれでいいんですよね? すいません正規表現関係なくて
しかもハット忘れて偶然できてただけだっった(笑) うーむ
正規表現スレで、円マークという誤解を招く表現はやめてほしい バックスラッシュと表現すれば誤解を招かない
回答で円記号を使われるのは気になる わざわざ置き換え指示するくらいなら最初から正しく書けばいいのに
承認欲求を満たせないと見るや他人を下げて自分を上げようとする人は 自己評価は高いんだけど周りからの評価は低く不満を溜め込んでるタイプ 5chあるあるだけど中には粘着する人もいるので気をつけようね
"質問者"や"回答者"という立場を異常に強調するのは "質問者"の承認が欲しくて堪らないから 承認が得られない場合や承認を得ることを邪魔された(と感じた)ら 自己防衛のために他者を攻撃する 攻撃の度合いが強い人ほど病んでる度合いも強い
「俺は\でエスケープしてるけど気になるなら取ってくれ」 で済ませられなかったのかねえ
>○○してもいい」が「○○しなければならない」に置き換わってしまう人 これ自分の紹介かよ エスケープしなければならない病に罹ってるな
香ばしい奴にイチイチ構うな そうやって相手するからそこに価値を見出してレス乞食へと変質して行くんだ スルー出来ないおまえらも似たようなガイジ予備軍
>>883 に一票
まあそういう所にしか突っ込めない人がいるって思ってりゃいいかと
なにか勘違いしている人多いみたいなんで説明しとく
そもそも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 誤:以下に示した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 ちなみに、仕様書に先頭末尾の'-'に関する記述がないpcreやOnigmoでも"[-az]", "[az-]", "[a\-z]" が同じ動作をするのでひとまず安心していい
C#等、javascript,Powershell,WSH、Rubyなど全部同じ動作する エスケープを強要するものがあるのなら実例を出してみろよ
>>909 実際のプログラムがどう動くかはあまり重要じゃないね
仕様書がすべてだよ
>>910 引っ込みがつかなくなったのかよ
後付の理論だってことは、
>>874-875 を見ればよく分かるぞ
>>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 >>912 何度も書くが、MUST、SHOULD、MAYはまったく違うものだよ
混同しないことだ
>>909 .NETを列挙せず、C#・PowerShell・WSHを別々に列挙した時点で ID:hNeyEW9L が素人さんなのはよくわかった
>>913 訂正ありがとう
Onigmoなにそれうまいの、という人のために説明しとくとサクラエディタの正規表現はOnigmoを採用してる
C++の正規表現クラスは引数でJavascriptの正規表現を選べます。 これは良いかもしれない。
(規格確認してないけど)そもそもC++のstd::regexってECMA-262の規格を参照, になってなかったっけ Boost::RegexはPCRE2とかの表現力があったけど標準入りの時点で文書化された規格参照になってた記憶
std::regexはgrepとかawkとかあまりうれしい人が居無さそうなオプションもあるんだけど、ECMAScriptは多くの人がうれしくなるのでは?
WSHの正規表現って言語エンジン(VBScript、JScript等)それぞれで実装されてるのかと思ってたけど、俺の勘違い? .NETの正規表現エンジンが使われることがあったりする?
マジキモいっすね エスケープするしないの問題じゃないのに「なにか勘違いしてる人多いみたいなんで説明しとく」てwww
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.
>>920 スクリプトエンジンの指定(jscript9等)はできるけど、正規表現エンジンの指定はできないはず
少なくとも自分は知らない
論理的に反論できなくなると人格攻撃するしかなくなっちゃうんだろうね
質問した人は気を悪くしたかもしれないけど
>>873 の質問はいい質問だったね
いろんな意味で
>>922 訂正ありがとう
それはさておき、先頭または末尾でハイフンを指定する場合はエスケープしてはならないみたいな仕様はあるんだろうか?
>>914 どこを読めばそうなる?
俺は最初からそういう哲学を持っているのなら、絶対に
>>874-875 のような回答にはなってないだろって言ったんだぞ
>>926 仕様外動作に備えてエスケープは必要、というのが回答になると思いますけどね
>>928 理由をひとつだけに絞ってるのはなぜ?
人間側の理由、仕様側の理由、それぞれあるでしょ
>>930 レス内容と時間経過で、最初はそんなことを露ほども思ってなかったのが
理由を探してそっちのほうに話を持っていったのが分かるからさ
>>931 全然違う。
>>874-875 は人間側の理由として完結しているけど追加で、仕様側の理由も書いただけだよ
書いた本人が言ってるのに推理小説みたいに無駄に裏読みしても意味ないよ
あなた、ひょっとしてモリカケ問題にのめりこんでるタイプ?
>>884 >>891 でお礼の一言もないから自演なのかやっぱ
思ってたよりエスケープ可能なのはエスケープする人はいないもんなんだな オレは機械的にエスケープしてるのも少なくないのでより多めではあるんだろうけど
>>932 >>875 で、してもいい、しなければいけないに拘ってるところが
仕様に明記されてないから書くべきとの哲学を持ってる人がするレスではない
ということ
>>935 仕様に明記されてないということは「仕様外」という意味にしかならないよ
書くべきと思い込んでいるのはあなたのほうだし、技術板で哲学とかなにを言いたいのかわからないし
精神病んで休職してるのが伝わってくるから、そのくらいにしとけば?
>>923 指定したスクリプトエンジンの中で .NET の正規表現エンジン使う奴はあるのか?
ってことだと思う
俺の知る限り多分ない
>>875 は、書かなくてもいいというのを肯定してて、けれども書いたほうがより良い
という考えでないと出てこない
最初から書くべきだと思ってる人なら書いてない文章だ
質問者と回答者(ID:6ga3nra2)が同一人物で自演って事?
>>938 マジで病んでるな
好きなだけ赤木ファイルの謎を追いかけたらいい
色々な意味や方面でガチの人は理解しないし理解されないよなあ
あやふやだったら全部エスケープすればまぁ動く 同僚やlinterに文句言われるくらい
>>923 >>937 ありがとう
WSH共通のオプション的なものにしろスクリプトエンジン側にしろ、.NETの正規表現エンジンが使われるケースが思いつかなかったんだけど、一般的な認識みたいで安心したよ
esc幾つも入れるより、\Q\Eの方がスマートな気がしてるんだけどあんまり使われないのは何で?
Perl以外じゃ使えないから まぁ、他でもメタ文字をそのまま使えるオプションが有るのがほとんどだけどね
Pythonお使いの方、正規表現は、reとregexのどっち使っていますか? regexがアトミックグループをサポートしている、などという話は知識として知ってはいるのですが、 reが残っているということはreにも実用上の優位点があるということですよね。それは何なのでしょうか
コアに入れてしまった以上、気楽になくせないだけじゃないの
昔reで書いたコードを書き直さずに使えるのが最大のメリットだと思うけど
「後方互換を破壊するに足る理由」が無いので、そのまま残されている
>>934 だってエスケープしてるなんて
おともだちに知られたら恥ずかしいし
python2からpython3への後方互換の捨てっぷりを思えば、 さっさとreを捨ててregexが標準になってもおかしくないはずだが、そうなっていないのはなにか事情があるのかな?
reで不便したことないけどregexにしかない有用機能ってなにがあるの?
pythonistaでregexインストールしようとしたら、c言語使ってるんで無理だよ的メッセージが出ました。 そうなると、re使うしかないわけで、そういう意味では存在価値ありますね。
reがregexを取り込めばいいってだけなのでは? 少なくともreが対応してる範囲でregexも同様に使えるということだし あまり大きいと組み込み用途とかでは難しいのかもしれないけど urllibはそんな感じで後発を取り込んでるよね
AHKで、文字列中の単語の間にスラッシュがある場合はその単語の後ろ(区切り文字やピリオドの前)に閉じ括弧を付けたいのだけど、例えばRegExReplaceを使って実現する方法を誰か教えていただけないでしょうか。 こんな、感じにしたいと思ってます。 変換前: aaa bbb/ccc ddd 変換後: aaa bbb/ccc) ddd
(\w+\/\w+) $1) 文字列に日本語が入るなら\wを適切なやつに変えて
>>964 グループ化って、こうやって使うんでうね。すごく勉強になりましたし、非常に助かりました。ありがとうございます。
●Regular Expressionの使用環境 javascript ●検索か置換か? 検索 ●説明 abcとdefというキーワードが最大1回順不同で出現するのに一致したい ●対象データ abc def→一致 def abc→一致 abc→一致 def→一致 →空白のみでも一致 →何もなくても一致 abc def g→異なる単語が入っていると不一致 簡単な書き方はありますか?
>>966 var str = 'なんか';
str.replace(/abc|def/g, '');
if (str.trim() === '') console.log('一致');
else console.log('不一致');
str = str.replace(/abc|def/g, ''); だった
ありがとうございます。 ちなみに正規表現だけで上記は可能ですか?
javascript使うんだろ 何で他の式を使ったらダメなの? まあorに空白を入れとけばtrimは不要かもね あと最大1回とは2回出るとダメってことなのか? abcabc→不一致?
>>966 素直に
^ *(?:(?:abc)? *(?:def)?|(?:def)? *(?:abc)?) *$
じゃだめなの?
abcabcはabcが2回でるので不一致です。
javascriptの場合教えてもらったコードで問題ないですね。
正規表現だけで表現できると便利だなーとおもったまでです。
>>971 ありだと思います。
967はabcabcに一致するんじゃないかなあ ^(?: |(abc|def)(?!.*\1))*$
>>973 こんな書き方できたんだ。知らんかった。
こんなスレがあったんですね 今後お世話になろうと思います^^
Pythonの正規表現を変数などに入れておき、他の正規表現の一部として再利用する方法ってあるのでしょうか。 第一の正規表現を hoge =[abcd] としてhogeに格納しておいて、 別の正規表現で (【hoge】|[efg]) のように、【】の部分で変数を引用するイメージです。
>>976 普通に文字列で持っておいて結合するだけじゃダメなの?
hoge = r'[abcd]'
...
r'(' + hoge + r'|[efg])'
>>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?)
となります。
3つを合成する時に間に変なスペースが入ってしまっていて、マッチを妨げていました。 ^(abc\s?(def)?|def\s?(abc)?|\s?) ですね。
>>977 それは盲点でした!
正規表現オブジェクトの再利用ということばかり考えていましたが、複数の正規表現に同じ文字列を代入すれば同一の効果が得られますね。
ありがとうございます。
>>978 もですが色々アイデアありがとうございます。
空白の条件は書き忘れですね。
abcとdefの間は空白一つ以上、先頭、末尾は空白あっても無くてもOKでした。
>>981 そうであれば
^(abc\s+(def)?|def\s+(abc)?|\s?)\s?$
で良いと思います。
間の空白を1以上とし、
忘れていた行末$を補い、
パターンの後に空白があっても大丈夫なようにしました。
>>982 それ ' ABC DEF' みたいに先頭に空白があるケースにマッチしなくね?
>>982 それ 'ABC' みたいに末尾に空白がないケースにマッチしなくね?
>>984 ご指摘ありがとうございます。
大変勉強になりました
^\\s?(abc(\s+def)?|def(\s+abc)?|\s?)\s?$
のように直しました。
abc のあとにdefが来るとき、
defのあとにabcが来るとき、
これらの場合のみ空白が必須なので、
空白と後に続くものを、まとめて括弧に入れるべきでした。
^\s?(abc(\s+def)?|def(\s+abc)?|\s?)\s?$ 冒頭のドルマークが1つ多かったです。 すいません。 あとは、冒頭に\s?を置くのであれば、選択肢の3つ目は不要ですね。 仮に空白文字しかない場合、冒頭の\s?が行末までマッチしてしまいますから、選択肢3つ目で空白がマッチすることはない。 というわけで、3つ目の選択肢を消した別解を考えました。 ^\s?(abc(\s+def)?|def(\s+abc)?)?\s?$
何度もすいません。 行頭と行末は、*を使うつもりが、?を使ってたから変なコメントになってました。 ^\s*(abc(\s+def)?|def(\s+abc)?)?\s*$ これで決定校です!
それ見たけど大昔から結構どこにでもある様な表だよね 自意識過剰じゃね?
客観的に観てもコピられた可能性は高いと思うが 裁判で勝てるかどうかは微妙
そんなことより改変もまともにできないのはヤバい 正規表現の例 マッチする例 Coo+el Coopel パクられ元にパクられだ疑惑(はてブ情報)
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
そもそもgooooooogleにしておかないでgo...gleにしてる時点で 元パクリサイト(今回の騒動の主)のパクリ確定だな
アーカイブされた時間は真ん中が先だな
先後がよくわからんので、
>>995 の結論については取り消しておく
正規表現を使わない場合、同じ文字の繰り返しって、...以外ではどう表現する?
gogle, google, gooogle ... という例ならある程度わかるんだが
次スレ
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へ
全掲示板一覧 この掲示板へ 人気スレ |
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