5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

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

1 :デフォルトの名無しさん:2017/03/15(水) 02:04:35.47 ID:e01p03UP
Regular Expressionスレです。

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

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


次スレは>>980宜しく
天ぷら等2以降

2 :デフォルトの名無しさん:2017/03/15(水) 02:06:40.55 ID:ko4BTSP2
スルーされにくい質問のテンプレと例

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

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

※ ^ はアンダーラインだそうな ^^;

3 :デフォルトの名無しさん:2017/03/15(水) 02:06:57.31 ID:ko4BTSP2
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://www.geocities.jp/oraclesqlpuzzle/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/9784873113593/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/ja-jp/library/28hw3sce%28v=VS.80%29.aspx
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/ja-jp/library/az24scfc%28v=vs.80%29.aspx
【 初心者 】 正規表現 【 入門 】 ←閉鎖
http://funcchan.blog16.fc2.com/
クックブック ←追加
鬼車、鬼雲 ←追加

4 :デフォルトの名無しさん:2017/03/15(水) 02:07:49.24 ID:ko4BTSP2
◆関連スレ
[UNIX板] 正規表現
http://pc12.2ch.net/test/read.cgi/unix/1039165754/
[WebProg] 正規表現道場 Part2 ←板移転
http://kanae.2ch.net/test/read.cgi/php/1348048723/

◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] http://pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] http://pc11.2ch.net/test/read.cgi/tech/1186030400/
[5] http://pc12.2ch.net/test/read.cgi/tech/1212498448/
[6] http://pc12.2ch.net/test/read.cgi/tech/1241537764/
[7] http://hibari.2ch.net/test/read.cgi/tech/1268979408/
[8] http://hibari.2ch.net/test/read.cgi/tech/1301067486/
[9] http://toro.2ch.net/test/read.cgi/tech/1323566370/
[10] http://toro.2ch.net/test/read.cgi/tech/1340383120/
[11] http://toro.2ch.net/test/read.cgi/tech/1362913813/
[12] http://peace.2ch.net/test/read.cgi/tech/1387257592/
[13] http://peace.2ch.net/test/read.cgi/tech/1415149975/

5 :デフォルトの名無しさん:2017/03/15(水) 02:08:13.70 ID:ko4BTSP2
鬼車
http://www.geocities.jp/kosako3/oniguruma/index_ja.html
鬼雲
https://github.com/k-takata/Onigmo

Boost.Regex(日本語訳)
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
※ サクラエディタでは複数行に渡る検索・置換は出来ません。

正規表現クックブック
http://www.oreilly.co.jp/books/9784873114507/

せいきなんとか
http://akiba.geocities.jp/hp20140401/

6 :デフォルトの名無しさん:2017/03/15(水) 02:08:24.61 ID:5ViZ5KQR
387:名無し募集中。。。:2017/03/15(水) 02:01:25
以下依頼します。
よろしくお願いします(宣言してスレ立て規制に引っかかった)

【板名】 プログラム技術
【板URL】 http://echo.2ch.net/tech/
【タイトル】 Regular Expression(正規表現) Part14
【名前(省略可)】
【メール欄(省略可)】
【本文】
Regular Expressionスレです。

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

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


次スレは>>980宜しく
天ぷら等2以降

7 :デフォルトの名無しさん:2017/03/15(水) 02:09:35.98 ID:ko4BTSP2
[ ある "文字列" を含まない正規表現 ]

▽ 先読みが使える環境

((?!xyz).)* または (?:(?!xyz).)*
後者はカッコによるキャプチャを無効化しています。
1文字以上の繰り返しにしたい場合は * を + に書き換えて下さい。


▽ 先読みが使えない環境

オートマトンの知識が不可欠なため初心者にはまず無理です。
解説サイトですらほとんどがデタラメな作成方法を載せています。
↓正しい作り方はこちら。

xy を含まないものにマッチする正規表現 - Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXY

xyz を含まないものにマッチする正規表現 - Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ

↓いろいろな文字列否定

タグの中に "ある文字列" を含まない正規表現
http://akiba.geocities.jp/hp20140401/2014/002.html

8 :デフォルトの名無しさん:2017/03/15(水) 08:53:37.66 ID:ZusWJMmJ
>>1


9 :デフォルトの名無しさん:2017/03/15(水) 11:35:18.29 ID:7YWEdixI
どうでもいいけど deny は高校で習ったわ

10 :デフォルトの名無しさん:2017/03/15(水) 15:17:17.33 ID:ARIh7/3F
習う習わないっていう材料はテキストに出てくるかどうかなのか?
(と言っても俺の時代学校によって採用するテキストの種類だって何種類もあったんだけど)
それともどっかの参考書も含むのか?

11 :デフォルトの名無しさん:2017/03/15(水) 15:21:02.26 ID:JuWg/t11
私は中学校で習いましたよ

12 :デフォルトの名無しさん:2017/03/15(水) 16:23:05.39 ID:FiGu7lnE
Regexの発音
https://www.youtube.com/watch?v=PGZldvNL2rw
http://english.stackexchange.com/questions/94371/
https://www.quora.com/What-is-the-correct-way-to-pronounce-regex

英語圏でもhard g派とsoft g派が半々
俺は語呂がいいからsoft g派 カタカナにするとレジェックス
英語で発音するときはリージェックスのほうが近いけどね

gifをギフって読む人がいるのと同じ

13 :デフォルトの名無しさん:2017/03/15(水) 18:00:46.15 ID:LExN6Gy2
ギットをジットと呼ぶ人もいるの?

14 :デフォルトの名無しさん:2017/03/15(水) 19:10:20.88 ID:FiGu7lnE
それは略語じゃなくて元から英単語だからね
リーナスがジットって発音してたらそれが広まっただろうけど

15 :デフォルトの名無しさん:2017/03/15(水) 23:15:08.29 ID:GyMxol53
海外の動画見たら「SQL Server」を「シークルサーバー」って発音しててちょっと驚いた

16 :デフォルトの名無しさん:2017/03/16(木) 01:57:00.56 ID:y9TWt00W
>>15
そういえば昔、初めてRDBを学んだ頃
会社の先輩でSQLを「シークェル」て呼ぶ人いたわ
その人一人だけだったけど

17 :デフォルトの名無しさん:2017/03/16(木) 23:04:01.82 ID:SS9/9E5d
FAQ!

18 :デフォルトの名無しさん:2017/03/21(火) 02:29:10.44 ID:5LrJtuWs
>>16
Fileをローマ字読みでフィレと読んでいる
MakeFileはマケフィレ

19 :デフォルトの名無しさん:2017/03/23(木) 06:22:49.19 ID:m0GWFz0v
http://patorjk.com/blog/2012/01/26/pronouncing-sql-s-q-l-or-sequel/

20 :デフォルトの名無しさん:2017/03/24(金) 06:37:22.44 ID:J6kPEUuW
SQLの話まで行くともはやスレタイ関係ないじゃん、と思ったが>>19は面白かったわ
俺はsoft g、S-Q-Lで読んでるが、相手が先に違う読み方してたらそれに合わせてる

21 :デフォルトの名無しさん:2017/03/29(水) 23:42:35.49 ID:CyM0OTMA
質問

詳説 正規表現 第2版 持ってるんだけど、 詳説 正規表現 第3版 との違いって何かある?
第3版の方は5000円もするから大差ないなら買わないでおきたい

22 :デフォルトの名無しさん:2017/03/30(木) 00:21:57.35 ID:LEwdK5Fw
This third edition features enhanced PHP coverage in the early chapters,
plus an all new, expansive chapter devoted entirely to PHP regular expressions and how to wield them effectively.
Also new in this edition, the Java chapter has been rewritten and expanded considerably to reflect new features of Java 1.5 and Java 1.6.

