Regular Expression(正規表現) Part15

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2019/09/16(月) 22:25:11.87ID:enU8we0d
Regular Expressionスレです。

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

前スレ
Regular Expression(正規表現) Part14
https://mevius.5ch.net/test/read.cgi/tech/1489511075/


次スレは>>980宜しく
天ぷら等>>2以降
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
だってエスケープしてるなんて
おともだちに知られたら恥ずかしいし
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況