Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/03/15(水) 02:04:35.47ID:e01p03UP
Regular Expressionスレです。

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

前スレ
Regular Expression(正規表現) Part13
http://echo.2ch.net/test/read.cgi/tech/1415149975/


次スレは>>980宜しく
天ぷら等2以降
2017/05/31(水) 11:16:23.49ID:u9qpXxTe
>>135
正規表現で置換
とか知らない人が聞いたらアレだもんなw

>>133
正にその世代だけど
昔のperlは正規表現抜きでも変態記法満載だったから
だんだん昔のコードは読めない人が増えてきてる

$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
10年ぐらい前のメモからのコピペだけど見ただけで目眩がするw
2017/05/31(水) 11:27:09.17ID:u9qpXxTe
>>132
一概にシステムといっても色々あるからね

機器制御系システムなんかだと正規表現を使う機会なんてまず無いだろうし
WEB系の事やってるなら何だかんだで正規表現を使う機会はそこそこあるだろうし
2017/05/31(水) 11:46:52.88ID:AV1cHHAT
CSV は、" などのエスケープについて、様々な方言があるから、正規表現では無理。
CSV の方言・規格を確定させてから、Ruby を使うべき

バグのほとんどが設計段階・仕様で生じる。
方言さえ確定していれば、バグらない
2017/05/31(水) 11:53:36.36ID:L1juUrGR
>>135
会社の忘年会では正規表現やりますって言ってパンツ脱ぐのか?
2017/05/31(水) 12:15:57.63ID:u9qpXxTe
>>138
仕事内容にもよるけどそんな事はない
なんせ世の中にはExcelのデータが糞ほどあるので
「Excelルールのcsvを正規表現で処理する+α」の仕事だけでも
たぶんそこらのリーマンよりは稼がせてもらってきたよ

日本の企業の大半は中小企業なわけだけど
ほんと信じられないほど無駄な事やってる会社がたくさんあるからね
こんな時間に2chなんてやってられるのも、そのお陰ですわ
2017/05/31(水) 12:35:12.54ID:MQUo5X9j
万能な処理って得てして使いにくいしな
142デフォルトの名無しさん
垢版 |
2017/05/31(水) 12:44:32.50ID:gy6WrZsR
>>138
Rubyを使うべき、と言う唐突な結論以外は同意できる。
Ruby (のようなスクリプト)を使うべきなら完全に同意できたのに。
143デフォルトの名無しさん
垢版 |
2017/05/31(水) 16:04:23.05ID:jFN45aLj
>>142
少し日本語は下手だが、
事前にCSV の方言・規格を確定すべし
という主張と読んだ。
2017/05/31(水) 17:04:05.88ID:MQUo5X9j
なぜrubyなのかよく分からん
多少正規表現エンジンの種類やバージョンの違いはあれど
正規表現はperlでもPHPでもJavaScriptでもPythonでも使えるし
rubyの正規表現なんて昔はコールバック処理するのがくそ面倒だった筈だが
2017/05/31(水) 17:10:42.06ID:BtqSGsFQ
正規表現を使わずにrubyでやれと言いたいのでは
まあ確かにrubyは標準で簡単強力なcsv処理ができるけど
ruby以外でのcsvの処理の仕方を知らない知識不足な人の戯言にしか見えない
2017/05/31(水) 17:29:50.80ID:nyiBm3r5
excelでも正規表現使えるけどな
2017/05/31(水) 17:55:47.82ID:b1E/NNUq
>>144
たぶんrubyのような言語と言いたかったのだと推察致しまする
148デフォルトの名無しさん
垢版 |
2017/06/01(木) 04:08:09.64ID:+TrYOuL5
>>134
VB(今時は.NET)では入力チェックとかでよく使うからお前の偏見だよ。
149デフォルトの名無しさん
垢版 |
2017/06/01(木) 04:08:53.15ID:+TrYOuL5
>>134
いい忘れたがサクラのマクロもよく使う。
2017/06/01(木) 05:13:28.59ID:gHUhkzd0
>>148
VBやってるやつが皆そうやってると思うか?
それこそ偏見だ
2017/06/01(木) 05:24:23.62ID:gHUhkzd0
>>149
お前個人の話かよ
2017/06/01(木) 05:39:57.85ID:pPoV2n06
そもそもテキスト処理じゃないと使わんよ
使う使う言う奴はプログラミングの分野が偏ってるんじゃないか?
2017/06/01(木) 06:10:29.36ID:htPbJpjE
エンドユーザーに近い分野で使うというより、開発者が使うものでしょ。SQLとかと同じ。
2017/06/01(木) 08:16:36.86ID:YbQp1MN1
>>153
そりゃプログラムから使うものだから開発者しか使わんよ
そう言う意味じゃなくて利用者が入力した値の妥当性確認とかに使うケースが多いんじゃね?
って話なんだろ
2017/06/01(木) 09:37:01.51ID:OU3iOJ/C
>>148
これが偏見な
2017/06/01(木) 10:35:10.56ID:Fkhc5exB
エマ中尉の盾になって死んだ人?
2017/06/01(木) 12:16:30.24ID:o/dQD8LP
>>154
特殊な例を一般化するのはよくない
2017/06/01(木) 12:52:26.55ID:YbQp1MN1
>>157
特殊?
そう言うなら他にもっと使われてる用途挙げてくれ
2017/06/01(木) 12:55:42.58ID:uSxzswpP
検索じゃろ
grep然りsed然りエディタの検索然り
2017/06/01(木) 20:45:19.78ID:YbQp1MN1
>>159
その辺りもエンドユーザー(多くは開発者だと思うけど)に近いところじゃね?
2017/06/01(木) 21:36:20.85ID:z/dTvzRJ
一般に正規表現自体をどこで使うかの話と違うんか?
プログラマがどこで使うかって文脈に限定してるのんか?
2017/06/02(金) 00:26:45.39ID:ixZw1vso
perlがそうであったようにログ読んだり整形したりするときにも良く使う。システム管理者。
プログラマによっては無理に正規表現使わないで正規表現を引数に取らないcontainとか複数行で書くって人もいるんじゃないか。入力チェックもそんな考えるような正規表現の出番少ないような。
perlくらい言語に組み込まれてるならともかく。
2017/06/02(金) 01:15:51.17ID:ZbzhojDH
>>156
ヘンケン艦長〜!
2017/06/02(金) 14:02:59.19ID:s9L+1vWi
正規表現、難しいですね…全然わかりません
お知恵をおかし下さい