って書いてるね
上に書いてる内容は目次の違い見ても分かるよ

23 :デフォルトの名無しさん:2017/03/30(木) 00:39:32.58 ID:Z/GqZVkW
買おうと思ったけど、後ろ半分が自分に関係なくて買うのやめた。

24 :デフォルトの名無しさん:2017/03/30(木) 01:42:52.91 ID:1DorAGfX
失礼します。質問させていただきます。
複数行からなるデータを、指定したピッチ(行)おきに消したいのですが、やり方を教えて下さい!
例えば
中1行空けてなら1,3,5,7
中2行空けてなら1,4,7,10
中3行空けてなら1,5,9,13
の行を削除していくみたいな感じです。
出だしは1行目からでなくても、これは行の調整でなんとか出来そうです。
できるだけ手順が少ないのが理想です。やり方解る方マジ教えてほしいです!
手作業でやってて疲れてしました。まだいっぱいあります・・・お願いします。

25 :デフォルトの名無しさん:2017/03/30(木) 02:07:11.97 ID:J79lEXio
それエディタのマクロでやること

26 :デフォルトの名無しさん:2017/03/30(木) 02:20:39.52 ID:7+t5IDTq
>>24
gawk

27 :デフォルトの名無しさん:2017/03/30(木) 03:34:41.36 ID:Z/GqZVkW
何かスクリプトが使えるなら簡単だけど
正規表現だけでは難しそう
いらない行だけに含まれている
決まった文字、記号があるとか、またはその逆みたいな
いらない行を判断出来る要素があれば正規表現の検索置換で可能

28 :デフォルトの名無しさん:2017/03/30(木) 04:00:51.53 ID:Z/GqZVkW
あそっか、上から3行づつとかで切っていけばいけるのか
明日試してみよっと。

29 :デフォルトの名無しさん:2017/03/30(木) 04:11:47.74 ID:LEwdK5Fw
中1行ずつに削除なら(.*)¥n.* を ¥1に置換
中2行ずるに削除なら(.*)¥n.*¥n.* を ¥1に置換
みたいな方法でできるけど
特別な理由が無い限りエディタのマクロ使うかスクリプト使うね

30 :デフォルトの名無しさん:2017/03/30(木) 04:16:57.88 ID:UdsMclqE
正規表現でって言うけど何使うのかな?
Perl?

31 :24:2017/03/30(木) 06:57:32.87 ID:1DorAGfX
レスを頂い方々どうもありがとうございます。エディタのマクロでやる方がいいのですか!
これはいいことを知りました!マクロ使ったことないですがこの次に勉強してみようと思います。
>>29さん
教えて頂いた正規表現で出来ました!これでマジ助かります\(^o^)/
どうもありがとうございました。\(^o^)/

32 :デフォルトの名無しさん:2017/04/01(土) 03:40:09.20 ID:4EJbPXqm
(?i)((\S+ ){5}|^(\S+ ){0,5}?)(\bAAA\b)(( \S+){5}|( \S+){0,5}?$)

英文からある単語AAAを検索して前後5文字づつ一緒に取得
ただし途中に改行がある場合は改行前まで

上の表現で目的は達成したのですが
疑問が湧いたので質問です
A|Bのような単純またはではなくて
ifのような条件で切り替えるような正規表現はありますか?
(各種のスクリプト言語に依存しないやり方で)
合わせて、上の表現よりもこうした方が良いとかあったら
よろしくお願いします。

33 :デフォルトの名無しさん:2017/04/01(土) 03:45:05.14 ID:FRLTAWk8
http://www.regular-expressions.info/conditional.html
http://www.rexegg.com/regex-conditionals.html

34 :デフォルトの名無しさん:2017/04/01(土) 10:44:34.81 ID:4EJbPXqm
>>33
ありがとうございます!

35 :デフォルトの名無しさん:2017/04/02(日) 20:30:31.43 ID:g6KuPxH9
ファイル名の置換(linuxのrenameコマンド)で
rename パール正規表現 対象ファイルで置換が出来るみたいです。

test_20140402_1810.m4aをtest_20140402.m4aに"_1800"を削除したいのですが、
rename 's/_d{4}\.m4a$/\.m4a/' test_20170402_1810.m4a
としてもうまく行かずにエラーも出ずにファイル名も変わりません。

"_"+"数字4桁"+".m4a"にマッチするようにして".m4a"に置換すればいいかと思ったのに出来ていない。
何処が間違ってますか?

36 :デフォルトの名無しさん:2017/04/02(日) 20:41:25.41 ID:TvISwdcG
>>35
dのところのエスケープ
あと置換文字列はピリオドにエスケープいらない
マッチしないだけだからエラーがでなくてもおかしくない

37 :デフォルトの名無しさん:2017/04/02(日) 22:31:46.58 ID:g6KuPxH9
ありがと。うまく行ったよ。

38 :デフォルトの名無しさん:2017/04/12(水) 19:00:37.87 ID:QHemYrmG
正規表現で任意文字以外を消すにはどうしたらいいですか?
検索でヒットしたものだけ残したいということです。
よろしくおねがいします。

39 :デフォルトの名無しさん:2017/04/12(水) 20:59:49.88 ID:u8woYKAJ
>>38
漠然とした質問だから漠然としか答えられないけど
キーワードを含む文全体(先頭から末尾まで)をマッチさせて
それをキーワードに置換させればいい

40 :デフォルトの名無しさん:2017/04/12(水) 21:00:35.18 ID:ud+oociV
[^(abc)]
これでabc以外の文字が全部選択できる
でもこれってどういう時に使うんだろう?
結局残るのがabcだけなら
わざわざ検索しなくてもよさそうだけど

41 :デフォルトの名無しさん:2017/04/12(水) 21:12:14.06 ID:u8woYKAJ
>>40
なんか勘違いしてそうな記述なんだけど?
それは、(,a,b,c,)の5文字以外の1文字を表してる
文字列abc以外を表すのなら
(?:(?!abc).)

42 :デフォルトの名無しさん:2017/04/12(水) 21:52:20.74 ID:ixmoPw8q
Ruby 2.4.1で使えるようになった非包含オペレータ便利
http://qiita.com/k-takata/items/4e45121081c83d3d5bfd

43 :38:2017/04/12(水) 22:16:13.87 ID:QHemYrmG
>>39>>40
レスをありがとうございます。
やろうとしてたのは下記例のような場合で、-で直接挟まれた文字のみ残したいというものです。

消-残-残--消 -残--消 -残-
消--残--消 -消 -残-

44 :デフォルトの名無しさん:2017/04/13(木) 05:45:19.12 ID:Bx+Z85rt
- と - の間の文字列で空白文字が入っちゃいかんということならこんな感じ?

perl -ne 'print( /(?<=-)([^-\s]+)(?=-)/g ,"\n")'

こういうことじゃないならもう少し説明を。

45 :43:2017/04/14(金) 03:41:56.00 ID:8AuQ8qy9
>>44
レスをいただきありがとうございます。教えて頂いた記述はPerlということであってますよね?
Perlを導入して使ってみてからレスをお返ししようといろいろ調べていたら、大変遅れてしまい礼を欠いてしました。
いろんなサイトを見過ぎたせいか、結局導入方法が絞れないというか、よくわからなくり、
時間だけが過ぎましたので不甲斐なく申し訳ないですが兎に角お礼まで。どうもありがとうございました。

46 :デフォルトの名無しさん:2017/04/14(金) 08:15:43.14 ID:mEmX7gnv
ブラウザから実行すれば、簡単

paiza.IO, codepad なら、ログインもいらない

47 :デフォルトの名無しさん:2017/04/14(金) 09:03:58.80 ID:uldWbSLb
>>45
とりあえず>>1-2を嫁

