X



Regular Expression(正規表現) Part15

レス数が1000を超えています。これ以上書き込みはできません。
39デフォルトの名無しさん
垢版 |
2019/10/12(土) 19:38:36.96ID:vBnCHMzu
>>16
お題スレの人が総当たりソルバー作ってくれた
https://mevius.5ch.net/test/read.cgi/tech/1564310397/757
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を削除する方法がわかりません
誰か教えてください よろしくお願いします
2019/10/29(火) 11:28:33.00ID:Ef61zXRp
>>40
いまいちやりたいことがはっきりしないが、
Aのみ残したなら、^[^AA].*?jpg¥n
BCのみ消したいなら、^[BC].*?jpg¥n

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

ttps://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]"親譲りの無鉄砲で
子供の頃から
損ばかりしている
……"
日付と本文が交互に現れるテキストを日付と本文とに分けてキャプチャして置換したいのですが、上手く行きません。
最短一致を使用すると本文が一行しかキャプチャできないし、最長一致ですと最後の日付までの全行がキャプチャされてしまいます。
どうかご教示下さい。
2019/10/31(木) 20:12:39.29ID:qSOPmN+b
>43

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

置換
\n$1\t
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桁に挟まれた部分にマッチさせたいのです。
2019/11/01(金) 09:29:10.19ID:M2kmurNA
>>46
CotEditorでドットが改行に一致する状態なら以下でできる
(^¥d{8})(.*(?=¥n¥d{8})|.*(?=$))

Meryは知らん
2019/11/01(金) 09:30:04.91ID:M2kmurNA
一応置換はこれ
$1¥t"$2"
2019/11/01(金) 11:19:24.96ID:XqhX+0kD
(^\d{8})\n((?~^\d{8}))$
\1\t"\2"
最後の行が改行されてると"がズレるからそこだけ手作業
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])+)
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"
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の繰り返しと指定しないといけなかったようです
2019/11/18(月) 01:09:59.81ID:B3FWH6HK
/(A|B*|C+|D?|E?|)+/ は /[A-E]*/ と同じなんだろうか。
2019/11/23(土) 19:09:02.72ID:S+7ZA2D+
=を含まない行を検索できる表現方法は?
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/
2019/12/07(土) 04:27:54.74ID:Dhp88CPz
今でもアクティブに更新してるのってPCREの他はre2と鬼車系くらいなのかな
昔はライブラリの話も結構してた気がするけど
2019/12/07(土) 11:10:24.58ID:hNCBwRLG
Hyperscan
2019/12/07(土) 19:19:38.35ID:S05zsHBk
テキストエディタで見えないけど何かがある状態
MacのBBEditだと逆さまの赤い「?」が表示される状態なんですけど
こういうのを正規表現で捕まえる事って出来ないですか?
2019/12/07(土) 19:21:06.34ID:+kYKAjJc
否定で出来ない?
2019/12/07(土) 20:27:35.79ID:S05zsHBk
>>62
色々やってみたけど
非単語構成文字に含まれてしまい上手くこれだけ抽出出来ないです
一体こいつは何者なんだろう? もうちょい悩んでみます
64デフォルトの名無しさん
垢版 |
2019/12/07(土) 20:32:56.16ID:tj55yZgB
そういうときはバイナリエディタで開いて該当部の文字コード引きなよ。
2019/12/07(土) 20:51:47.44ID:S05zsHBk
ありがとうです
\x{7F}
でいけました
66デフォルトの名無しさん
垢版 |
2019/12/07(土) 21:19:40.77ID:b/g70Kck
ウムラウトなどのアクセント付きアルファベットにのみ一致させる正規表現をお教えください。
2019/12/07(土) 21:54:33.96ID:hNCBwRLG
正規表現だけではまだできないんじゃないかな?

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

知らないけど

まあ、日本人に聞いても、ムダだと思うw
使っている国の人に、聞いた方がよい
2019/12/07(土) 23:41:45.44ID:FrJsgiML
cpanライブラリの中に一般的な正規表現集めたものがあるから
その中にあるかもね
2019/12/08(日) 03:11:20.97ID:BNiynU8G
あるいは文字コードで標準ラテンのz(U+007A)よりあとを全て拾うように範囲指定するとか。
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にヒットするので困る。
2019/12/08(日) 14:15:46.03ID:B7mwO2xN
>>71
見た目が同じäでも文字コードの表現は複数ある
文字の種類も含めてこれで全部といえる集合を作れるならそれでいける
日本語で濁音が含まれる文字にのみ一致させる正規表現を求めてるのと似てる
2019/12/08(日) 14:19:04.55ID:B7mwO2xN
https://i.imgur.com/tclLTCk.png
2019/12/08(日) 17:17:16.59ID:qQWD6Mfj
[=a=]
equivalence class
2019/12/08(日) 17:27:54.65ID:DxA2hCcs
●Regular Expressionの使用環境
鬼雲6.2.0 &Mery
●検索か置換か?
検索
●説明
行中の1個目の=にだけマッチさせたい
意味合いとしては
(?<=^[^=\n]+)=
なんだけど
>戻り読みの式は固定文字長でなければならない。
>しかし、最上位の選択子だけは異なった文字長が許される。
だそうで+はダメみたい
(?<=^(?~=))=
戻り読みの中に非包含もダメだった

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

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

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

●検索か置換か?
検索

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

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

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

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

皆様 >>94->>97 ありがとうございました
2020/01/13(月) 18:19:19.63ID:isx+DaHv
>>98
https://abicky.net/2010/05/30/135112/
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) //マッチする
2020/01/15(水) 12:08:15.81ID:lFvJ7mPZ
^(?!.*バスケ(?!ット(?!ボール(?!選手)))).*
バスケ          ←不一致
バスケット        ←一致
バスケットボール    ←不一致
バスケットボール選手 ←一致
太郎はバスケットボール選手としてバスケ部に入部している ←不一致
太郎はバスケットボール選手としてバスケット部に入部している ←一致
2020/01/15(水) 14:36:24.87ID:mWwHDwCD
んなことよりバスケやろうぜ
105デフォルトの名無しさん
垢版 |
2020/02/09(日) 22:06:03.00ID:XBEo77KP
マッチしたカッコ内の文字列をを利用する方法ってどうやるんでしたか?

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

このアスタリスクの部分を利用するのはどうやるんでしたかね
t1ではないです
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
を忘れていました
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
2020/02/10(月) 18:02:57.53ID:cKG4UD69
>>110

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

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

上記の正規表現で

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

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

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

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

「\([^,]*,[^,]*?\)」で希望動作になりました
2020/02/12(水) 18:44:57.81ID:bUEb5r3d
どういたしまして。

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

((hoge,huga)piyo)

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

マッチ例n=3
XY
XaY
XabcY

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

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

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

●対象データ・希望する結果
ここは巨大都市だ
(マッチなし)
ここは横浜市だ
     ^
ここは巨大都市の横浜市だ
          ^
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

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

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

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

スレ汚し失礼いたしました。
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]))
2020/04/15(水) 11:49:07.49ID:MMPwOLF/
>>183
ありがとうございます。
scriptというのが大きなヒントになり解決に至りました。

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

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

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

が抜けてました
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.*
とか
2020/04/21(火) 13:08:13.53ID:bjfyOojV
>>193
とても意味がわかって書いているとは思えないが。
ログがそのパターンだけならこれでいけるでしょ。
¥d+¥.¥d+¥.¥d+¥.¥d+
頭が192.168.だけならそれで絞ってもいいし。
2020/04/21(火) 13:34:44.69ID:3ZBp0+Pn
>>194
両方ばっちりうまくいきました。
ありがとうございます。

\dとか\bとかいろいろあるんですね。
\t位しか知りませんでした。
ありがとうございます。
2020/04/21(火) 22:38:03.26ID:alPdontK
.* を [^0-9]* もしくは \D*
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
例を挙げると


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

こんな感じの荒らしです
文字は毎回ランダムで変わります
登場する文字の種類が少ないという点でマッチさせたいと思っています
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
試したらそれだとほぼ全ての文章にも当てはまるみたいです
2020/05/16(土) 20:00:27.44ID:C+uyEXd2
^(.)+(?!\1)(.)(?:\1|\2)*(?!\1|\2)(.)(?:\1|\2|\3)*(?!\1|\2|\3)(.)(?:\1|\2|\3|\4)*
文字クラス中で後方参照使えないなら否定先読みで代替
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)*
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
ありがとうございます!
後方参照難しいですね…
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)*$

【改行】とその前の改行を削除
2020/05/16(土) 21:09:00.00ID:BiE2hTzx
別の判定要件にしないと誤爆頻発しそう...

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

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


東大医学部医学科卒業、3年連続国試不合格のルシファーさん、偏差値95.3を取った模試の成績表をTwitterのヘッダーにしてしまう
http://leia.5ch.net/test/read.cgi/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種以内って
自然言語としては有り得ないわけですよ
そのエントロピー的な性質をターゲットにしてる
つまり完全ランダムじゃなくて電光掲示板的に嫌がらせメッセージを目立たせたいという意図を持ってるから可能になる手法
2020/05/17(日) 03:46:57.41ID:C/hIIgkx
>>211
なるほどw
214デフォルトの名無しさん
垢版 |
2020/05/17(日) 04:00:56.20ID:EMK05c2V
こうかはばつぐんだ!

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