例えば

test = "//abc"; // コメント "です"


という一行があった場合、後半の

// コメント "です"

にだけマッチする正規表現はどのように書いたらいいんでしょうか?

最初は

/(?!.*(\"|\'))\/\/(.*)/

こんなカンジで否定的先読みを利用していたのですが、
コメント部にも、 シングル及びダブルクォーテーションが入る可能性が出てきたので、
この書き方では ?! で否定しているためなのかマッチ出来ません。

何か良い書き方はありますでしょうか?
やりたい事は、PHPなどで、javascriptのソースから単一行のコメントを削除したいです。
よろしくお願い致します。
2017/06/02(金) 14:24:22.46ID:zHTMhHhl
//((?!//).)*?$
166デフォルトの名無しさん
垢版 |
2017/06/02(金) 20:31:58.40ID:KFrvDlYH
PHP は知らん

$perl -ne 'm%((?:\".*?\"|/(?!/)|[^/])*)(.*)% ; printf("<$1> <$2>\n");'
test = "//abc"; // コメント "です"
<test = "//abc"; > <// コメント "です">
// コメント "です"
<> <// コメント "です">
$
2017/06/02(金) 21:10:46.42ID:yyLeCvfJ
末尾方向から、// を探して、もしあれば、その行を選択する。
^.*\/\/(ここに、2連続以上の、/ が存在しない)$

/// 例えば、3連続でも、コメント扱いするよな?
test = "///abc"; /// コメント "です"

シングルクォーテーションは、どうするんだ?
test = '///abc'; /// コメント "です"
2017/06/02(金) 23:18:34.61ID:cODXM6Ca
javascriptだから、シングルダブルは同等機能
"'"とか'"'とか有だし
"\""とかのエスケープもある
"//abc"は文字列だし、"\""//abc"はコメント
2017/06/03(土) 00:22:48.22ID:02UJhjHA
みなさん、ありがとう御座います!
165さんの短いのでサクっと出来ました!

なるほど、末尾から検索をかけるとう考えなんですね。

本当に奥が深くて、使いこなすのは難しいです…

いろんなパターンを作りだし、自由にマッチ出来るよう精進します

>165-167さん、ありがとう御座いました!
2017/06/03(土) 00:23:37.51ID:02UJhjHA
>168さん抜けちゃいました(汗
ありがとう御座いました!
171165
垢版 |
2017/06/03(土) 01:16:11.91ID:janVI+9u
>>169
ツッコミか逆ギレ待ちだったんだが…
165ではコメントが無くてコード中に//がある場合にそのコードの部分にマッチする
削除だとコードを削ってしまうよ
コード中に//が無い場合、またはコード中に//がある場合にその後ろにコメント行がある場合、限定
マトモなのは「JS コメント 正規表現」とかのワードでggr
2017/06/03(土) 01:49:01.34ID:VDeCcObx
s#((?:"(?:\\\\|\\"|[^"])*+"|'(?:\\\\|\\'|[^'])*+'|/(?!/)|[^/])*+)(.*)#<$1>\t<$2>#
2017/06/03(土) 02:57:17.44ID:02UJhjHA
>>171
え!?
限定的なテストで、思ったとおりの動きをしたので、おお!すげー!って思ってました…

実際のスクリプトには、まだ組み込んでないので気付きませんでした

他の方が書かれてた方法も試したり、ググってみますね
2017/06/03(土) 04:51:38.86ID:ZUxfcpWv
区切り記号 ; や閉じ括弧 } のあとにスペースかタブいくつかの後に来る // から行末をコメントと見なすのが簡単?
2017/06/03(土) 12:52:21.44ID:7vig672V
コメント化は、プログラムデバッグ中にも命令を無効にするために使うこともあるし、ことはそう簡単じゃないよ
//if(hoge=="http://hoge.net";) {//コメント
176デフォルトの名無しさん
垢版 |
2017/06/03(土) 14:13:52.35ID:ep62Y9tf
これは、無限の組み合わせがあるから、正規表現じゃ無理

AST変換とか、LLVMでコンパイル後の命令木をもらって、
コメント部分を削除するとかしないと、自力じゃ無理なレベル
2017/06/03(土) 14:17:50.88ID:sCohk93m
うむ
2017/06/03(土) 14:32:23.81ID:7vig672V
こんな場合もあるからね
/* 一行コメントを外す
//*/hoge="abc";
2017/06/03(土) 14:42:13.81ID:mWYP1opd
文脈自由言語の領域か
2017/06/03(土) 16:26:56.85ID:kz1iKZuq
テキストから
06/03(
を抽出する場合、どんな表現になりますか?
2017/06/03(土) 16:32:48.16ID:7vig672V
何それ限定なの?
06\/03\(
(スラッシュにエスケープが要らない場合もあるけど付けといてダメなことはない)
2017/06/03(土) 20:14:19.78ID:4NkabvDw
>>181
sedのsなんかは(をエスケープすると特別な意味を持つんじゃ
2017/06/03(土) 22:49:00.44ID:yEDWU2+/
正規表現って本当に色々なパターンでテストしないと抜けがあったりするから怖いね
2017/06/03(土) 23:15:22.50ID:eiMrU4PF
>>183
それは仕様を理解していないから。
正規表現で表現してあるパターン以外にマッチする事はないんだから、
抜けがあるならパターンの意味を理解していないって事
2017/06/04(日) 00:01:51.87ID:caz8ZVsN
理解してないのに使う方が怖い
2017/06/04(日) 10:21:55.88ID:ty2rLUEJ
>>184
仕様を理解してたらバグがないって? w
2017/06/05(月) 17:11:30.09ID:oWlVC1QB
非欲張り、欲張り、強欲の違いが分からなかったんだけど
ttp://d.hatena.ne.jp/atzy/20110309/p1
これ読んでやっと分かった
こりゃエディタの検索で試してるだけじゃ理解出来なくて当然だね

誰か同じように例を交えて先読みと戻り読みのロジックを解説して欲しい
それか解説してるwebページがあるならリンク貼って下さい
2017/06/09(金) 23:50:59.51ID:fJoQB/gQ
●Regular Expressionの使用環境
秀丸 HMJRE.DLL V5.00
●検索か置換か?
置換
●説明
文章最後の文字からEOFまでの 空白(全角半角両方) タブ 改行 を消したい。
●対象データ
AAAAA

BBBBB

CCCCC
 

[EOF]

●希望する結果
AAAAA

BBBBB

CCCCC[EOF]
2017/06/10(土) 10:49:19.67ID:qGbgn0XY
http://htom.in.coocan.jp/hmfaq8/4_regular.html#RETURNS
2017/06/10(土) 12:37:04.98ID:6tXlKKLu
[ \s]*(?!\n)$(?#maxlines:99999999)
2017/06/12(月) 04:37:37.47ID:40WtKqR9
>>187
Qiitaなのでコメントまで必ず読むこと

正規表現の先読み/後読みを「絞り込み」と理解してみる - Qiita
http://qiita.com/blackenedgold/items/382704cc54c8e42819d0

[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
http://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6

後者は日本語表現のネタモノなので理解にはあまり役に立ちませんが
2017/06/12(月) 04:43:04.94ID:3uouTe/z
>>191
ありがとう。読んでみます
2017/06/15(木) 14:44:28.61ID:p0Tdw73d
そもそも「正規表現」が誤訳だし
「先読み/後読み」がどうだって驚かない
2017/06/15(木) 17:11:52.26ID:vJds0eqB
名前なのに誤訳ってなんだよ
2017/06/15(木) 20:46:27.61ID:am9DsefU
「正規表現」が誤訳!!www
2017/06/15(木) 21:53:29.88ID:5Ry9SVFq
前厄,翻訳,後厄
2017/06/15(木) 23:55:29.06ID:kDv/IOKj
非正規労働者に謝れ
2017/06/16(金) 00:00:22.35ID:AvJwaQP1
>>193
そんな感じがする
でも定着して何十年経過したからいまさら変更できない

直訳すると正則記法?
2017/06/16(金) 00:03:22.93ID:ugmLNmLC
まさのりって誰よ?
2017/06/16(金) 00:09:53.04ID:7387anCt
>>198
数学用語で考えると、「正則式」
2017/06/16(金) 00:28:35.35ID:CHM/yJyC
誤訳にしたくて必死過ぎw
2017/06/16(金) 00:34:50.74ID:PEuGYK32
確かに数学的にはregularは正則でnormalが正規だけども
正規表現が正則式だの正則表現になったからといって何が分かりやすくなるでもなし
2017/06/16(金) 01:26:14.32ID:1cZCMNBu
ID変わった時間に擁護
2017/06/16(金) 03:20:09.01ID:cmFh/xD2
英語圏の人たちにとってもRegular Expressionと言われて
[ \s]* みたいなことか〜て思い浮かぶわけでもなかろ
単に「それを何と呼ぶか」つまり名前付けをどうするってだけのことだよ

ただ日本では(2chだけかもしれないけど)性器表現とか茶々入れる奴がいるのが面倒くさい
2017/06/16(金) 06:44:35.89ID:HukDnr5k
2chに限らずゲスな一般大衆の猿共は真っ先に性器と捉える
正規よりかは正則の方が良かっただろうけど
若い女の子へのセクハラに使えるから正規も捨て難い
まあ今時「せいき」の言葉にモジモジする女子なんて希少だが居なくは無い
2017/06/16(金) 12:48:55.14ID:dHQ1DtF8
くっさ
2017/06/16(金) 13:01:55.39ID:KyUpje1a
正規表現で置換
2017/06/16(金) 16:51:35.05ID:ugmLNmLC
>>207
通報した
2017/06/16(金) 17:21:44.35ID:HukDnr5k
痴漢の際に性器表現を用いた
210デフォルトの名無しさん
垢版 |
2017/06/16(金) 18:35:19.21ID:1eQLQexT
成基学園ってまだあるんかね
2017/06/19(月) 22:55:10.17ID:HM1jnBNt
システム関係の仕事してるけど正規表現知ってるとホント仕事がはかどるわ
知らん奴いたら教えたくないレベルw
2017/06/20(火) 00:30:35.64ID:qgvPAN/M
システム関係の仕事って自宅警備員のこと?
2017/06/20(火) 08:43:02.71ID:bMt5HDL+
>>209
正規表現を用いて置換と挿入を行った
だろ
214デフォルトの名無しさん
垢版 |
2017/06/20(火) 12:36:20.94ID:5s5M5H6z
痴漢と挿入
2017/06/20(火) 16:59:32.57ID:V+xxZfop
表現を抜いてれば完璧
2017/06/22(木) 00:33:36.51ID:WTVST2HN
痴漢って挿入する前にするものなのか?
217デフォルトの名無しさん
垢版 |
2017/06/25(日) 14:01:32.44ID:cBKwT0iz
挿入したら痴漢じゃなくなるからそういうことだな
218デフォルトの名無しさん
垢版 |
2017/06/25(日) 14:08:45.87ID:cBKwT0iz
質問です。

ttp://hayabusa3.2ch・sc/test/read.cgi/news/1498009569/
↑ここに、「それは文科省にとってリスクか&#12441;あるわけて&#12441;すね。」っていう文章があります。
これをエディタで置換したいです。
秀丸エディタには半角化、全角化があるので、
「&#12441;」を「゛」に、「゛」とその前を半角に、「゙」とその前を全角にと言う手順で全角濁音化することができます。
しかし、段階的に置換すると、[ニダ]と言う文字が[ニダ]となります。
専ブラでなく普通のエディタでメール欄に限定せず「&#12441;」だけをちゃんと全角濁音化するにはどうしたらいいでしょうか。
219デフォルトの名無しさん
垢版 |
2017/06/25(日) 14:14:01.85ID:cBKwT0iz
変換関数をネストして、全角から直接全角に置換すれば大丈夫っぽいです。
スレ汚し失礼しました。
2017/06/25(日) 14:17:59.69ID:lrjpj5rj
マクロ
221デフォルトの名無しさん
垢版 |
2017/06/25(日) 14:24:13.60ID:cBKwT0iz
マクロを覚えるほど気力ないので。
せいぜいキーボードマクロまでですね。

メモ:
1回目「゙」→「゛」
2回目「[か-こさ-そた-と][゛]」→「\((0,ToHankaku),ToZenkakuHira)」
2017/06/25(日) 14:40:18.89ID:gOEYQ1GV
Unicode正規化
223デフォルトの名無しさん
垢版 |
2017/06/25(日) 15:09:28.12ID:cBKwT0iz
ID:fr6XvX0v3

DOSコマンドでいけるよ

【.cmd】 バッチファイルスクリプト %12 【.bat】
http://mevius.2ch.net/test/read.cgi/tech/1489207631/


なんかscに書けなくなった。
認証が延々と出てくる。
224デフォルトの名無しさん
垢版 |
2017/06/25(日) 15:19:25.37ID:cBKwT0iz
>>222
なるほど。

http://hide.maruo.co.jp/lib/hmconv/normalize101.html
> Unicode正規化を行ないます。
> パラメータとしてNFC、NFD、NFKC、NFKDが指定可能です。

Googlエ
> 合成形に正規化する方法を NFC(Normalization Form Composition)
225デフォルトの名無しさん
垢版 |
2017/06/29(木) 16:59:45.11ID:02bfNUCV
質問します
●Meryで置換

●対象データ
wwwwwwwa,AAAAA,gawgagaw,fwaf awfaf
n,BBB,gawgagaw,fwaf awfa,fwaaw,fwaaw
rea,CCCC
ae,DD,gawgagaw,fwaf awfaf ,fwaaw

●希望する結果
カンマ2番目の
AAAAA
BBB
CCCC
DD


******
******
******
******
に置換


(?<=,).*?(?=[,\n])
までは考えましたがこれ以上力不足でわかりません よろしくお願いします
2017/06/29(木) 18:40:30.46ID:poRQnsAj
(^.*?,).*?(?=[,¥n])
rea,CCCCのパターンが行末だとできないんだよなー。
2017/06/29(木) 18:57:06.54ID:WmvxL1Sm
^([^,]*,)[^,\r\n]+

$1******
に置換
"a,b",defのようなものはダメだが
228デフォルトの名無しさん
垢版 |
2017/06/30(金) 03:23:16.33ID:9+Qy2E7i
>>226-227
ありがとうございます 上手くいきました 
使わせていただきます&勉強材料にさせていただきます
2017/07/06(木) 20:38:45.39ID:zX6kiHLz
質問です。
●Regular Expressionの使用環境
Java Script

●検索か置換か?
置換

●対象データ
abc:ABCDEFG
def:123456789
ghi:くぁwせdr

●希望する結果
上記のような複数行の文字列があったとして、
"123456789"を取り出すにはどのようにしたら良いでしょうか?
条件としては、行頭の"def"をキーにして、
「defで始まる行の、def:の次の文字から行末まで」を取り出したいです。
よろしくお願い致します。
2017/07/07(金) 08:13:19.50ID:QFC9teR0
後読みが使えないJSなら/def:(.*?$)/m
使えるなら/(?<=def:).*?$/m
2017/07/08(土) 02:10:34.01ID:OqNCkVph
BBCの正規表現クイズ。たまにはこういうのも面白いね
ttp://www.bbc.co.uk/programmes/articles/5LCB3rN2dWLqsmGMy5KYtBf/puzzle-for-today
2017/07/08(土) 06:16:34.80ID:b/20QJ7+
>>230
こういう場合、先読みの方法でやるメリットって有るんですか?
初心者なんで教えて下さい。
2017/07/08(土) 06:17:08.46ID:b/20QJ7+
訂正
後読みでした。
2017/07/08(土) 09:10:13.00ID:NOOXEVdu
>>232
後読みの部分にはマッチしない

つまり>>229で後読み使った場合には
123456789
にマッチするがそうでない場合は
def:123456789
にマッチする
2017/07/08(土) 19:51:13.74ID:utlt5XjQ
後読みの説明はそうなんだけど、>>230 について訊いてるんでしょ?

俺も>>230の意図はよくわからん。行単位の処理を希望してるのにm付けてるし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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