48 :デフォルトの名無しさん:2017/04/14(金) 11:21:59.85 ID:7lZUeeAF
置換でやるとすると、これでどうかな?
これなら適当なエディタやWSH(JScript)ででも実行できる
(先頭の.*?を[\s\S]*?に変えれば、改行コードは末尾のみになる)
ただ、もしかすると考慮抜けの場合があるかも

正規表現:/.*?-([^\s-]+)(?=-)|-*[^-]*?(\r)?$/mg
置換文字:$1$2

49 :デフォルトの名無しさん:2017/04/15(土) 02:46:51.37 ID:8aYCgh5m
レスをくださった方々、また遅くなりましたがありがとうございます。
>>46
こんな便利なものがあるんですね!教えていただきありがとうございます。またゆっくり触ってみたいとおもいます。
>>47
質問方法の不備を自覚しました。以後気を付けます。申し訳ありません。
>>48
サクラエディタで希望どうりの置換えが出来ました。本当にありがとうございます。
たて続けになり申し訳ないのですが。できればもう一つお聞きしたいです。
下記のような英文やその他も、単語と単語の間に入る半角スペースを許容することは可能でしょうか?
-Good Morning-
-残 残-

-東京都 港区 六本木-
-残 残 残-

50 :デフォルトの名無しさん:2017/04/15(土) 09:28:31.10 ID:7fUWShMv
>>49
それは別件なのか?
-a -b-
の場合、その条件なら
a b
が残ることになるけど?
それでいいなら、\sを抜くだけでもいいし、(?=-)も取ってもいい

51 :デフォルトの名無しさん:2017/04/15(土) 10:02:24.26 ID:7fUWShMv
ごめん、「間に入る」だったのか
/.*?-((?:[^-\s]| )*[^-\s])(?=-)|-*[^-]*?\r?$/mg
$1

52 :デフォルトの名無しさん:2017/04/15(土) 10:07:27.57 ID:7fUWShMv
\rもいらないか
/.*?-((?:[^-\s]| )*[^-\s])(?=-)|-*[^-]*?$/mg

53 :デフォルトの名無しさん:2017/04/15(土) 10:21:57.02 ID:7fUWShMv
これじゃまずい
/.*?-((?:[^\s-]| )*[^\s-])(?=-)|.*-(?:[^\s-]| )*[^\s-](?=[^-])|-*[^-]*$/mg
冗長かもしれない

54 :デフォルトの名無しさん:2017/04/15(土) 10:24:14.97 ID:7fUWShMv
↑でも問題ないけど
/.*?-((?:[^\s-]| )*[^\s-])(?=-)|.*-(?:[^\s-]| )*[^\s-](?!-)|-*[^-]*$/mg

55 :デフォルトの名無しさん:2017/04/15(土) 11:39:21.99 ID:8aYCgh5m
>>50-54
無理を利いてくださりありがとうございます。
実は最初の質問に穴があったので別件という形で再質問させていただきました。失礼しました。
教えて頂いた記述は完璧でした本当に感謝です!
レスも何度もくださってこの度は大変お世話になりました。

56 :デフォルトの名無しさん:2017/04/20(木) 21:29:57.11 ID:rsUIJG5Q
●Regular Expressionの使用環境
Becky!

●検索か置換か?
検索

●説明
+0900以外に一致

●対象データ
+
-
+0
-0
+09
-09
+090
-090
+0900
-0900
+09000
-09000
+09010
-09010

57 :デフォルトの名無しさん:2017/04/20(木) 21:30:53.51 ID:rsUIJG5Q
+
-
+0
-0
+09
-09
+090
-090

-0900
+09000
-09000
+09010
-09010

よろしくお願いします
※"+0900を含まない"を"+0900以外"を含むで実現したいです

58 :デフォルトの名無しさん:2017/04/21(金) 08:10:19.34 ID:P/4d/uOg
Beckyで使えるかは知らんけど
^(?!\+0900$).*

59 :デフォルトの名無しさん:2017/04/21(金) 12:02:05.13 ID:30M0P9UI
zip版をダウロードしてchmヘルプファイルを見てみたら、
正規表現は本当に基本的なものしか無かった
(?!)はおろか()とかのキャプチャ自体無い(括弧は優先順位が上になるだけ)
[abc-d]もダメ( ([ab]|[c-d])と分けて書くらしい)
だから、やるなら
^[^+]|^\+$|^\+[^0]|^\+0]$|^\+0[^9]|…と全ての場合を併記するしかないかも

60 :デフォルトの名無しさん:2017/04/21(金) 14:10:39.59 ID:P/4d/uOg
鬼車や鬼雲使わず独自実装なんだね。シェアウェアだからかな
非包含か先読みを使えなきゃ実質無理だと思う
^\+0900$ の方をどうにかする運用を考えた方が良い
Beckyの公式のメーリングリストや掲示板で正規表現じゃなく具体的にやりたい事を質問してみたら?
上手い運用方法を思い付いてくれる人が居るかも

61 :デフォルトの名無しさん:2017/04/21(金) 16:15:06.41 ID:hNfgTF//
GPLならいざ知らずPCREや鬼車, 鬼雲もBSDライセンスだからなぁ
誰か外部の高機能正規表現ライブラリを利用するプラグインとか作ってそうだけど

62 :デフォルトの名無しさん:2017/04/22(土) 00:09:10.84 ID:R9IUk1ak
>>57
if ≠"+0900" みたいなやり方が1番簡単だけど正規表現だと面倒

≠ や = にまで拡張した正規表現があればいいんだ

63 :56:2017/04/22(土) 01:50:21.67 ID:IwPPNWuo
>>56分かる方いたら教えてください
よろしくお願いします

64 :デフォルトの名無しさん:2017/04/22(土) 04:17:39.78 ID:T741eTMO
ほらよ。使い物になるかは知らんが示された対象データにおいては要件を満たす
^(.{,4}|-0900|.{6,})$

量指定子の{}が使えないなら
^(.|..|...|....|-0900|......)$

Beckyの仕様が一般的なPerlの正規表現とは違うならここで聞いても分かるやつ少ないだろうし
後出しする必要が出たらBeckyの方で聞いた方がいいぞ

65 :デフォルトの名無しさん:2017/04/22(土) 17:13:13.21 ID:1zuuifbC
>>63
+0900のみのデータなんて普通は無いよね
こういうのはJSTとかの時刻の後ろにつくもんじゃないの?
何がしたいのかよく解からないんだが?

フィルタで使うんなら、〜が「ある時」「ない時」と選択できるようだから、
「ない時」にチェックすれば君の要件どうりなら、指定は^+0900$でよいことになる(+0900のみがない時ということになるけど)

だけど、上で疑問視したように+0900の前に時刻があるならマッチしなくなるよ

66 :デフォルトの名無しさん:2017/04/22(土) 17:16:27.15 ID:1zuuifbC
+のエスケープし忘れた(仕様にエスケープはあるよね?)

67 :56 ◆mUjtBupG2M :2017/04/22(土) 21:58:03.61 ID:UjWxDTr1
レスくださったみなさんありがとうございます
>>58>>60
使えませんでした
>>59
そうなんです、基本的なものしかないのでどうすればいいのか分からず
>>62
ですね
>>64
使い物にならん!
>>65
+0900以外がある時(>>56の求める結果)と+0900がない時だと、前者
じゃないと駄目なんです

自分でなんとか書いてみました
(\-[0-9][0-9]*)|(\+0[0-8][0-9]*)|(\+09[1-9][0-9]+)|(\+[0-9]*[1-9]$)|(\+09[0-9]?[1-9]+[0-9]?)|(\+0900[0-9]+)|(\+090$)|(\+0$)