https://leia.5ch.net/test/read.cgi/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
それ荒らし本人が正規表現で完封されるのが悔しくて書いたやつだぞ
2020/05/17(日) 04:45:15.72ID:zN/y7CUr
そうなのか
でもはたから見てると一緒だと思うよ
荒らし構うのはただの荒らしだよ
218デフォルトの名無しさん
垢版 |
2020/05/17(日) 04:53:36.77ID:EMK05c2V
>>217
この荒らしは誰からも無視されてるのに何年も続けてる奴だからな
自分がターゲットにされて遊ばれて悔しいという体験は初めてだろうな
放置すれば荒らしが消えると思うのは間違い
キチガイは何年でも休まずに荒らし続ける
しかも手動で

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

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

sed だと
置換: "\1\\\3"
2020/06/18(木) 22:37:34.06ID:G7fdNfOT
<スクリプト>(ここが変化)</スクリプト>
って感じでスクリプトとスクリプトの間が変化するだけじゃない?
2020/06/18(木) 22:42:36.83ID:L9lBZl+g
間があるのなら通常1行ではないだろう
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タグだけではないです
行頭と行末に"を挿入し、スラッシュをコメントアウトしたいのです、、、(´・ω・`)
2020/06/19(金) 07:43:33.01ID:b4DLgcmt
>>242
タグ内にタグ(正確には < )が入らないなら >>235さんので出来るよ
> 行頭と行末に"を挿入し
タグの間に改行が入ることは無いの?タグは関係なしに文字通りに行頭と行末?
環境も分からないし>>2のテンプレ通りに条件を例示して
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
了解です
 直しました
複数回に分けてやるのが普通なんでしょうか?
2020/06/19(金) 11:47:09.20ID:x+g7YIVM
>>245
これダブルクォーテーションもエスケープしなきゃいけないんじゃないの?
247デフォルトの名無しさん
垢版 |
2020/06/19(金) 12:02:33.17ID:LA4wBl0H
>>246
すみません、勘違いしていました
エスケープ対象は"で、/はエスケープ対象ではないです。

vscodeのスニペットに登録する際に、"をエスケープしないといけないんです
これ、なにげに面倒ですね
2020/06/19(金) 14:19:20.57ID:a2rlVyD0
>>247
HTMLが一般的ではないんだけど
通常はタグと閉じタグとが別の行になることが多いし
あるいは全てが一行というものもあるんだけど
こんな特殊なものにだけ対応でいいのか?
また各タグ毎に""だとダメなのか?
こうすれば行が違ってても大丈夫となるけど
【例】 <h1>h1</h1> → "<h1>"h1"</h1>"
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のマクロの体裁に整えればこれでいけると思う

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

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