68 :デフォルトの名無しさん:2017/04/23(日) 02:31:41.68 ID:hK6ntaQJ
Beckyって基本的なものとはいえ正規表現使えるのか、いいなぁ
会社で強制使用のOutlookなんか and or しかない上に
検索語を入力中に変なところで勝手にor区切りするわフォーカス外れるわでもうムチャクチャ
仕事で何年も前のメール探すのに絞り込めなくて、最終的には数百通人間grep状態しょっちゅう…

69 :デフォルトの名無しさん:2017/04/23(日) 05:21:48.35 ID:DzF9wMLj
^(\+|-|-0900)(.?|..|...|([1-9].|.[0-8])..|..([1-9].|.[1-9])|.....+)$

70 :デフォルトの名無しさん:2017/04/23(日) 05:33:24.87 ID:DzF9wMLj
^(.|-0900)(.?|..|...|(([1-9]|\D).|.([0-8]|\D))..|..(([1-9]|\D).|.([1-9]|\D))|.....+)$

71 :デフォルトの名無しさん:2017/04/23(日) 05:44:27.04 ID:DzF9wMLj
^(.|-0900)(.?|..|...|([^0].|.[^9])..|..([^0].|.[^0])|.....+)$

72 :デフォルトの名無しさん:2017/04/23(日) 05:52:59.96 ID:DzF9wMLj
^(-0900|.(.?|..|...|([^0].|.[^9])..|..([^0].|.[^0])|.....+))$

73 :デフォルトの名無しさん:2017/04/23(日) 07:11:51.07 ID:2K1Rl01+
^[^+]*$|\+(|0*[0-9]|0*[1-9][0-9]|[1-9][0-9][0-9]|0([1-7][0-9][0-9]|8[0-9][0-9])|0(90[1-9]|9[1-9][0-9])|[1-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)

●入力と結果(✓一致 ❌不一致)
✓ Sat May 24 08:05:44 2014
✓ Tue Mar 28 06:21:47 2017 +
✓ Tue, 26 Jul 2016 23:55:46 -0
✓ Wed, 05 Oct 2016 15:24:09 -0900
✓ Wed, 4 Mar 2015 08:39:08 +09000
✓ Fri, 30 Oct 2015 07:56:41 +00900
✓ Wed, 4 Mar 2015 08:39:08 0900
❌ Wed, 25 Mar 2009 14:18:41 +0900
❌ Tue, 8 Mar 2016 16:11:55 +0900 (JST)
❌ Sat, 24 Jul 2004 03:48:21 +0900<br>

74 :デフォルトの名無しさん:2017/04/23(日) 14:27:49.79 ID:fsvPYIZO
>>68
wanderlust使ってて十分だがmaildirでファイル保存してるのでなんでもありだ

75 :56 ◆mUjtBupG2M :2017/04/23(日) 22:57:55.33 ID:/2AcrhSu
>>72
質問に忠実な正規表現ありがとうございました

>>73
きゃー素敵!と冗談はさておき
まさに望んでいたものでした、本当にどうもありがとうございました!

76 :デフォルトの名無しさん:2017/04/28(金) 19:19:48.10 ID:VBxbz7un
正規表現を勉強し始めた者です
>>73の正規表現について2つ質問させて下さい

展開すると以下のようになりますよね
^[^+]*$   「+」が無い行に一致。残りは「+」が在る行
(
「+」に数字が続く場合の0〜3桁とその先頭に0が続くパターン ※Q1
\+
\+0*[0-9]
\+0*[1-9][0-9]   [1-9]なのは0*0[0-9]は0*[0-9]に含まれているから
\+[1-9][0-9][0-9]  3桁目で0*とすると0900にマッチしてしまう

4桁で「0900以外」のパターン ※Q2
\+0[1-7][0-9][0-9]
\+08[0-9][0-9]
\+090[1-9]
\+09[1-9][0-9]
\+[1-9][0-9][0-9][0-9]

\+[0-9][0-9][0-9][0-9][0-9]+  5桁以上
)
([^0-9]|$)  続く文字が数字以外もしくは行末。これが無いと+0900に3桁以下の式でマッチしてしまう

Q1
3桁までの表現に0*としてるのはなぜなのでしょうか?
素人考えには
[0-9]?
[0-9][0-9]
[0-9][0-9][0-9]
で良いのでは?と思うのです。 [0-9]?|[0-9][0-9][0-9]? これでも0〜1桁と2〜3桁になりますよね?
「0*」という書き方の方が処理が速くなったりとか何か理由があるのでしょうか?

77 :76:2017/04/28(金) 19:24:12.30 ID:VBxbz7un
Q2
\+0[1-7][0-9][0-9]
\+08[0-9][0-9]
[1-7]なのは00の場合1〜3桁の式と被るから1からなのだと思うのですが
この2つは合わせて \+0[1-8][0-9][0-9] としてはダメなのでしょうか?

「0900以外」の4桁の数字のパターンは以下のようになるかと思います
[1-9][0-9][0-9][0-9]  0xxx
[0-9][0-8][0-9][0-9]  x9xx
[0-9][0-9][1-9][0-9]  xx0x
[0-9][0-9][0-9][1-9]  xxx0

被っているところを数値に置き換え
[1-9][0-9][0-9][0-9]
0  [0-8][0-9][0-9]
0  9  [1-9][0-9]
0  9  0  [1-9]

一応Q1と合わせ疑問に思ったところを書き換えて>>73さんのサンプルと+0〜+10000と+0000〜+9999をテキストに書き出して
テストしてみたところ問題無さそうなのを確認したのですがそれでも確信が持てず質問させて頂きました
試した式は以下になります
^[^+]*$|\+([0-9]?|[0-9][0-9]|[0-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|0[0-8][0-9][0-9]|09[1-9][0-9]|090[1-9]|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)
^[^+]*$|\+((|[0-9][0-9])[0-9]?|([1-9][0-9]|0[0-8])[0-9][0-9]|09([1-9][0-9]|0[1-9])|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)
^[^+]*$|\+(|090[1-9]|((([0-9][0-9]+|(|[1-9]))[0-9]|(|0[0-8]))[0-9]|(|09[1-9]))[0-9])([^0-9]|$)

身近に聞ける人が居ないので自分の解釈が間違っていたり何か見落としているのではないか?と悶々としております
どなたか分かる方が居られましたら2つの疑問点の回答をお願いしたいです
また解釈を間違えている箇所がありましたらそちらも指摘下さい。よろしくお願いします

78 :デフォルトの名無しさん:2017/04/29(土) 18:45:01.61 ID:0PD6E3oz
>>76-77
どちらも深い意味はないよ
行き当たりばったりで何とかテストに通るようにしただけだから

> 3桁までの表現に0*としてるのはなぜなのでしょうか?

コメント付けてくれた通りまさしく「0〜3桁とその先頭に0が続くパターン」
という順序で考えてたから結果的にそうなったのだと思う
まず0から999に一致するパターンを書いて、それに 0 が先行する場合 0* を足して
でも 0900 には一致しないように… とかそんな感じ

> この2つは合わせて \+0[1-8][0-9][0-9] としてはダメなのでしょうか?

ダメじゃない
その辺りはこのジェネレーターで生成した正規表現をもとにしてる

Regex Numeric Range Generator
http://gamon.webfactional.com/regexnumericrangegenerator/
100–899 ⇒ ([1-7][0-9]{2}|8[0-8][0-9]|89[0-9])

たまたま 8[0-8][0-9] と 89[0-9] がまとめられると気がついたのでそこは直したけど
全部まとめられるとは気づいてなかっただけ

79 :デフォルトの名無しさん:2017/04/30(日) 00:11:00.00 ID:PxU3UZJt
>>78
回答ありがとうございます
つい先日覚え始めた身ながらも>>73さんの式に感銘を受け是非とも理解したく思い
分からない事だらけの中、自分であれこれ分解したり試したりしていたのですが
疑問に思った点を自力で晴らす事が出来ず質問させて頂きました
未熟故に不理解な部分があるのではないかと思っておりましたが
「どちらも深い意味はない」との事で少々肩透かしでしたが安心しました
無知故に身構え過ぎていたようです
作成の経緯や方法まで丁寧に説明して頂きありがとうございました
今後の参考にさせて頂きます。感謝!

80 :デフォルトの名無しさん:2017/04/30(日) 03:04:48.91 ID:sTLetcQY
慇懃無礼でうぜえ

81 :デフォルトの名無しさん:2017/04/30(日) 04:34:43.13 ID:smayr5dM
>>80
確かに邪魔だけど、おこるほどじゃない

82 :デフォルトの名無しさん:2017/04/30(日) 07:25:58.21 ID:PxU3UZJt
>>80
それも少し思ったんだが重箱の隅をつついてると受け取られ答えてもらえないんじゃないかとか色々悩んだ末 出来るだけ丁寧にとこうなった
もし次があったら気を付ける。すまんかったな

83 :デフォルトの名無しさん:2017/04/30(日) 07:50:01.45 ID:BxxkE9Fv
丁寧な方がいいに決まってる
>>80はバカだから長文がウザいことに気付かず
丁寧語がウザいと的外れな指摘をしている。

84 :デフォルトの名無しさん:2017/04/30(日) 08:21:18.33 ID:PxU3UZJt
>>83
自分を非難している相手を擁護するのは変な感じだが
バカかどうかはあの一文からは分からないでしょ
それに自分も慇懃無礼にあたらないかとは危惧していたし的外れとは言えないと思う
何でも度が過ぎるのは良くない
だが齟齬を生じさせないようにする為にはこういったスレで長文になるのは仕方なくないか?
身の丈に合わない質問して「この解釈で合ってる?」みたいな聞き方した自分にも非があるとは思うが
バカ丁寧禁止より長文禁止の方が厳しいと思うわ

85 :デフォルトの名無しさん:2017/04/30(日) 09:47:52.98 ID:Dc5Ny+RF
正規表現で数字は、[0-9] または、\d

[0-9][0-9] なら、\d{2} と同じ

86 :デフォルトの名無しさん:2017/04/30(日) 12:18:27.09 ID:VPr4LyhY
丁寧なことが必ずしも良いとは限らない
質問するときは相手のことも考えて無駄を省くことが大事
質問を整理している間に自分で気付くこともある

87 :デフォルトの名無しさん:2017/04/30(日) 15:52:39.90 ID:3TcYedTF
>>84
>バカ丁寧禁止より長文禁止の方が厳しいと思うわ
読む側は馬鹿丁寧な長文=好感が持てる、長文でも許せる
丁寧でないけど長文=丁寧でない癖に長文だとぉ〜?!許せん
ってなる

88 :デフォルトの名無しさん:2017/04/30(日) 20:35:41.23 ID:IjVGB2EF
お前ら仲良くしろ

89 :デフォルトの名無しさん:2017/05/01(月) 09:32:05.11 ID:lsW6qson
長文NGしてれば見なくて済むのにわざわざ見てウゼェ言ってる奴って
マゾなの?やり方分かんないバカなの?ウゼェ言ってる俺カッケーな池沼?

90 :デフォルトの名無しさん:2017/05/01(月) 11:29:31.86 ID:hzoMRY/L
3行でまとめろ

91 :デフォルトの名無しさん:2017/05/01(月) 18:42:02.68 ID:Ypd7EE7u
ダ・ヴィンチ曰く「単純であることは究極の洗練だ」
今回の例にどれほど当てはまるかはわからんが、目指すのはそこだ。

92 :デフォルトの名無しさん:2017/05/03(水) 15:46:12.05 ID:/wkwyrKC
検索置換を教えて下さい。
行末の半角数字(桁数はまちまち)を行頭に移動したいです。
──────────────
■置換前■

abc1
東44
4-123
あいうえお02
──────────────
■置換後■

1abc
44東
1234-
02あいうえお
──────────────
使ってるエディタはgpadです。サクラエディタもあります。宜しくお願い致します。

93 :デフォルトの名無しさん:2017/05/03(水) 16:08:53.89 ID:KtRh/Jcn
>>92
gpadやサクラエディタは知らんけどJSならこんな感じ

replace(/(.*?)([0-9]*)¥n/g, "$2$1¥n")

最後の行にも改行がある前提
なければ入力の最後を示す$をOR条件として指定する

94 :デフォルトの名無しさん:2017/05/03(水) 17:09:36.61 ID:/wkwyrKC
>>93
ありがとうございます。レスをいただき申し訳ないのですが、
最初に書いているようにテキストエディタでできる検索置換を教えて頂きたいのです。

95 :デフォルトの名無しさん:2017/05/03(水) 17:53:10.90 ID:tt/7nJiL
>>94
gpad の[検索]-[置換]で
検索文字列 ^(.*\D)(\d+)
置換文字列 $2$1
とかかな

96 :デフォルトの名無しさん:2017/05/03(水) 18:09:12.54 ID:/wkwyrKC
>>95
すごいできます!即レスありがとうございました!感謝です!

97 :デフォルトの名無しさん:2017/05/04(木) 02:53:36.15 ID:P+e+GY0n
●Regular Expressionの使用環境
Bash on Ubuntu on Windows での sed

●検索か置換か?
置換

●説明
[ と ] で括られた最初の文言以外を削除したい

●対象データ
aaa[bbb]ccc
[ddd]eee
fff[ggg]hhh[iii]jjj
kkk

●希望する結果
bbb
ddd
ggg
空行、もしくは、そのまま(上記だとkkk)


cat hoge.txt | sed -e 's/.*\(\[.*]\)/\1/g'

で行けそうな気がしたんですが、結果は
[bbb]ccc
[ddd]eee
[iii]jjj
kkk
この有様。誰か助けてください。

98 :デフォルトの名無しさん:2017/05/04(木) 03:21:35.65 ID:1Mi5Sic1
>>97
s/\].*\|.*\[//g

99 :デフォルトの名無しさん:2017/05/04(木) 03:22:48.12 ID:7TNYL3q7
cat test.txt | sed -E 's/[^\[]*(\[[^\[]*\]).*/\1/g'

sedはnon-greedyサポートしてないので[^\[]*で
"["以外の文字にマッチするように指定する

100 :デフォルトの名無しさん:2017/05/04(木) 10:29:51.92 ID:P+e+GY0n
>>98
cat hoge.txt | sed -e 's/\].*\|.*\[//g'
これだと3行目が2つ目の [ ] のを拾ってしまった。

bbb
ddd
iii
kkk


>>99
cat hoge.txt | sed -E 's/[^\[]*(\[[^\[]*\]).*/\1/g'

[bbb]
[ddd]
[ggg]
kkk

狙い通りのが拾えました。[ ] が付いてくるけどそれは自分で外します。
どうもありがとうございました。

101 :デフォルトの名無しさん:2017/05/05(金) 08:29:26.53 ID:bm+deAdf
「Regular Expression」ってことは
RegularじゃないExpressionもあるのかな?

102 :デフォルトの名無しさん:2017/05/05(金) 11:21:47.47 ID:Ll1Ek2oh
>>101
https://www.google.co.jp/search?q=irregular+expression&ie=UTF-8&oe=UTF-8&hl=ja-jp&client=safari

103 :デフォルトの名無しさん:2017/05/05(金) 13:41:26.64 ID:Xc50Qjgk
>「irregular expression」に関連するキーワード

>保守速報

ワロタ

104 :デフォルトの名無しさん:2017/05/07(日) 03:23:46.82 ID:bf3ZF7DF
>>101
正規表現で表される集合の標本それぞれが正規でない表現じゃないの

105 :デフォルトの名無しさん:2017/05/07(日) 07:31:07.21 ID:fOF53fEF
そもそも誤訳だし

106 :101:2017/05/07(日) 16:34:35.27 ID:fwX9OlSY
>>104
なるほどおおおおぉぉぉ!!!
合点がいきまくりんぐです。ありがとうございます!

107 :デフォルトの名無しさん:2017/05/13(土) 23:19:52.64 ID:4xoUv3bU
書き込めない?

108 :デフォルトの名無しさん:2017/05/14(日) 17:21:45.80 ID:IUk17Lsy
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
検索

●説明
「ABC」の英大文字と小文字を区別せずに検索したいのですが
書き方はあるのでしょうか?
今は『abc|Abc|ABC』という正規表現を使っていますが
書くのがめんどうだし、aBcやabCにもヒットさせたいので
もっと簡潔な書き方があれば教えて下さい。

109 :デフォルトの名無しさん:2017/05/14(日) 18:29:13.61 ID:YzpdvDlp
>>108
(?i:ABC)
で行けるんではなかろうか

110 :デフォルトの名無しさん:2017/05/14(日) 18:30:36.34 ID:qjlEaygK
そのものズバリのチェックボックスがあるのに釣りかメクラか

111 :デフォルトの名無しさん:2017/05/14(日) 20:19:12.83 ID:IUk17Lsy
>>110
すみません、実はJaneStyleなど複数の環境で正規表現を使っていて、一番よく使うサクラエディタを例に出してしまいました。
確かにサクラエディタだと「英大文字と小文字を区別する」ってチェックがありますよね・・・

>>109
ありがとうございます!バッチリいけました。 ><

112 :デフォルトの名無しさん:2017/05/27(土) 19:51:02.34 ID:gdXMy//z
●Regular Expressionの使用環境
テキストエディタMeryでの強調文字列指定について質問です
http://www.haijin-boys.com/
Onigmo (Oniguruma-mod) (regular expression library) 5.15.0
https://github.com/k-takata/Onigmo

●検索か置換か?
検索?

●対象データ
"D:\PATH\HOGE",1,307,,0,"15/01/01 00:00:00","12/12/31 00:00:00",1,1,,,,"著者X",,,,,"タイトルA",,,2,,,,,1,1101,1101
"D:\PATH\FUGA",,,,,,"15/02/01 00:00:00",1,1,,,,,,,,,"名前B",4,,0
"E:\FOLDER\PIYO",20,197,91,0,"16/03/01 00:00:00","15/04/01 00:00:00",1,1,,,,"著者Y,Z","出版社",,,,"題名C"

●希望する結果
上のようなテキスト各行の最後に出現するダブルクォーテーション囲いの文字列
"タイトルA"
"名前B"
"題名C"
を取得して強調表示したいのですがどのような正規表現で記述すればよいのでしょうか?
あるいはダブルクォーテーションを含まない状態(タイトルA、名前B、題名C)でも差し支えありません

●説明?
・各行でカンマや "" 囲いの数はまちまちで、"" 囲いの中にカンマがある場合もあります
・"" 囲いの中のカンマを無視した場合、17番目のカンマの直後の "" 囲い部分です
・"タイトルA"、"名前B"、"題名C"のあとに続く文字列の長さ、形式は不定です
・対照データはマンガミーヤのブックリストです

よろしくお願いします

113 :デフォルトの名無しさん:2017/05/28(日) 06:04:53.01 ID:PkY5eGnw
"[^"]*"(?=[^"]*$)
(?<=")[^"]*(?="[^"]*$)