必須ではないですが、知識として知りたいなあと思った次第です
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でやってみますです
2020/06/19(金) 18:07:51.43ID:a2rlVyD0
ひょっとするけど
タグ関係なく単に各行を""で括るってだけなんじゃ?
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
え、そうなのですか、、、
2020/06/19(金) 18:57:56.53ID:a2rlVyD0
そもそもキー入力の短縮だし、基本はテンプレート登録だ
"Print to console": {
"prefix": "log",
"body": [
"console.log('$1');",
"$2"
],
"description": "Log output to console"

あと、スニペット登録入力用のvscode拡張機能もあるようだ
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回の処理ではできたのですがどうも悔しいです
2020/06/20(土) 00:10:55.64ID:GUrzgoSo
>>260
AAA.*(AAA.*?BBB).*CCC
2020/06/20(土) 00:29:48.90ID:Spmc6WsU
ランダム文字列の最初(最後)の文字がA(B)だった時は?
2020/06/20(土) 00:44:31.03ID:Spmc6WsU
>>177
画像を右クリック、キャッシュ処理-NGファイル
リンクからでも出来るが再度取得しに行ってしまうのが無駄になるかも
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も複雑な固定文字列ですのでまず連続することはないと思います
あったとしてもそれは仕方ないのでここでは考えないものとしていただければ…
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つの場合のみマッチさせられるでしょうか
2020/06/21(日) 12:19:16.08ID:1s00JmZm
^# [^ ]
270デフォルトの名無しさん
垢版 |
2020/06/21(日) 14:46:34.76ID:RSezRE5h
ありがとうございます

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

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

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

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

改めましてありがとうございました。
2020/06/29(月) 18:05:49.23ID:sN5cgPC+
>>289
で?質問者はなんて書いている?
pythonとかCotEditorとか書いてあるかい?
質問者の環境で失敗する式を書くならせめて
pythonでならこれで出来る、くらい書けやks
2020/06/29(月) 18:09:28.38ID:0ldK0o0F
>>291
質問者が文句を言うならともかく、なんでお前が切れてるんだよ。
自分が正解書いてるのに余計なこと書くなって言いたいのか?www
カルシウムとっとけよ
2020/06/29(月) 18:13:56.28ID:sN5cgPC+
>>290
なんとなくそうじゃないかなーと思った
俺も昔同じ罠にハマった事あるからw
解決して何より
2020/06/29(月) 18:25:35.41ID:sN5cgPC+
>>292
あぁ?理由なら書いてんだろ
おまえのような底意地の悪いゴミカスが気に食わないからじゃ
さっさ死ね
2020/06/29(月) 23:31:59.63ID:G5zcTgI1
質問者そっちのけの場外乱闘にワロタ
2020/06/30(火) 01:41:09.48ID:ZFF7tVch
だが、そこがいい
2020/06/30(火) 13:15:03.17ID:tIigavUn
>>279で\Gの使い方が分かった。thx
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でスニペットを登録する際に、このようにダブルクオーテーションを使用する必要があるのです。
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回でやります
2020/07/03(金) 13:00:37.53ID:hVBUXcHj
Ruby で、" を、\" に置換してから、
冒頭・末尾に、" を追加する

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

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

ダブルクリックで起動できるように、起動部分をVBS で書くかな?
2020/07/03(金) 14:33:24.34ID:zEGBQA4b
正規表現よりもJSON.strinfigy()を使ったほうが簡単
スニペット用のJSONを出力すればいいだけだからJSでもRubyでも好きなの使えばいい
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の引数をどうすればよいでしょうか
2020/07/13(月) 00:49:50.36ID:lkNbIdQ1
>>306
それはJSの質問やろ
RegExpコンストラクターを使って2回エスケープ
2020/07/13(月) 19:20:45.29ID:YirsSrYP
教えてください。基本的な質問で恐縮です。

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

から、
$1 0300
$2 打合せ
$3 中野
$4 0430
を抜き出すにはどのようにすればよいでしょうか。
2020/07/13(月) 19:49:46.79ID:GfOrWnDk
^\d{8}T(\d{4}).*+\nSUMMARY:(.*+)\nLOCATION:(.*+)\nDTEND:\d{8}T(\d{4})
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 中野___

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

ttps://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
補記 5. 実装されているが、既定値では有効にしていない機能
+ 捕獲履歴参照
 (?@...) と (?@<name>...)
 例. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
 使用方法は、sample/listcap.cを参照
 有効にしていない理由は、どの程度役に立つかはっきりしないため
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

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

で対応しています。
2020/07/29(水) 01:26:58.01ID:W2ZwK0DF
/<img[^>]+test\.jpg[^>]+>/g

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

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

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

こんな感じをベースにやってみようと思います。
https://regexper.com/#%7C%28%28%3Ca%20%5B%5E%3E%5D%2B%3E%29%3F%28%3F%3A%3Cimg%5B%5E%3E%5D%2Btest%5C.jpg%5B%5E%3E%5D%2B%3E%29%28%3C%5C%2Fa%3E%29%3F%29%7C
2020/07/29(水) 11:23:00.16ID:d73w3j+s
>>325
こういうの正規表現じゃなくcss selectorやxpath使った方が簡単だよ
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ソースとしては分かりやすくなりそうですね。
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プロパティに不随する値を消したいのです(´・ω・`)
2020/08/01(土) 06:13:27.50ID:xL8Di7oE
〜; か、;〜; の、〜の中に、border という文字列が、あれば良いのか?
337デフォルトの名無しさん
垢版 |
2020/08/01(土) 06:32:02.40ID:Wz14ZhNZ
どういうことですか?
borderプロパティとその値を削除したい感じです
border(プロパティ):red 1px solid(値);
2020/08/01(土) 06:38:27.91ID:hnL660kY
border[^;\n]++;
2020/08/01(土) 06:52:53.24ID:GqyTFtiM
\rも入れといたほうがいいだろ
2020/08/01(土) 06:59:35.99ID:GqyTFtiM
あとborder-color:〜とかも消えちゃうね
2020/08/01(土) 07:21:39.09ID:GqyTFtiM
あとプロパティじゃなくて値やコメントにborderって入る可能性が無いかな?
\bborder\s*:[^;}\r\n]++;?
ぐらいがいいのではないかな
これでもxx-borderとかプロパティがあったり?(無いだろうけど)
、また値を改行されて書かれたりしたらダメなんだが
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
ありがとうございます
できましたが、解説サイトありませんか?
記号がヒットしないもんで、、、
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]+)?:の部分はなぜグループ化する必要があるんでしょうか?
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という指定になってるんですね
2020/08/01(土) 23:05:44.88ID:LBbA9Kf+
>>350
border(-[a-z]+)?: の ? をどこに効かせるか
border-([a-z]+)?: だと - が必須になる(- に ?が効かない)ので border: にマッチしない(border-abcdef: にはマッチする)

正規表現 入門 でググってそれ見ながら ↑のパズルで遊んでみたら?
2020/08/01(土) 23:08:11.58ID:oWJPeiSz
border-radiusも忘れないであげてください...
2020/08/01(土) 23:12:41.55ID:+HD/AULr
説明が下手だと良く言われるでしょ?
笑えるくらいグダグダなのなw
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
ありがとう
手を動かします
2020/08/02(日) 07:46:47.76ID:afjdMLlX
<h1>[^>]+h1>

[^>]+ は、> 以外の文字が、1文字以上
2020/08/02(日) 08:08:51.02ID:7mfh4V7b
<h1>(?>.*?</h1>)
<h1>(?>(?s).*?</h1>)
<h1>(?~</h1>)</h1>

<h1><a id="abc">abc</a>
</h1>
2020/08/02(日) 08:08:54.84ID:SCuZm8dn
^.*?<h1>\K.*?(?=</h1>)
2020/08/02(日) 08:16:49.14ID:piHYqXfk
(?~</?+h1>)(?=</h1>)
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だと出来ないですね
2020/08/02(日) 11:08:50.52ID:SCuZm8dn
削除
^.*?\K<h1>.*?</h1>(.*)
\1

ABCに置換
ABC\1
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
2020/08/05(水) 14:03:13.77ID:xp5DSzK/
スペースの直前直後が[a-zA-Z]ならマッチせず
それ以外ならマッチするという正規表現でいいのかな?
もうちょっと仕様を詰めたほうがいい気がする

John Paul IIの2つ目のスペースは削除?
George W. Bushの2つ目のスペースは削除?
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
ありがとうございます。行頭が残るようですが希望のことができました。
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])
2020/08/05(水) 17:13:59.30ID:xp5DSzK/
ORでは1つで良いような

(?<![a-zA-Z])¥s|¥s(?![a-zA-Z])
2020/08/05(水) 20:14:19.67ID:TJuHD2ix
ゼロ個でも
\s(?!(?<=[A-Za-z].)(?=[A-Za-z]))
2020/08/05(水) 21:50:35.87ID:xp5DSzK/
>>374
へぇーー
速度的にも有利っぽいしこのパターン覚えとくわ
2020/08/06(木) 11:27:45.13ID:mqEUv0B4
成り立ってるそれ?
2020/08/06(木) 11:59:29.23ID:04L3Tvl2
\s(?!(?<=[A-Za-z].)[A-Za-z])
肯定先読み要らないよね。ある方が見やすい気がしなくもないけど
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-->


●希望する結果
あいうえお
2020/08/10(月) 01:07:48.09ID:F9d2D5aE
>>379
RegEx Labちょうど使ってたので
https://i.imgur.com/4xeRITQ.png
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のホスト名を抽出したいです

https://mevius.5ch.net/test/read.cgi/tech/1568640311/l50
http://www.google.co.jp/

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

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

△△△は複数の種類の文字ですね言葉足らずでした
正しくは「ABC」と「DEF」に挟まれた文字みたいなものですね
2020/08/11(火) 14:36:19.90ID:giB5l2E5
$ cat input.txt
https://mevius.5ch.net/test/read.cgi/tech/1568640311/l50
http://www.google.co.jp/

$ grep -Po '(?<=:\/\/).+?(?=\.)' input.txt
mevius
www
2020/08/11(火) 14:37:41.53ID:47EO3/0I
>>386
できなかったか、すまん
これは自分には無理だわ
知識もないのにでしゃばるべきじゃなかったな
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のやり方もありがとうございます
2020/08/11(火) 20:17:56.42ID:Uga1WByL
Javaで

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

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

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

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

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

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

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

後者ならコードをパースして使ってるメソッド一覧を出力するようなツールを探したほうがいいかも
2020/08/11(火) 22:27:44.94ID:xo6O5h7F
^(?=.*?\b(?!set|get)[A-Za-z]++\(\)).*
2020/08/11(火) 22:36:31.67ID:P147PBTZ
(?<=(?:\n|^|\.))(?<!set|get)[a-zA-Z]+\(
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>
2020/09/20(日) 20:06:08.38ID:XyOg3AIQ
>>397
いやもう
\b(?!set|get)\w+\(\)
でいいんでしょ
2020/09/20(日) 23:02:18.72ID:ylbIOeZ5
JavaScript では、これで複数行マッチ(g)できた
/<a[^>]+>.*言語.*<\/a>/g

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

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

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

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

それか、HTML をコピーしてから、やるとか
2020/09/21(月) 04:00:13.04ID:fovUI165
"/(<a(?>[^>]+)>(?>[^<]*?言語[^<]*)<\/a>)(?:<a(?![^<]*言語)(?>[^<]+)<\/a>)*/$1/g"
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とかそっち系おすすめするぞ
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 )
2020/09/22(火) 15:43:36.39ID:fUgbeHE5
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
httpを含まない行の/を年に置き換えたい
●対象データ
https://5ch.net/
2020/9
●希望する結果
https://5ch.net/
2020年9
2020/09/22(火) 16:23:41.31ID:hefdb5Yb
こんなもんでもよろしいでしょうか。
あんまりうまくないと思いますが。
よろしくお願いいたします。

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

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

>>402,405-408
いろいろやり方あるんだね、サンクス
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
※スペースで置き換えた例


よろしくお願いいたします。
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
※スペースで置き換えた例

よろしくお願いいたします。
2020/09/25(金) 14:24:47.87ID:q10QaMUD
>>414
sed 's/ =[^:]*://g'
2020/09/25(金) 16:57:28.24ID:3NF+8528
>>415
ありがとうございます。理解を超えた書き方なので
そのまま利用いたします・・・
2020/09/25(金) 21:14:34.14ID:9rvIESf7
>>416
そんなに難解ではないぞ
: でない文字が0個以上続いて
その後に一文字だけ : があるパターンを
すべてスペースに書き換えるというだけの意味
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
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 → ★
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)
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)
2020/09/26(土) 20:52:05.12ID:yw3DqGjj
長い短いではなく、試行回数が多い記述(行ったり戻ったり何度もやり直すもの)が遅い
そういうのは逆に記述を詳しくしたりして長くするほうが速い
2020/09/26(土) 21:02:00.75ID:aEJhlUXF
>>424
問題なく動作しました、ありがとうございます!
本当に助かりました!
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
2020/09/26(土) 21:51:29.79ID:awo63W4n
>>426
行ったり戻ったりはないんじゃない?
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桁以下なら無駄
2020/09/27(日) 05:56:53.69ID:nMBRMM6J
それは見易さと短さのどちらを優先するかによる
短いだけが正義では無い
2つ程度で見易いもクソも…と思うかも知れないが慣れない者にとっては数字の方が見易いらしい
俺は断然\d\d?派だが

でもこれは(?:\r?\n|\r)→(?:\r\n?|\n)
同じ意味だが
\r
\r\n
 \n
をどう表すか?ってことだから後者のように前方を固定した方が分かり易いと思う
RtoLが関係してたりするのだろうか?
2020/09/27(日) 06:00:47.57ID:Y+KxHJb0
今どき\rだけとか見ないし\r?\nで良くね? 駄目?
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

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

grep -v "◆" ファイル名
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などで
バッチ処理にも使いたいので。
2020/09/28(月) 18:16:12.67ID:RQEq0dPl
>>435
(?:^(?!.*◆)|\G(?!\A))(.*?)▲ → $1■
2020/09/28(月) 18:54:06.13ID:R3xf3P8N
>>448
出来ました!素晴らしいです!マジ感謝です!ありがとうございました。
2020/10/21(水) 20:12:01.53ID:nvjx5i9I
一文字だけで改行するのを
NGにするには
どうしたらいい?
2020/10/21(水) 20:18:35.54ID:+qN3TxkM
>>450
テンプレを読んで出直しましょう
2020/11/06(金) 11:29:16.13ID:xeNq05z2
oniguruma6.9.6 Windows10のVS2019で64bit版だとtestc.exeが無言で終了する、32bitだと正常。
Winodws7でVS2015U3だと64bitでも32bitでも正常に動作する。

これ、以前からWindows64bitが鬼門だなあ
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」など

よろしくお願いします
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
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
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指定)
2020/11/11(水) 05:21:46.13ID:yU9bVv8n
Windows 10、PSVersion 5.1 では、

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

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

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

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

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

お願いします
2020/12/15(火) 08:15:41.96ID:M4wr588R
>>466
($out) = ($in =~ /(.*?(?:X|YY|ZZZ))/)
2020/12/15(火) 08:17:29.03ID:cXhQAKUm
>>466
試してないけど、
\A.*?(X|YY|ZZZ)(?=(X|YY|ZZZ))
2020/12/15(火) 08:49:36.46ID:RAwP5vtJ
>>467-468
ありがとうございます。
最初のでできました。
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で置換できればと思います。
よろしくお願いいたします。
2021/01/11(月) 15:41:19.51ID:8i1ZTkbL
sedはデフォルト行ベースなので改行コードを全部置換すればいい
2021/01/11(月) 15:43:13.55ID:92N2rfT4
/[\r\n]++(?!$)/@/g
こんな感じじゃね?分からんけど
2021/01/11(月) 16:15:14.39ID:rLqIFFRR
s/\r?\n/@/gm;

どうよ?
2021/01/11(月) 16:20:44.13ID:A2M5zvGV
固定長ごとに出てくる改行以外の改行ってことじゃね
改行含めて80文字固定長なら80文字目や160文字目以外の37文字目や53文字目に出てくる改行
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 さんの仰る通りです。
少ない情報の中、皆さん色々とありがとうございます。

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

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

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

それとも、内容の80バイトの部分だけが、渡ってくるのか?
2021/01/11(月) 18:43:53.19ID:5PaUweSP
CR なんとかReturn
LF LineFeed
CRLF なんとかReturnLineFeed
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};'
2021/01/11(月) 21:38:18.11ID:6WXFekQD
>>471
CRLFは@2個に置換でいいんだよね?
CRLFを@1個に置換したら固定長ファイルとして
ファイル構造がおかしくなるわけだし
484デフォルトの名無しさん
垢版 |
2021/01/12(火) 17:48:10.93ID:fqpU06Zc
>>481 carriage
2021/01/14(木) 20:15:05.94ID:uu7IOQ/X
>>479
解決しましたか?
486デフォルトの名無しさん
垢版 |
2021/01/14(木) 20:19:20.00ID:eDcISF88
うざw
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

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

皆さんに教えてもらった方法とは少し異なりますが、ここで質問しなければ検索ワードすら導き出せませんでした。
皆様には感謝してもしきれません。
ありがとうございました。
2021/02/02(火) 23:52:09.94ID:LuWw9dWt
[]で囲まれた単語は/\[.+\]+/gで見つかるけど
文中に複数[]で囲まれた範囲があるとうまくいかない
'['以降で一番近い']'にマッチさせたいんだがどうやるか教えて
2021/02/03(水) 00:24:53.98ID:SY/XoUH2
/\[[^\]]+\]+/g
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
2021/02/03(水) 18:33:27.05ID:sadlF3mb
最短一致ということは行当たりが[0-9a-zA-Z]{7}ではなく別の文字列も含んでいそうな
つまり「0123abc\ndef4567」だけではなく「あいう0123abc\ndef4567かきく」もあるとか

見本出した方がいいのではないかな
2021/02/03(水) 18:41:43.46ID:q3Uucr84
とりあえずこんな感じであとは調整して
https://regex101.com/r/aLWgGd/1
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"だけを除外する方法がわからず困ってます。
2021/02/03(水) 19:12:17.69ID:CJ1qfEuB
>>494
訂正 「大文字と数字だけの7桁に設定変更させてください」って文言が抜けてました

>>493
すいません、その後の調整方法がわからないんです...
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}"
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)*?でできていたのですが、何故か最短にならず困ってます
2021/02/03(水) 19:49:30.28ID:CJ1qfEuB
>>498
真ん中とは+で繋げた"(.*\n)*?"の部分のことです
日本語すら怪しくてすみません
2021/02/03(水) 20:21:28.10ID:CJ1qfEuB
>>498
自己解決しました
スレ汚しすみませんでした
答えてくださった方々ありがとうございました
2021/02/04(木) 12:49:19.54ID:ynIf2rIG
[正規表現の[表現力[は]ネストに]勝てない]
※Perlの拡張とかは除く
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回の場合にのみマッチさせる方法が分かりませんでした
よろしくお願いします
2021/02/06(土) 15:07:35.62ID:bKRJeVsu
(?<!\[)\[hoge\](?!\])
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つ以上ある場合はどうするか?
すぐ思いつく方法としては、変換をループさせて、文字列に変化がなければ終わりとか
2021/02/06(土) 17:17:15.94ID:do+3t/u8
(¥[hoge¥])(?!¥])|[^¥[](¥[hoge¥])
https://regex101.com/r/xhea5T/1
2021/02/06(土) 17:31:09.15ID:nqcg0owg
(\[\[hoge\]\])|\[hoge\] → $1
https://regex101.com/r/xhea5T/2
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
ありがとうございます。
やってみます。
2021/02/06(土) 18:09:33.55ID:EC31O1b+
>>507
すばらしいです
>>506,>>508
残念
2021/02/06(土) 18:21:12.27ID:z9sN/DQY
発想の転換だな
目鱗
2021/02/06(土) 18:57:27.44ID:do+3t/u8
>>507
へぇー、これは面白い
2021/02/06(土) 19:33:52.91ID:nvvrKfMw
>>507
これは賢い
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

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


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

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

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

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

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

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

●検索か置換か?
検索

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


●対象データ

URL1です
ttp://xxxx2/



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

URL2です
ttp://xxxx3/

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

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

\d

と書くと、

[0-9]

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

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

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

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

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

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

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

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

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

それか鬼雲の非包含オペレータで ^(?~err)$
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付ければ取り出せるからな
2021/03/27(土) 18:55:12.69ID:HRW8qdH1
そもそもサクラエディタにはマッチしない行を抽出する機能あるからあまり真剣に考えたことない
2021/03/27(土) 22:37:04.08ID:p2/S5VcH
ログの加工をエディタでやろうとするのは筋が悪いわな
2021/03/28(日) 00:36:09.11ID:p6/Rs1VD
加工というか、ログは必要な部分だけ抽出して見たいという需要はある
2021/03/28(日) 01:38:45.00ID:Ah6uwjvI
たまにトラブルシューティングとかで検索する程度ならLog Parserみたいなやつでそれなりに捗るよ
検索はリニアなので量が増えると遅いけどgrepに比べれば条件指定がしやすい
https://www.microsoft.com/en-us/download/details.aspx?id=24659

速度を求めるならBigQueryとかの検索/分析系のDBに突っ込む
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
2021/03/31(水) 03:07:25.18ID:AtIsL56M
regexエンジンって皆さんどういう基準で選んでますか?
ちょつとググるとcommon lispのcl-ppcreがダントツというベンチが出てきますが本当でしょうか?(このスレで言及が見当たらないもので…)
perl風なのがちょっと気になりますが
2021/03/31(水) 03:15:02.21ID:AtIsL56M
(試せばいいんだけど、環境構築で折れました…)
2021/03/31(水) 07:27:06.36ID:XV2UTtWr
特に制限なきゃ俺の採用基準は
・使おうとする言語で楽に使える奴
だな
あとダントツの基準や何を対象にするかは人によって違うから君の考えるダントツを説明しないと回答しようがないと思うぞ
2021/03/31(水) 08:34:08.22ID:U/8CErR8
>>591
ベンチって書いてあるから速度でしょ
2021/03/31(水) 11:28:59.80ID:Vc5hrOQS
ユースケースで速度は変わるからそれだけじゃなんとも言えないよね

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

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

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

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

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

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

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

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

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

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

ちょっとスレチぎみですまなかった
目処が付いたら効率的な正規表現とかまた相談に来ます
2021/03/31(水) 23:36:10.16ID:1Z3UgTKy
正規表現を考えた人にノーベル賞を授与すべきと思うが
まだ生きているのか、何賞がいいのかなどよくわからない
2021/04/01(木) 18:26:16.61ID:+gZ88zdN
>>604
>>534
2021/04/01(木) 21:17:20.81ID:B5PjUTjB
ed書いてたよね?あれが最初なのか
2021/04/01(木) 21:58:44.86ID:6NDtmvbq
正規表現を考えたのはケン・トンプソンではないみたいだけど
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??じゃあ時系列自体は最初の認識であってるのかな
2021/04/02(金) 11:22:21.17ID:BO0mfYkz
UNIXツールに導入したのと正規表現を考案したのとは全然別のことだよね

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

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

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

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

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

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

609の文章を正しく読み取る能力の無い奴にそもそもこの板は向いてない
2021/04/04(日) 02:42:10.15ID:zADfh3JJ
相手が日本語書いてるからと言って通じるとは限らない
言葉の通じないバカを言いくるめようとするからこうなる
相手に言葉が通じるか見極めるスキルと耐性・スルー力を身に着けろ
2021/04/04(日) 02:44:32.45ID:842owbNJ
喧嘩するにも同程度の知能を有してないとダメってことだな
2021/04/04(日) 06:18:23.10ID:Da11tGDT
単発わらわら湧いてて笑うわ
どっちが必死なんだかw
2021/04/07(水) 17:35:35.06ID:V6KO8k9b
>>604 は単に偉大な先人に感謝してるだけだと思うんだが…
「正規表現を考えた人」って表現したのがまずかったのか?
2021/04/07(水) 17:51:25.47ID:tjlM1gbN
もういいからやめろ
2021/04/07(水) 23:04:12.41ID:Gfnmricb
>>639
ちょっとアレな人が絡んできただけw
2021/04/08(木) 11:35:26.71ID:GjjHuqzu
まだおさまらないてどんだけ悔しかったんだよww
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
で求められます
2021/04/11(日) 16:38:01.79ID:j2wFoRQW
鬼雲
^(\S+)[  ]*|.+\K\s++\1$
^([^|]+)[  ]*|.+\K\s++\1$

.Net だとこんな感じ?未確認
(?<=^([^|]+?)\s*|.+)(?>\s+)\1$
空文字に置換
2021/04/11(日) 17:10:39.69ID:Mhxpz1MA
>>645
[TimeSpan]::new(([double]$start)*10000000).tostring("hh\:mm\:ss\.ff")
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
できました!
2021/04/11(日) 21:55:24.47ID:Mhxpz1MA
>>644
.replace(/^(([^\s| ]+)[\s ]*|.+?)[\s ]*\2[\s ]*$/gm, "$1")
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_+-]+)*@

が正しくないですか?
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@
↑でも合致しますので、ページの説明としては不適切におもいました。
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>単独だと一致するが日付と株価を全部つなげると駄目なので一致するようにしたい

御教示よろしくお願いします
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でも同じでしょうね
2021/04/18(日) 19:18:36.24ID:3ca8v7Vr
>>659
対象データの各行の後ろに実際には日本語はないってことでいいんだよね?
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-]*(?<!-)$
2021/04/23(金) 13:46:23.58ID:lAJIVY64
pythonなら正規表現だけで処理しなくても
抜き出した後に--が含まれるのを除くとかどうにでもなるだろ。
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
おぉぉぉぉありがとうございます。
とっても助かりました!!
おかげでこの先、頑張れそうです。。。(定時まで)
2021/04/23(金) 16:59:46.76ID:vxdqi9h5
自分で理解できない正規表現とか組み込んで、この先メンテナンスできるんだろうか。
一時的なことならいいが
2021/04/23(金) 17:20:20.44ID:S2TaYi95
この程度見れば何してるか理解できるよね
2つは記述は似てるけど考え方が少し違う
2021/04/23(金) 18:40:17.97ID:WE1AtRNI
^(?>-?+[a-z0-9]){0,255}$
2021/04/23(金) 20:39:56.15ID:EZOqnzXJ
条件が曖昧なので2通り(定時回ってそうだが)

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

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

>>675
試したら"?>"など知らんって言われた
2021/04/23(金) 21:20:25.48ID:S2TaYi95
?+も無いみたい
2021/04/24(土) 01:22:36.39ID:fpQdUE+5
先読み後読みは方言が多いものね
2021/04/25(日) 23:25:43.60ID:AhiBFSkY
単純に ^(-?[a-zA-Z0-9])[0,255]$ とかで良かったんじゃないかな
2021/04/25(日) 23:27:08.69ID:AhiBFSkY
>>676と重複した。スマン
681669
垢版 |
2021/04/26(月) 16:56:04.35ID:SkU1AL8m
みなさんありがとうございます。
こんな正規表現良く書いたねーって先輩のレビュアーに言われて、
詳しく説明してって言われたんですが説明できなかったので、
頂いた数々の秘技を頑張って理解していこうと思います。(定時まで)
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になってほしい
2021/05/07(金) 02:44:53.78ID:O1URPzeE
matchAllかwhile regex.exec(string) !== null
2021/05/07(金) 03:03:26.43ID:FTeVmJ7m
解決したわ
gあるとキャプチャ取得されないって書いてあったわ

>>683
すまん
2021/05/18(火) 11:17:29.67ID:XAxheHxj
元データ
1621299591.842348,378,666,111,84

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

最終的な目的としては、ZabbixでCSV形式ログから値を取りたいです。
いろんなサイトを参考にしてるんですが、簡単そうに見えてこれが実現できる例が見つけられず。
2021/05/18(火) 11:25:45.08ID:ZvUkaH8s
([^,]*)
じゃあかん?
2021/05/18(火) 11:27:05.69ID:YmpO7+1q
>>685
それって正規表現で処理する部分なのか?
本当にそのままのデータなら/,/¥n/だろ。
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にしたアイテムを別途作成。
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
依存アイテムの保存前処理で上の正規表現入れてできました!
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

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

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

・1行目の一意な条件
・段落の行数が一定
このふたつの条件満たさないと正規表現だけでは無理じゃね?
2021/05/20(木) 18:58:29.37ID:+Y6kAz1b
段落の最大行数に合わせて置換式書いておいて置換後
2度目に 行頭が "^=" の行を削除 なら行数不定でも出来るだろうけど
美しくないしスクリプトの方が適してると思う
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は絶対にするなよ
なぜでしょうか?
2021/05/20(木) 20:05:29.92ID:w4VGBl/7
>>699
https://regex101.com/r/fg8u8n/1を見ればわかるとおり「対象とする文章も保存される」ため
一般的に漏洩したら問題でしょ?
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
超ありがとうございました!

(肯|否)定(先|後)読みがうまく使えなくて・・・
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の部分は可変長の英数記号です
2021/06/28(月) 18:34:58.46ID:LBPB01By
def getxy(s):
return s[s.rfind('.')+1:s.rfind('_')]


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


不格好だけど
findall("(.+\.)?(.+)_var")[0][1]
でも取れました。正規表現てどんな順番で書いていけばいいのかわからん…
2021/06/28(月) 20:24:42.57ID:dny5MV4o
s='.foo.xxx_var'
re.search('([^.]*)_',s).group(1)
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
2021/06/28(月) 21:44:37.04ID:24AqjAIP
各言語でそれぞれ書き込む事態にでもならなきゃ自分の行いがいかにウザイかを実感できない人なんだろう
まったくの場違いだと言うのにそれに気づかないもんな
2021/06/28(月) 21:48:35.68ID:LpQ5PmfN
>>713-714
なんでお前ら相手するんだ?
716デフォルトの名無しさん
垢版 |
2021/06/29(火) 00:51:17.13ID:f7Gcy3Ty
jien
2021/06/29(火) 13:25:19.76ID:hNYNhvVW
先頭以外の A をすべて S に置換
って一般解としてどう書くの?

AAAEAA を ASSESS にしたいとか
2021/06/29(火) 13:47:51.52ID:g0ftD4JU
(?!^)A
2021/06/29(火) 13:49:05.67ID:FsexkEm/
(?!^)A
2021/06/29(火) 15:16:43.44ID:W3FYE8ZM
>>718-719
センキューベリーmatch
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 ]
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のパターン
これ使い勝手良いね
2021/07/02(金) 14:54:06.60ID:DfuUcF9q
>>723
pythonなら正規表現だけにこだわらなきゃ<¥d+>さえ拾えばどうとでもなるだろ。
2021/07/02(金) 15:02:33.69ID:u75TM6NR
このスレって有能な人いてステキ///
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 は空なので削除される
2021/07/02(金) 17:12:17.66ID:3MNaXJzy
<><abc><value<123<x>>/value><>
こういうパターンはあるのか?
2021/07/02(金) 17:17:38.07ID:+v1CDJ0v
> ●説明
> <数字>以外の<>を外したい
735デフォルトの名無しさん
垢版 |
2021/07/02(金) 17:22:56.52ID:TPqIrTa2
>>732
あーなるほど
すごいなあ
2021/07/02(金) 17:26:47.31ID:3MNaXJzy
>>734
だからもしこういうのがあるのなら、上の回答じゃダメじゃん
<abc>は消えないぞ
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
でもさー
結局のところ自分の理解できる範囲で対処できないとブラックボックスでしかないから保守できないよな
2021/07/02(金) 19:31:10.32ID:aZbrSReX
掲示板で説明できることには限界があるからな
741デフォルトの名無しさん
垢版 |
2021/07/02(金) 20:03:30.56ID:6v6/dX3F
>>736
なんの環境だと消えないんだろう
2021/07/02(金) 21:23:02.60ID:8o23sM1E
ネストがある構造物は、パーサーを使わないと保守できない。
Ruby のNokogiri みたいな、XML/HTML パーサー

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

アンチパターンの常識

モジュール・デザインパターンの知識が無いから、
何にでも正規表現を使う、香具師と言われている
2021/07/02(金) 21:48:40.11ID:QH8xfbBh
ネストがある構造はRDBで管理するという方法もあるな
2021/07/02(金) 23:39:59.09ID:aZbrSReX
>>727 のパターンは構造を見てない
ノンマッチな><だってホイホイ喰っちまう奴なんだぜ
745デフォルトの名無しさん
垢版 |
2021/07/03(土) 03:31:09.01ID:mR1/t/06
manの解析させるルーチンで無制限にネスト潜るの一度だけ書いたこと思い出したわ
2021/07/05(月) 13:22:47.46ID:a0633hZA
1行に「半角スペースと全角スペースが3文字以上ある時」を検出するにはどうすればいいのでしょう?
2021/07/05(月) 13:38:25.68ID:yW7vm9zn
(.*\040|.*\201\100){3}
とかか
2021/07/05(月) 13:43:46.12ID:a0633hZA
>>747
ありがとう試してみます
2021/07/05(月) 13:46:58.03ID:yW7vm9zn
>>747
SJISだったらこうしないとだめか
(([^\201-\237\340-\357]|[\201-\237\340-\357].)*(\040|\201\100)){3}
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)$
2021/07/05(月) 21:45:00.65ID:oDqG8EZQ
(\r(?!\n))|((?<!\r)\n)
でどうだろう
2021/07/05(月) 22:18:11.17ID:lQZs6uo5
\r$|[^\r]\n$
じゃダメなのかな?
2021/07/09(金) 02:51:04.10ID:Cp8DUWjQ
文中もしくは単独で特定の文字列がある場合を除く
ってどうやるの?
2021/07/09(金) 07:34:09.88ID:XAnKbPPo
^(?~特定の文字列)$
^(?!.*特定の文字列).*$
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
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
2021/07/11(日) 19:12:06.67ID:nwBpGTGG
近似解のなにが近似なのかわからん
2021/07/11(日) 21:26:31.70ID:I5zdxibD
>>758
×非包含パラメータ
○非包含オペレータ
2021/07/12(月) 09:02:05.45ID:twuyj4UD
>>759
他の正規表現とつなげると問題が起こる。
例えばコメントの直後にbbbが来るのを \/\*.*?\*\/bbb として
/* */aaa/* */bbb
にマッチさせると /* */aaa の部分も含んで全体がマッチしてしまう。
2021/07/12(月) 15:36:01.58ID:mfnmNh+4
なるほど
ありがとうございます
2021/07/12(月) 16:40:03.21ID:mfnmNh+4
でも少なくとも解2でいいんじゃないか
表現力もたいして変わらない
数文字減るだけののシンタックスシュガーに見える
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
無駄無駄無駄〜
2021/07/29(木) 14:21:22.66ID:J3IrN4Ey
>>764
-aも足してgrep -nUaPでも試してみては?
2021/07/29(木) 18:49:46.76ID:QYfnOwKH
0xが邪魔だったりして
2021/07/29(木) 21:48:27.13ID:j2JISquU
>>764
そのテキストファイルはASCIIなの?
UTF-16だったりEBCDICだったりしない?
2021/07/29(木) 21:52:11.90ID:j2JISquU
>>764
なぜかマッチしないのはcygwin付属のgrepコマンドのバグかもしれないし、
cygwin本体のバージョンを書くか
ダウンロードサイトも書くべきかと
2021/07/29(木) 21:56:20.74ID:j2JISquU
>>764
あとは-Uオプションを外してどうなるか試してみるとか
2021/07/30(金) 00:49:58.41ID:N3W+nBLQ
単純に\nがgrepに食われてるだけだと思う

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

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

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

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

↑これは分かるけど

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

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

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

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

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

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

文字にするとややこしいけどイメージはしやすいな
2021/08/18(水) 10:53:19.72ID:tjZSC3cn
> ニュー速VIP板ニュー速板

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

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

urlに'があるurlだと'の後が取得できなくなる。
2021/08/20(金) 01:44:25.03ID:kY+JN5EE
>>783
間違ってるけどメタ文字解説読めばそんなこと分かるだろ
2021/08/20(金) 03:11:03.15ID:WG/a2fPY
厳密なのはいつもの
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
2021/08/20(金) 10:49:36.74ID:nGw5woYj
これなんで5matchsなの?
https://i.imgur.com/nxnFsqo.jpg
2021/08/20(金) 10:57:32.68ID:OdebcBr3
ピンクの線が5本表示されとるやろ
2021/08/20(金) 14:58:31.43ID:bheJjdjJ
(abc){0}(def){0}
2021/08/20(金) 23:05:42.97ID:P1i1BIPh
>>788
>>787
ああなるほど一文字ずつマッチする上に空文字もマッチするのか

でもtest stringをabcdefとして3マッチになるかと思ったら2マッチなのな
2021/08/20(金) 23:47:12.81ID:WG/a2fPY
基本的にgreedyだから
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で共通で使えるものがいいんですが。
2021/08/25(水) 05:11:18.76ID:DJHRbWtG
それ正規表現の話じゃないよねスレチ
ファイル名降順(昇順)で頭に(new連番-)付加ならFlexible Renamerとか色んなリネームソフトで出来る
任意の順ならバッチやPowerShell
後は該当スレでどうぞ
794デフォルトの名無しさん
垢版 |
2021/08/25(水) 10:49:27.59ID:DUWK9/dO
正規表現では連番は無理なのですか?
2021/08/25(水) 11:00:10.58ID:1f33yFBx
不可能じゃないけど、近所のコンビニへ行くのに絶対にプライベートジェットで行きたいですとか言われてる感じ
もっと他に簡単で向いている方法があるでしょって話
2021/08/25(水) 11:02:04.86ID:pNx7VLY8
文字列の集合を表す記法が正規表現
連番という集合を示せるならできるかもね
自分は知らないけど
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にしました。
これより新しくて良いソフトってあるんでしょうかね。
2021/08/25(水) 11:40:19.51ID:b/tFJsW5
質問続けるならせめて礼くらい言ってからにしろ
そもそももうスレチなんだから他へ行け池沼
2021/08/25(水) 12:25:51.34ID:pNx7VLY8
>>798
>>793読んだ上でその書き込みなら流石に傲慢が過ぎる
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
2021/08/25(水) 18:27:43.69ID:WqMYsX4p
複数行モード出なくても改行に一致させる事は可能ですか?
2021/08/25(水) 23:49:57.87ID:HwQGLaDN
一致と呼んでいいのか分からないけど$が改行に対応すると思う
文字セットには使えないけどab(c|$)みたいな分岐は可能
2021/08/26(木) 04:30:31.47ID:UZ8JqWyB
複数行モードって何?

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

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

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

両方にヒット表現をお願いします
2021/08/27(金) 16:35:14.96ID:zrk6+77w
^a
2021/08/27(金) 16:35:19.05ID:7nxBSwRn
そのまんまであれば
aa[●□]abbbcccd[●□]ddeee
2021/08/27(金) 16:47:10.72ID:kYh+qXrW
あ、そうか
aa●abbbcccd●ddeee
aa□abbbcccd□ddeee
はヒットしてほしくないのです
2021/08/27(金) 16:56:56.42ID:mGcBpOgN
じゃあ
(aa●abbbcccd□ddeee|aa□abbbcccd●ddeee)
2021/08/27(金) 17:06:33.96ID:kYh+qXrW
やっぱりそれしかないですかね。実際は
(.*●.*□.*)|(.*□.*●.*)
でこうなるのです
https://i.imgur.com/4VUmVsL.jpg
2021/08/27(金) 17:09:48.92ID:56S9Iaf9
全体をマッチ対象にしたいの?
820デフォルトの名無しさん
垢版 |
2021/08/27(金) 17:45:24.98ID:ldxLRyEW
>>816
aa([●□])abbbcccd(?!\1)[●□]ddeee
2021/08/27(金) 19:46:53.21ID:FthY+dex
EmEditorはしらないなー
(?m:(.*●.*□.*)|(.*□.*●.*))
2021/08/28(土) 05:34:33.30ID:Z+kCS9um
.+?([●□]).+(?!\1)[●□].+
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/
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に変更したら出なくなりました。
いろいろ新しく知ることが出来ました
2021/08/28(土) 10:38:46.36ID:gjZsNEUJ
(?!\1)ってどういう意味?
2021/08/28(土) 11:02:34.45ID:o77XzsS5
>>825
「直前に"一つ目のパターン"がない位置」を指すメタ表現
2021/08/28(土) 11:25:40.94ID:m2ZH6alf
日本語的には"直後に"じゃね?
読んで行く方向、カーソルの前方だとしても直前だと意味が逆転しそう
2021/08/28(土) 13:02:42.57ID:rTzGvJSm
>>820
この(?!/1)は分かるけどその次の[●□]との繋がりが分からん
どういうこと?
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) は (?!□)

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

●検索か置換か?
検索

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

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

●希望する結果

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

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

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

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

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

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

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

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


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

「(?~(?=ネコ).)(?~.(?<=ネコ))」
「ネコ」 不一致
「吾輩はネコ」 不一致
「吾輩はネコである」 不一致
2021/09/04(土) 15:57:28.08ID:e0R2hmQ/
この不在繰り返しを、Python3.6のreモジュールで書く方法はありますか?
2021/09/08(水) 12:26:11.39ID:R6BptgGx
むずすぎて全然分からん
まぁPythonで使えんみたいやしいいか
2021/09/08(水) 14:14:17.23ID:QqH5BAVe
文字列の否定は否定先読みで
re.findall("「(?:(?!ネコ).)*」", string)
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 一致
2021/09/15(水) 04:13:47.03ID:2Sm06Jhf
(?~式) 非包含式
(?~) 非包含オペレータ(演算子)  (被演算子は~と)の間に内挿される)
/* 田中さんの元論文がこの使い分けを間違ってるわけだが */

概念を語る場合は、繰り返しや文字クラスや選択のように、単に「非包含」と呼ぶ
848デフォルトの名無しさん
垢版 |
2021/09/17(金) 16:17:14.17ID:J/w/zJeW
自己肯定感の低い人が仕事できない本当の理由
https://www.youtube.com/watch?v=BZyX8g1XuXI
【致命的】個人で稼ぐのに向いていない人の特徴7選
https://www.youtube.com/watch?v=PqqCiMMHMy4
自己肯定感の低い人にオススメの副業5選
https://www.youtube.com/watch?v=n2uiQcMmOAg
【質問力】雑魚と思われてしまうダメな質問の仕方5選
https://www.youtube.com/watch?v=eQceW_AcJjM
集団の中で落ちこぼれ組がやりがちなこと
https://www.youtube.com/watch?v=6cuCPaRvAv0
【人気者の基準】有名にならないと言われない暴言3選
https://www.youtube.com/watch?v=YhK7zgvRha0
【本質】みんながフリーランスになれない本当の理由
https://www.youtube.com/watch?v=vA4hTswPgEg
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 にしたい
2021/09/27(月) 18:20:46.41ID:QHV+6MAZ
そのソフトの機能とあなたがしたい事が正確にはわからんが、
正規表現で自動でディレクトリ名は入らんよ。
それをやりたかったら普通はプログラミングの領域。

単に先頭に指定文字列を入れたいなら
検索:^
置換:○X△.zip
2021/09/27(月) 18:36:25.58ID:W1wq+c4c
>>849
^:○X△.zip

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

もし処理対象アーカイブが一定数以上あったり、定期的に一定数以上のアーカイブに対して同処理が必要になることが予想される場合、自分なら、1) 作業フォルダに解凍、2) リネーム、3) 再圧縮、4) 元アーカイブに上書きコピー、5) 後片付け、を指定フォルダ以下のアーカイブに対して実行するバッチファイルを書いて、それを実行すると思う(7z)
2021/09/27(月) 19:31:31.78ID:wTAYfgov
>>850
親ファイル(zipファイルのことだよね?)の名前を人手で入れるなら
^:○X△.zip
みたいな感じで行けるんじゃね?
http://frostmoon.sa
kura.ne.jp/gui4reces/gui4reces0018ss_rename.png
2021/09/27(月) 22:31:45.47ID:2WG9Jybb
ファイル名に拡張子以外のドットは特別な理由でも無い限り使わないようにした方が良い
あと質問内容は正規表現では無くソフトの使い方のようなので微妙にスレチ
作者の宣伝?
855デフォルトの名無しさん
垢版 |
2021/09/28(火) 09:31:17.72ID:fMeX4han
皆さん、ありがとうございます。
せっかくアドバイスを頂いたのですが、何が何やらさっぱりで・・・
せめて正規表現を少しでもかじってから再度教えを請いたいと考えていたので返信が遅れてしまいました。
しかし・・・
正規表現のサイトを少し覗いてみたのですが私には敷居が高すぎて・・
もう少し頑張ってみるつもりですが、かなりきつそうです
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)などを丸ごとです。
お願いします。
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文字の数字です。
2021/10/04(月) 17:58:58.66ID:bhYXHQji
>>862
¥はバックスラッシュに置き換えな
^.*?¥([0-9]¥)
2021/10/04(月) 18:06:36.32ID:bhYXHQji
あと、()が全角と半角では扱いが異なるから書き込むたびに変わってちゃダメ。
全角と半角両方に対応させたいなら^.*?[¥((][0-9][¥))]
2021/10/04(月) 19:38:23.48ID:zsq22U2a
拡張子は含めるの?
2021/10/04(月) 19:42:51.89ID:qPYIGz+e
.*\([0-9]\).*
2021/10/15(金) 13:06:48.14ID:Wvwj+LKl
うんこおおおおおおおおおお

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

長文が自己紹介過ぎて笑える
885デフォルトの名無しさん
垢版 |
2021/10/16(土) 11:59:55.88ID:6ga3nra2
MUST、SHOULD、MAYの理解が不完全な人はなんでもMUST扱いしたがる
冗長性を理解できない着物警察の思考様式
2021/10/16(土) 12:03:18.95ID:qP61rC0r
おれも-はエスケープするな
つか+もエスケープする
エスケープ可能なのはエスケープしとく
2021/10/16(土) 12:30:42.49ID:9AQLH6H/
俺は極力しない
2021/10/16(土) 12:33:05.07ID:FxLIumwg
しないんじゃないかな
2021/10/16(土) 12:39:14.15ID:igFsF4z+
ま ちょっと覚悟はしておけ
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]+$
こうか
2021/10/16(土) 13:52:27.11ID:wy7RR+Lb
>>891
re.fullmatchで
895デフォルトの名無しさん
垢版 |
2021/10/16(土) 14:12:10.41ID:UbsVp7JO
fullmatchってあったのか
そりゃそうか
2021/10/16(土) 14:38:49.46ID:6SnREp4P
正規表現スレで、円マークという誤解を招く表現はやめてほしい
バックスラッシュと表現すれば誤解を招かない
2021/10/16(土) 15:20:00.23ID:1kPG7eLG
回答で円記号を使われるのは気になる
わざわざ置き換え指示するくらいなら最初から正しく書けばいいのに
2021/10/16(土) 15:25:19.02ID:CFrnAbxP
承認欲求を満たせないと見るや他人を下げて自分を上げようとする人は
自己評価は高いんだけど周りからの評価は低く不満を溜め込んでるタイプ

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

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

攻撃の度合いが強い人ほど病んでる度合いも強い
2021/10/16(土) 17:49:26.91ID:hNeyEW9L
「俺は\でエスケープしてるけど気になるなら取ってくれ」
で済ませられなかったのかねえ
2021/10/16(土) 18:00:14.65ID:QrnrtPBD
>○○してもいい」が「○○しなければならない」に置き換わってしまう人
これ自分の紹介かよ
エスケープしなければならない病に罹ってるな
2021/10/16(土) 18:03:05.28ID:a3RnthCp
香ばしい奴にイチイチ構うな
そうやって相手するからそこに価値を見出してレス乞食へと変質して行くんだ
スルー出来ないおまえらも似たようなガイジ予備軍
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]" が同じ動作をするのでひとまず安心していい
2021/10/16(土) 18:50:30.23ID:hNeyEW9L
C#等、javascript,Powershell,WSH、Rubyなど全部同じ動作する
エスケープを強要するものがあるのなら実例を出してみろよ
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
2021/10/16(土) 19:02:53.95ID:6ga3nra2
>>909
実際のプログラムがどう動くかはあまり重要じゃないね
仕様書がすべてだよ
2021/10/16(土) 19:03:26.64ID:hNeyEW9L
>>910
引っ込みがつかなくなったのかよ
後付の理論だってことは、>>874-875を見ればよく分かるぞ
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
2021/10/16(土) 19:12:23.95ID:6ga3nra2
>>912
何度も書くが、MUST、SHOULD、MAYはまったく違うものだよ
混同しないことだ
2021/10/16(土) 19:17:00.69ID:6ga3nra2
>>909
.NETを列挙せず、C#・PowerShell・WSHを別々に列挙した時点で ID:hNeyEW9L が素人さんなのはよくわかった

>>913
訂正ありがとう
2021/10/16(土) 19:23:50.02ID:6ga3nra2
Onigmoなにそれうまいの、という人のために説明しとくとサクラエディタの正規表現はOnigmoを採用してる
917デフォルトの名無しさん
垢版 |
2021/10/16(土) 19:27:24.61ID:BO6yK2Ly
C++の正規表現クラスは引数でJavascriptの正規表現を選べます。
これは良いかもしれない。
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は多くの人がうれしくなるのでは?
2021/10/16(土) 19:47:08.22ID:1zNIFcv9
WSHの正規表現って言語エンジン(VBScript、JScript等)それぞれで実装されてるのかと思ってたけど、俺の勘違い?
.NETの正規表現エンジンが使われることがあったりする?
2021/10/16(土) 20:29:00.06ID:Kqq2n1Gw
マジキモいっすね
エスケープするしないの問題じゃないのに「なにか勘違いしてる人多いみたいなんで説明しとく」てwww
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.
2021/10/16(土) 20:39:03.57ID:I2E7AJLT
>>920
スクリプトエンジンの指定(jscript9等)はできるけど、正規表現エンジンの指定はできないはず
少なくとも自分は知らない
2021/10/16(土) 20:43:45.26ID:75KO56vr
論理的に反論できなくなると人格攻撃するしかなくなっちゃうんだろうね
2021/10/16(土) 20:50:25.14ID:hNeyEW9L
>>922
さすがに[b-d-z]は気持ち悪いな
2021/10/16(土) 20:56:26.53ID:kPRtjNBv
質問した人は気を悪くしたかもしれないけど
>>873の質問はいい質問だったね
いろんな意味で
927デフォルトの名無しさん
垢版 |
2021/10/16(土) 20:56:48.25ID:6ga3nra2
>>922
訂正ありがとう

それはさておき、先頭または末尾でハイフンを指定する場合はエスケープしてはならないみたいな仕様はあるんだろうか?
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
理由をひとつだけに絞ってるのはなぜ?
人間側の理由、仕様側の理由、それぞれあるでしょ
2021/10/16(土) 21:05:15.08ID:hNeyEW9L
>>930
レス内容と時間経過で、最初はそんなことを露ほども思ってなかったのが
理由を探してそっちのほうに話を持っていったのが分かるからさ
932デフォルトの名無しさん
垢版 |
2021/10/16(土) 21:12:06.82ID:6ga3nra2
>>931
全然違う。>>874-875は人間側の理由として完結しているけど追加で、仕様側の理由も書いただけだよ
書いた本人が言ってるのに推理小説みたいに無駄に裏読みしても意味ないよ
あなた、ひょっとしてモリカケ問題にのめりこんでるタイプ?
2021/10/16(土) 21:12:31.27ID:PMQb3sBw
>>884
>>891でお礼の一言もないから自演なのかやっぱ
934886
垢版 |
2021/10/16(土) 21:15:28.50ID:75KO56vr
思ってたよりエスケープ可能なのはエスケープする人はいないもんなんだな
オレは機械的にエスケープしてるのも少なくないのでより多めではあるんだろうけど
2021/10/16(土) 21:17:13.92ID:hNeyEW9L
>>932
>>875で、してもいい、しなければいけないに拘ってるところが
仕様に明記されてないから書くべきとの哲学を持ってる人がするレスではない
ということ
2021/10/16(土) 21:24:54.32ID:6ga3nra2
>>935
仕様に明記されてないということは「仕様外」という意味にしかならないよ
書くべきと思い込んでいるのはあなたのほうだし、技術板で哲学とかなにを言いたいのかわからないし
精神病んで休職してるのが伝わってくるから、そのくらいにしとけば?
2021/10/16(土) 21:31:11.06ID:iYaW2gC3
>>923
指定したスクリプトエンジンの中で .NET の正規表現エンジン使う奴はあるのか?
ってことだと思う
俺の知る限り多分ない
2021/10/16(土) 21:33:41.76ID:hNeyEW9L
>>875は、書かなくてもいいというのを肯定してて、けれども書いたほうがより良い
という考えでないと出てこない
最初から書くべきだと思ってる人なら書いてない文章だ
2021/10/16(土) 21:36:54.55ID:PMQb3sBw
質問者と回答者(ID:6ga3nra2)が同一人物で自演って事?
2021/10/16(土) 21:43:42.85ID:6ga3nra2
>>938
マジで病んでるな
好きなだけ赤木ファイルの謎を追いかけたらいい
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)
2021/10/16(土) 21:57:37.86ID:kP7MiIn1
色々な意味や方面でガチの人は理解しないし理解されないよなあ
943デフォルトの名無しさん
垢版 |
2021/10/16(土) 22:11:08.63ID:caYv+2Nn
ホモ以外は帰れ
2021/10/16(土) 22:24:05.01ID:6ga3nra2
むしろホモが帰れ
2021/10/16(土) 23:17:21.33ID:senq7Tfg
あやふやだったら全部エスケープすればまぁ動く
同僚やlinterに文句言われるくらい
2021/10/16(土) 23:39:42.65ID:1zNIFcv9
>>923
>>937
ありがとう
WSH共通のオプション的なものにしろスクリプトエンジン側にしろ、.NETの正規表現エンジンが使われるケースが思いつかなかったんだけど、一般的な認識みたいで安心したよ
2021/10/17(日) 07:56:05.72ID:mIAwyFSs
esc幾つも入れるより、\Q\Eの方がスマートな気がしてるんだけどあんまり使われないのは何で?
2021/10/17(日) 08:28:28.33ID:N+Nl+RmC
Perl以外じゃ使えないから
まぁ、他でもメタ文字をそのまま使えるオプションが有るのがほとんどだけどね
2021/10/17(日) 10:24:56.81ID:mIAwyFSs
そうなのか、ありがとう
2021/10/17(日) 18:01:06.39ID:p8oc8mfi
Pythonお使いの方、正規表現は、reとregexのどっち使っていますか?
regexがアトミックグループをサポートしている、などという話は知識として知ってはいるのですが、
reが残っているということはreにも実用上の優位点があるということですよね。それは何なのでしょうか
2021/10/17(日) 21:30:56.51ID:E1qJZsEj
ないよ。regex使えるなら使うべき
2021/10/17(日) 23:24:37.14ID:rEReGylo
コアに入れてしまった以上、気楽になくせないだけじゃないの
2021/10/18(月) 00:56:20.45ID:fcbr/1wh
昔reで書いたコードを書き直さずに使えるのが最大のメリットだと思うけど
2021/10/18(月) 01:10:10.73ID:IgDyba7Y
「後方互換を破壊するに足る理由」が無いので、そのまま残されている
2021/10/18(月) 07:31:05.25ID:XtnzC8HY
>>934
だってエスケープしてるなんて
おともだちに知られたら恥ずかしいし
956デフォルトの名無しさん
垢版 |
2021/10/18(月) 08:28:55.87ID:CI2UP6iO
エスケープは恥だが役に立つ
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にしかない有用機能ってなにがあるの?
2021/10/18(月) 14:36:27.24ID:TKHV76Qy
日本語などの処理とか
2021/10/19(火) 11:49:02.44ID:q6QnFAh4
pythonistaでregexインストールしようとしたら、c言語使ってるんで無理だよ的メッセージが出ました。
そうなると、re使うしかないわけで、そういう意味では存在価値ありますね。
2021/10/19(火) 13:36:44.32ID:WfNe98xT
reがregexを取り込めばいいってだけなのでは?
少なくともreが対応してる範囲でregexも同様に使えるということだし
あまり大きいと組み込み用途とかでは難しいのかもしれないけど

urllibはそんな感じで後発を取り込んでるよね
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
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→異なる単語が入っていると不一致

簡単な書き方はありますか?
2021/10/27(水) 20:44:43.49ID:dNMmh9m9
>>966
var str = 'なんか';
str.replace(/abc|def/g, '');
if (str.trim() === '') console.log('一致');
else console.log('不一致');
2021/10/27(水) 21:13:34.52ID:dNMmh9m9
str = str.replace(/abc|def/g, '');
だった
969デフォルトの名無しさん
垢版 |
2021/10/27(水) 21:45:36.38ID:TntzyF5u
ありがとうございます。
ちなみに正規表現だけで上記は可能ですか?
2021/10/27(水) 22:06:08.57ID:BM1dPtJu
javascript使うんだろ
何で他の式を使ったらダメなの?
まあorに空白を入れとけばtrimは不要かもね
あと最大1回とは2回出るとダメってことなのか?
abcabc→不一致?
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 ありだと思います。
2021/10/27(水) 23:05:28.48ID:h1zi3AMh
967はabcabcに一致するんじゃないかなあ

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

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

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

のように、【】の部分で変数を引用するイメージです。
2021/10/30(土) 20:12:23.79ID:FdnrrKGs
>>976
普通に文字列で持っておいて結合するだけじゃダメなの?
hoge = r'[abcd]'
...
r'(' + hoge + r'|[efg])'
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?)
となります。
2021/10/30(土) 20:19:09.28ID:y9dUwbDd
3つを合成する時に間に変なスペースが入ってしまっていて、マッチを妨げていました。

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

ありがとうございます。
2021/10/30(土) 22:28:52.36ID:lg5lGqAB
>>978もですが色々アイデアありがとうございます。

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

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

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

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

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

のように直しました。
abc のあとにdefが来るとき、
defのあとにabcが来るとき、
これらの場合のみ空白が必須なので、
空白と後に続くものを、まとめて括弧に入れるべきでした。
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?$
2021/10/31(日) 00:49:08.05ID:Os0N65jy
何度もすいません。
行頭と行末は、*を使うつもりが、?を使ってたから変なコメントになってました。

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

これで決定校です!
2021/11/03(水) 09:32:14.31ID:u//4ywbB
「正規表現一覧表がパクられた」――DeNAのRPAサービスで個人ブログからの無断転載が発覚 取り下げに
https://www.itmedia.co.jp/news/articles/2111/02/news174.html
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
客観的に観てもコピられた可能性は高いと思うが
裁判で勝てるかどうかは微妙
2021/11/03(水) 13:24:24.94ID:U7i9huA/
そんなことより改変もまともにできないのはヤバい

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

https://pbs.twimg.com/media/FC7n-5zaUAETKej.jpg
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
2021/11/03(水) 14:56:33.55ID:V2aH3YMI
態と元・先の使い方がおかしい
パクられ先では?
2021/11/03(水) 16:19:18.89ID:epFspok0
そもそもgooooooogleにしておかないでgo...gleにしてる時点で
元パクリサイト(今回の騒動の主)のパクリ確定だな
2021/11/03(水) 16:22:38.72ID:epFspok0
ん? 上の2つどっちが先なんだ?
2021/11/03(水) 16:31:21.33ID:epFspok0
アーカイブされた時間は真ん中が先だな
先後がよくわからんので、>>995の結論については取り消しておく

正規表現を使わない場合、同じ文字の繰り返しって、...以外ではどう表現する?
gogle, google, gooogle ... という例ならある程度わかるんだが
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
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
https://mevius.5ch.net/test/read.cgi/tech/1635936601/
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 778日 21時間 37分 11秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。