114 :112:2017/05/28(日) 07:52:06.42 ID:5aByZaI0
>>113
両方のパターンを教えていただきまして、ありがとうございます

"フォルダパス" の "[A-Z]:\\.+?" と "年/月/日 時:分:秒 "の "../.+?"
タイトルフィールドだけは全/半スペースで字下げして "[  ]+.+?" というパターンまでは作れましたが
字下げなしで強調表示できるようになり、一層見分けやすく、編集しやすくなりました

なぜこれらが最後の "タイトル" 部分にマッチするのか、まだ理解できてはいないのですが
読み解けるように頑張ってみます

115 :112:2017/05/28(日) 11:31:39.10 ID:5aByZaI0
先読みと後読みの使い方をなんとなく理解できるようになったかも?という感じで、自分で同じ表現をすぐに導き出せるかとなるとまだまだ難しそうです

調子にのって後読みで12番目のカンマの後ろの "著者" にマッチさせようとやってみましたが、繰り返し表現をふくむ後読みはダメだとか…
^".+?"([^,]*,){12}".+?" で「行頭から"著者"まで」はできても ^(?<=".+?"([^,]*,){12})".+?" では機能しないんですね
あれこれ弄り回して "タイトル" からカンマ5つ戻るかたちで先読みにして "[^"]*"(?=(,[^,]*){5}"[^"]*"(?=[^"]*$)) にしたら "著者" に
同様に {4} で "出版社" にマッチしました

おかげさまで色々と勉強になり、あらためてありがとうございました

116 :デフォルトの名無しさん:2017/05/28(日) 12:13:46.77 ID:IsUf2Pl+
こんな古代呪文みたいなの、実際に仕事とかで使ってないとなかなか覚えないし
覚えてもすぐ忘れてしまうよなw
全てのパターンを記憶して空で完全詠唱できる人なんているんだろうか?

117 :デフォルトの名無しさん:2017/05/28(日) 13:15:52.74 ID:QUomuFPF
暗唱できる必要性があるのか?
使うときにそういうのがあったなあって思う出すだけでいいだろ
あとは詳細を見て使えばいいだけ

118 :デフォルトの名無しさん:2017/05/28(日) 13:26:02.06 ID:35oU3ReV
仕事じゃなく趣味で覚えたけど
間違いなく覚えた方が便利

どっかに正規表現化してるだけでお金貰える仕事ないかな

119 :デフォルトの名無しさん:2017/05/28(日) 15:27:00.29 ID:dHcH/mRb
>>116
わたしレベルになると詠唱破棄すら可能w

120 :デフォルトの名無しさん:2017/05/28(日) 16:06:45.06 ID:MqtJ47ff
言語環境ごとに使える使えない、エスケープ必要不必要を間違えたりする
サポートしてない環境の多い先読みとかは他の手段使っちゃったりするからなかなか使いこなせない

121 :デフォルトの名無しさん:2017/05/28(日) 16:10:29.49 ID:W53JMrzP
$1 と \1 を間違えて泣きをみて以来、むしろ記憶しないようにしている……・

122 :デフォルトの名無しさん:2017/05/28(日) 16:18:27.70 ID:mQ0E20+1
perlから初めるとカタワになるな

123 :デフォルトの名無しさん:2017/05/29(月) 08:14:03.69 ID:XV2pt9yI
えっ!?

124 :デフォルトの名無しさん:2017/05/29(月) 11:05:33.03 ID:sPbSPx8D
コマンドプロンプトのfindstrコマンドで使えるやつより貧弱な正規表現環境なんてないよね?

125 :デフォルトの名無しさん:2017/05/29(月) 11:21:53.73 ID:sPbSPx8D
http://imgur.com/a/Yk1JN

126 :デフォルトの名無しさん:2017/05/29(月) 11:24:10.17 ID:sPbSPx8D
貼り間違えた
http://i.imgur.com/CTLs1wr.jpg

127 :デフォルトの名無しさん:2017/05/29(月) 21:58:39.79 ID:YdL4iPz3
>>124
おれの彼女の胸

128 :デフォルトの名無しさん:2017/05/30(火) 13:16:32.07 ID:V9BCWx6K
>>118
とある地方の区画整理の際、住所表記が変わるので
住所を正規化するために正規表現と簡単なDB処理とを組み合わせた
単純な処理を行うだけの1日仕事で、
そこらのリーマンの3ヶ月分ぐらいお金になった事とかあったな

仕事柄色んな会社を訪問するけど
テキストの簡単な置換すらできない(まずテキスト置換という概念を知らない)人って
事務程度でしかパソコン使わない人にはめちゃくちゃ多いんだよね

そんなに人達に (.+)abcd\n みたいな初歩的な正規表現を教えると
物凄く驚かれる

見下すようだけど世の中そんなもん

129 :デフォルトの名無しさん:2017/05/30(火) 17:50:42.66 ID:bhgaCfDA
>>128
まぁハードル高いよね、低くないと言うべきか

知らなきゃ「正規表現」というチェックボックスがあっても、それが何をするものなのか
言葉から具体的イメージが全く湧かないし
ヘルプ見てはじめて何をするものなのかわかるという、といっても具体例が
無ければヘルプ見たところで「難しそう>便利そう」になりがち
一目で「難しそう<便利そう」になるならとっくに正規表現を使ってる層だろうし

ファイルの検索 や excel や word や メモ帳 、IE、Edge あたりに正規表現が
最初っからあれば話は違ってくるんだろうなと

Mac触った事ないからアレだけど、Macなら充実してるのかしら?

130 :デフォルトの名無しさん:2017/05/30(火) 22:14:32.37 ID:wMq9WrJJ
>>129
システム屋やってる人間からしても正規表現って見るからにとっつきにくそうだもんな。
システム会社なのに知らない人間の方が多いというw

131 :デフォルトの名無しさん:2017/05/30(火) 22:28:36.41 ID:RvF0nsOU
>>130
えー
プログラム組む人種なら例外なく好物だと思ってたんだが(^^;;

132 :デフォルトの名無しさん:2017/05/31(水) 02:32:02.26 ID:6BoaVWxP
システム屋とかシステム会社って何のシステム?

133 :デフォルトの名無しさん:2017/05/31(水) 05:29:32.86 ID:hSyYnyRA
使い捨てコードといったらPerlで書いてた世代は正規表現に抵抗無さそう

134 :デフォルトの名無しさん:2017/05/31(水) 05:30:03.72 ID:sJHTybMt
>>131
VBとかでポチポチやってる人は嫌いそう
GUIで書けるいいツールがあったら広まるかもね

135 :デフォルトの名無しさん:2017/05/31(水) 08:06:38.95 ID:rBoo2fCo
小さな会社だと他より少しPC関連に詳しいってだけでIT部長とか言われこき使われる
勿論そんな役職なんて無い
正規表現なんて言葉を発したらセクハラだの変態だの言われかねん

136 :デフォルトの名無しさん:2017/05/31(水) 11:16:23.49 ID:u9qpXxTe
>>135
正規表現で置換
とか知らない人が聞いたらアレだもんなw

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

$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
10年ぐらい前のメモからのコピペだけど見ただけで目眩がするw

137 :デフォルトの名無しさん:2017/05/31(水) 11:27:09.17 ID:u9qpXxTe
>>132
一概にシステムといっても色々あるからね

機器制御系システムなんかだと正規表現を使う機会なんてまず無いだろうし
WEB系の事やってるなら何だかんだで正規表現を使う機会はそこそこあるだろうし

138 :デフォルトの名無しさん:2017/05/31(水) 11:46:52.88 ID:AV1cHHAT
CSV は、" などのエスケープについて、様々な方言があるから、正規表現では無理。
CSV の方言・規格を確定させてから、Ruby を使うべき

バグのほとんどが設計段階・仕様で生じる。
方言さえ確定していれば、バグらない

139 :デフォルトの名無しさん:2017/05/31(水) 11:53:36.36 ID:L1juUrGR
>>135
会社の忘年会では正規表現やりますって言ってパンツ脱ぐのか?

140 :デフォルトの名無しさん:2017/05/31(水) 12:15:57.63 ID:u9qpXxTe
>>138
仕事内容にもよるけどそんな事はない
なんせ世の中にはExcelのデータが糞ほどあるので
「Excelルールのcsvを正規表現で処理する+α」の仕事だけでも
たぶんそこらのリーマンよりは稼がせてもらってきたよ

日本の企業の大半は中小企業なわけだけど
ほんと信じられないほど無駄な事やってる会社がたくさんあるからね
こんな時間に2chなんてやってられるのも、そのお陰ですわ

141 :デフォルトの名無しさん:2017/05/31(水) 12:35:12.54 ID:MQUo5X9j
万能な処理って得てして使いにくいしな

142 :デフォルトの名無しさん:2017/05/31(水) 12:44:32.50 ID:gy6WrZsR
>>138
Rubyを使うべき、と言う唐突な結論以外は同意できる。
Ruby (のようなスクリプト)を使うべきなら完全に同意できたのに。

143 :デフォルトの名無しさん:2017/05/31(水) 16:04:23.05 ID:jFN45aLj
>>142
少し日本語は下手だが、
事前にCSV の方言・規格を確定すべし
という主張と読んだ。

144 :デフォルトの名無しさん:2017/05/31(水) 17:04:05.88 ID:MQUo5X9j
なぜrubyなのかよく分からん
多少正規表現エンジンの種類やバージョンの違いはあれど
正規表現はperlでもPHPでもJavaScriptでもPythonでも使えるし
rubyの正規表現なんて昔はコールバック処理するのがくそ面倒だった筈だが

145 :デフォルトの名無しさん:2017/05/31(水) 17:10:42.06 ID:BtqSGsFQ
正規表現を使わずにrubyでやれと言いたいのでは
まあ確かにrubyは標準で簡単強力なcsv処理ができるけど
ruby以外でのcsvの処理の仕方を知らない知識不足な人の戯言にしか見えない

146 :デフォルトの名無しさん:2017/05/31(水) 17:29:50.80 ID:nyiBm3r5
excelでも正規表現使えるけどな

147 :デフォルトの名無しさん:2017/05/31(水) 17:55:47.82 ID:b1E/NNUq
>>144
たぶんrubyのような言語と言いたかったのだと推察致しまする

148 :デフォルトの名無しさん:2017/06/01(木) 04:08:09.64 ID:+TrYOuL5
>>134
VB(今時は.NET)では入力チェックとかでよく使うからお前の偏見だよ。

149 :デフォルトの名無しさん:2017/06/01(木) 04:08:53.15 ID:+TrYOuL5
>>134
いい忘れたがサクラのマクロもよく使う。

150 :デフォルトの名無しさん:2017/06/01(木) 05:13:28.59 ID:gHUhkzd0
>>148
VBやってるやつが皆そうやってると思うか?
それこそ偏見だ

151 :デフォルトの名無しさん:2017/06/01(木) 05:24:23.62 ID:gHUhkzd0
>>149
お前個人の話かよ

152 :デフォルトの名無しさん:2017/06/01(木) 05:39:57.85 ID:pPoV2n06
そもそもテキスト処理じゃないと使わんよ
使う使う言う奴はプログラミングの分野が偏ってるんじゃないか?

153 :デフォルトの名無しさん:2017/06/01(木) 06:10:29.36 ID:htPbJpjE
エンドユーザーに近い分野で使うというより、開発者が使うものでしょ。SQLとかと同じ。

154 :デフォルトの名無しさん:2017/06/01(木) 08:16:36.86 ID:YbQp1MN1
>>153
そりゃプログラムから使うものだから開発者しか使わんよ
そう言う意味じゃなくて利用者が入力した値の妥当性確認とかに使うケースが多いんじゃね?
って話なんだろ

155 :デフォルトの名無しさん:2017/06/01(木) 09:37:01.51 ID:OU3iOJ/C
>>148
これが偏見な

156 :デフォルトの名無しさん:2017/06/01(木) 10:35:10.56 ID:Fkhc5exB
エマ中尉の盾になって死んだ人?

157 :デフォルトの名無しさん:2017/06/01(木) 12:16:30.24 ID:o/dQD8LP
>>154
特殊な例を一般化するのはよくない

158 :デフォルトの名無しさん:2017/06/01(木) 12:52:26.55 ID:YbQp1MN1
>>157
特殊?
そう言うなら他にもっと使われてる用途挙げてくれ

159 :デフォルトの名無しさん:2017/06/01(木) 12:55:42.58 ID:uSxzswpP
検索じゃろ
grep然りsed然りエディタの検索然り

160 :デフォルトの名無しさん:2017/06/01(木) 20:45:19.78 ID:YbQp1MN1
>>159
その辺りもエンドユーザー(多くは開発者だと思うけど)に近いところじゃね?

161 :デフォルトの名無しさん:2017/06/01(木) 21:36:20.85 ID:z/dTvzRJ
一般に正規表現自体をどこで使うかの話と違うんか?
プログラマがどこで使うかって文脈に限定してるのんか?

162 :デフォルトの名無しさん:2017/06/02(金) 00:26:45.39 ID:ixZw1vso
perlがそうであったようにログ読んだり整形したりするときにも良く使う。システム管理者。
プログラマによっては無理に正規表現使わないで正規表現を引数に取らないcontainとか複数行で書くって人もいるんじゃないか。入力チェックもそんな考えるような正規表現の出番少ないような。
perlくらい言語に組み込まれてるならともかく。

163 :デフォルトの名無しさん:2017/06/02(金) 01:15:51.17 ID:ZbzhojDH
>>156
ヘンケン艦長〜!

164 :デフォルトの名無しさん:2017/06/02(金) 14:02:59.19 ID:s9L+1vWi
正規表現、難しいですね…全然わかりません
お知恵をおかし下さい

例えば

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


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

// コメント "です"

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

最初は

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

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

何か良い書き方はありますでしょうか?
やりたい事は、PHPなどで、javascriptのソースから単一行のコメントを削除したいです。
よろしくお願い致します。

165 :デフォルトの名無しさん:2017/06/02(金) 14:24:22.46 ID:zHTMhHhl
//((?!//).)*?$

166 :デフォルトの名無しさん:2017/06/02(金) 20:31:58.40 ID:KFrvDlYH
PHP は知らん

$perl -ne 'm%((?:\".*?\"|/(?!/)|[^/])*)(.*)% ; printf("<$1> <$2>\n");'
test = "//abc"; // コメント "です"
<test = "//abc"; > <// コメント "です">
// コメント "です"
<> <// コメント "です">
$

167 :デフォルトの名無しさん:2017/06/02(金) 21:10:46.42 ID:yyLeCvfJ
末尾方向から、// を探して、もしあれば、その行を選択する。
^.*\/\/(ここに、2連続以上の、/ が存在しない)$

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

シングルクォーテーションは、どうするんだ?
test = '///abc'; /// コメント "です"

168 :デフォルトの名無しさん:2017/06/02(金) 23:18:34.61 ID:cODXM6Ca
javascriptだから、シングルダブルは同等機能
"'"とか'"'とか有だし
"\""とかのエスケープもある
"//abc"は文字列だし、"\""//abc"はコメント

169 :デフォルトの名無しさん:2017/06/03(土) 00:22:48.22 ID:02UJhjHA
みなさん、ありがとう御座います!
165さんの短いのでサクっと出来ました!

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

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

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

>165-167さん、ありがとう御座いました!

170 :デフォルトの名無しさん:2017/06/03(土) 00:23:37.51 ID:02UJhjHA
>168さん抜けちゃいました(汗
ありがとう御座いました!

171 :165:2017/06/03(土) 01:16:11.91 ID:janVI+9u
>>169
ツッコミか逆ギレ待ちだったんだが…
165ではコメントが無くてコード中に//がある場合にそのコードの部分にマッチする
削除だとコードを削ってしまうよ
コード中に//が無い場合、またはコード中に//がある場合にその後ろにコメント行がある場合、限定
マトモなのは「JS コメント 正規表現」とかのワードでggr

172 :デフォルトの名無しさん:2017/06/03(土) 01:49:01.34 ID:VDeCcObx
s#((?:"(?:\\\\|\\"|[^"])*+"|'(?:\\\\|\\'|[^'])*+'|/(?!/)|[^/])*+)(.*)#<$1>\t<$2>#

173 :デフォルトの名無しさん:2017/06/03(土) 02:57:17.44 ID:02UJhjHA
>>171
え!?
限定的なテストで、思ったとおりの動きをしたので、おお!すげー!って思ってました…

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

他の方が書かれてた方法も試したり、ググってみますね

174 :デフォルトの名無しさん:2017/06/03(土) 04:51:38.86 ID:ZUxfcpWv
区切り記号 ; や閉じ括弧 } のあとにスペースかタブいくつかの後に来る // から行末をコメントと見なすのが簡単?

175 :デフォルトの名無しさん:2017/06/03(土) 12:52:21.44 ID:7vig672V
コメント化は、プログラムデバッグ中にも命令を無効にするために使うこともあるし、ことはそう簡単じゃないよ
//if(hoge=="http://hoge.net") {//コメント

176 :デフォルトの名無しさん:2017/06/03(土) 14:13:52.35 ID:ep62Y9tf
これは、無限の組み合わせがあるから、正規表現じゃ無理

AST変換とか、LLVMでコンパイル後の命令木をもらって、
コメント部分を削除するとかしないと、自力じゃ無理なレベル

177 :デフォルトの名無しさん:2017/06/03(土) 14:17:50.88 ID:sCohk93m
うむ

178 :デフォルトの名無しさん:2017/06/03(土) 14:32:23.81 ID:7vig672V
こんな場合もあるからね
/* 一行コメントを外す
//*/hoge="abc";

179 :デフォルトの名無しさん:2017/06/03(土) 14:42:13.81 ID:mWYP1opd
文脈自由言語の領域か

180 :デフォルトの名無しさん:2017/06/03(土) 16:26:56.85 ID:kz1iKZuq
テキストから
06/03(
を抽出する場合、どんな表現になりますか?

181 :デフォルトの名無しさん:2017/06/03(土) 16:32:48.16 ID:7vig672V
何それ限定なの?
06\/03\(
(スラッシュにエスケープが要らない場合もあるけど付けといてダメなことはない)

182 :デフォルトの名無しさん:2017/06/03(土) 20:14:19.78 ID:4NkabvDw
>>181
sedのsなんかは(をエスケープすると特別な意味を持つんじゃ

183 :デフォルトの名無しさん:2017/06/03(土) 22:49:00.44 ID:yEDWU2+/
正規表現って本当に色々なパターンでテストしないと抜けがあったりするから怖いね

184 :デフォルトの名無しさん:2017/06/03(土) 23:15:22.50 ID:eiMrU4PF
>>183
それは仕様を理解していないから。
正規表現で表現してあるパターン以外にマッチする事はないんだから、
抜けがあるならパターンの意味を理解していないって事

185 :デフォルトの名無しさん:2017/06/04(日) 00:01:51.87 ID:caz8ZVsN
理解してないのに使う方が怖い

60 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)