1 名前:デフォルトの名無しさん [2017/03/15(水) 02:04:35.47 ID:e01p03UP.net] Regular Expressionスレです。 質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。 前スレ Regular Expression(正規表現) Part13 echo.2ch.net/test/read.cgi/tech/1415149975/ 次スレは>>980 宜しく 天ぷら等2以降
55 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:24:14.97 ID:7fUWShMv.net] ↑でも問題ないけど /.*?-((?:[^\s-]| )*[^\s-])(?=-)|.*-(?:[^\s-]| )*[^\s-](?!-)|-*[^-]*$/mg
56 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:39:21.99 ID:8aYCgh5m.net] >>50-54 無理を利いてくださりありがとうございます。 実は最初の質問に穴があったので別件という形で再質問させていただきました。失礼しました。 教えて頂いた記述は完璧でした本当に感謝です! レスも何度もくださってこの度は大変お世話になりました。
57 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:29:57.11 ID:rsUIJG5Q.net] ●Regular Expressionの使用環境 Becky! ●検索か置換か? 検索 ●説明 +0900以外に一致 ●対象データ + - +0 -0 +09 -09 +090 -090 +0900 -0900 +09000 -09000 +09010 -09010
58 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 21:30:53.51 ID:rsUIJG5Q.net] + - +0 -0 +09 -09 +090 -090 -0900 +09000 -09000 +09010 -09010 よろしくお願いします ※"+0900を含まない"を"+0900以外"を含むで実現したいです
59 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 08:10:19.34 ID:P/4d/uOg.net] Beckyで使えるかは知らんけど ^(?!\+0900$).*
60 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 12:02:05.13 ID:30M0P9UI.net] zip版をダウロードしてchmヘルプファイルを見てみたら、 正規表現は本当に基本的なものしか無かった (?!)はおろか()とかのキャプチャ自体無い(括弧は優先順位が上になるだけ) [abc-d]もダメ( ([ab]|[c-d])と分けて書くらしい) だから、やるなら ^[^+]|^\+$|^\+[^0]|^\+0]$|^\+0[^9]|…と全ての場合を併記するしかないかも
61 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 14:10:39.59 ID:P/4d/uOg.net] 鬼車や鬼雲使わず独自実装なんだね。シェアウェアだからかな 非包含か先読みを使えなきゃ実質無理だと思う ^\+0900$ の方をどうにかする運用を考えた方が良い Beckyの公式のメーリングリストや掲示板で正規表現じゃなく具体的にやりたい事を質問してみたら? 上手い運用方法を思い付いてくれる人が居るかも
62 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 16:15:06.41 ID:hNfgTF//.net] GPLならいざ知らずPCREや鬼車, 鬼雲もBSDライセンスだからなぁ 誰か外部の高機能正規表現ライブラリを利用するプラグインとか作ってそうだけど
63 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 00:09:10.84 ID:R9IUk1ak.net] >>57 if ≠"+0900" みたいなやり方が1番簡単だけど正規表現だと面倒 ≠ や = にまで拡張した正規表現があればいいんだ
64 名前:56 mailto:sage [2017/04/22(土) 01:50:21.67 ID:IwPPNWuo.net] >>56 分かる方いたら教えてください よろしくお願いします
65 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 04:17:39.78 ID:T741eTMO.net] ほらよ。使い物になるかは知らんが示された対象データにおいては要件を満たす ^(.{,4}|-0900|.{6,})$ 量指定子の{}が使えないなら ^(.|..|...|....|-0900|......)$ Beckyの仕様が一般的なPerlの正規表現とは違うならここで聞いても分かるやつ少ないだろうし 後出しする必要が出たらBeckyの方で聞いた方がいいぞ
66 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 17:13:13.21 ID:1zuuifbC.net] >>63 +0900のみのデータなんて普通は無いよね こういうのはJSTとかの時刻の後ろにつくもんじゃないの? 何がしたいのかよく解からないんだが? フィルタで使うんなら、〜が「ある時」「ない時」と選択できるようだから、 「ない時」にチェックすれば君の要件どうりなら、指定は^+0900$でよいことになる(+0900のみがない時ということになるけど) だけど、上で疑問視したように+0900の前に時刻があるならマッチしなくなるよ
67 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 17:16:27.15 ID:1zuuifbC.net] +のエスケープし忘れた(仕様にエスケープはあるよね?)
68 名前:56 ◆mUjtBupG2M mailto:sage [2017/04/22(土) 21:58:03.61 ID:UjWxDTr1.net] レスくださったみなさんありがとうございます >>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$)
69 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 02:31:41.68 ID:hK6ntaQJ.net] Beckyって基本的なものとはいえ正規表現使えるのか、いいなぁ 会社で強制使用のOutlookなんか and or しかない上に 検索語を入力中に変なところで勝手にor区切りするわフォーカス外れるわでもうムチャクチャ 仕事で何年も前のメール探すのに絞り込めなくて、最終的には数百通人間grep状態しょっちゅう…
70 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 05:21:48.35 ID:DzF9wMLj.net] ^(\+|-|-0900)(.?|..|...|([1-9].|.[0-8])..|..([1-9].|.[1-9])|.....+)$
71 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 05:33:24.87 ID:DzF9wMLj.net] ^(.|-0900)(.?|..|...|(([1-9]|\D).|.([0-8]|\D))..|..(([1-9]|\D).|.([1-9]|\D))|.....+)$
72 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 05:44:27.04 ID:DzF9wMLj.net] ^(.|-0900)(.?|..|...|([^0].|.[^9])..|..([^0].|.[^0])|.....+)$
73 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 05:52:59.96 ID:DzF9wMLj.net] ^(-0900|.(.?|..|...|([^0].|.[^9])..|..([^0].|.[^0])|.....+))$
74 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 07:11:51.07 ID:2K1Rl01+.net] ^[^+]*$|\+(|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>
75 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 14:27:49.79 ID:fsvPYIZO.net] >>68 wanderlust使ってて十分だがmaildirでファイル保存してるのでなんでもありだ
76 名前:56 mailto:sage [2017/04/23(日) 22:57:55.33 ID:/2AcrhSu.net] >>72 質問に忠実な正規表現ありがとうございました >>73 きゃー素敵!と冗談はさておき まさに望んでいたものでした、本当にどうもありがとうございました!
77 名前:デフォルトの名無しさん mailto:sage [2017/04/28(金) 19:19:48.10 ID:VBxbz7un.net] 正規表現を勉強し始めた者です >>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*」という書き方の方が処理が速くなったりとか何か理由があるのでしょうか?
78 名前:76 mailto:sage [2017/04/28(金) 19:24:12.30 ID:VBxbz7un.net] 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つの疑問点の回答をお願いしたいです また解釈を間違えている箇所がありましたらそちらも指摘下さい。よろしくお願いします
79 名前:デフォルトの名無しさん mailto:sage [2017/04/29(土) 18:45:01.61 ID:0PD6E3oz.net] >>76-77 どちらも深い意味はないよ 行き当たりばったりで何とかテストに通るようにしただけだから > 3桁までの表現に0*としてるのはなぜなのでしょうか? コメント付けてくれた通りまさしく「0〜3桁とその先頭に0が続くパターン」 という順序で考えてたから結果的にそうなったのだと思う まず0から999に一致するパターンを書いて、それに 0 が先行する場合 0* を足して でも 0900 には一致しないように… とかそんな感じ > この2つは合わせて \+0[1-8][0-9][0-9] としてはダメなのでしょうか? ダメじゃない その辺りはこのジェネレーターで生成した正規表現をもとにしてる Regex Numeric Range Generator 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] がまとめられると気がついたのでそこは直したけど 全部まとめられるとは気づいてなかっただけ
80 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 00:11:00.00 ID:PxU3UZJt.net] >>78 回答ありがとうございます つい先日覚え始めた身ながらも>>73 さんの式に感銘を受け是非とも理解したく思い 分からない事だらけの中、自分であれこれ分解したり試したりしていたのですが 疑問に思った点を自力で晴らす事が出来ず質問させて頂きました 未熟故に不理解な部分があるのではないかと思っておりましたが 「どちらも深い意味はない」との事で少々肩透かしでしたが安心しました 無知故に身構え過ぎていたようです 作成の経緯や方法まで丁寧に説明して頂きありがとうございました 今後の参考にさせて頂きます。感謝!
81 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 03:04:48.91 ID:sTLetcQY.net] 慇懃無礼でうぜえ
82 名前:デフォルトの名無しさん [2017/04/30(日) 04:34:43.13 ID:smayr5dM.net] >>80 確かに邪魔だけど、おこるほどじゃない
83 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 07:25:58.21 ID:PxU3UZJt.net] >>80 それも少し思ったんだが重箱の隅をつついてると受け取られ答えてもらえないんじゃないかとか色々悩んだ末 出来るだけ丁寧にとこうなった もし次があったら気を付ける。すまんかったな
84 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 07:50:01.45 ID:BxxkE9Fv.net] 丁寧な方がいいに決まってる >>80 はバカだから長文がウザいことに気付かず 丁寧語がウザいと的外れな指摘をしている。
85 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 08:21:18.33 ID:PxU3UZJt.net] >>83 自分を非難している相手を擁護するのは変な感じだが バカかどうかはあの一文からは分からないでしょ それに自分も慇懃無礼にあたらないかとは危惧していたし的外れとは言えないと思う 何でも度が過ぎるのは良くない だが齟齬を生じさせないようにする為にはこういったスレで長文になるのは仕方なくないか? 身の丈に合わない質問して「この解釈で合ってる?」みたいな聞き方した自分にも非があるとは思うが バカ丁寧禁止より長文禁止の方が厳しいと思うわ
86 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 09:47:52.98 ID:Dc5Ny+RF.net] 正規表現で数字は、[0-9] または、\d [0-9][0-9] なら、\d{2} と同じ
87 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 12:18:27.09 ID:VPr4LyhY.net] 丁寧なことが必ずしも良いとは限らない 質問するときは相手のことも考えて無駄を省くことが大事 質問を整理している間に自分で気付くこともある
88 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 15:52:39.90 ID:3TcYedTF.net] >>84 >バカ丁寧禁止より長文禁止の方が厳しいと思うわ 読む側は馬鹿丁寧な長文=好感が持てる、長文でも許せる 丁寧でないけど長文=丁寧でない癖に長文だとぉ〜?!許せん ってなる
89 名前:デフォルトの名無しさん mailto:sage [2017/04/30(日) 20:35:41.23 ID:IjVGB2EF.net] お前ら仲良くしろ
90 名前:デフォルトの名無しさん mailto:sage [2017/05/01(月) 09:32:05.11 ID:lsW6qson.net] 長文NGしてれば見なくて済むのにわざわざ見てウゼェ言ってる奴って マゾなの?やり方分かんないバカなの?ウゼェ言ってる俺カッケーな池沼?
91 名前:デフォルトの名無しさん mailto:sage [2017/05/01(月) 11:29:31.86 ID:hzoMRY/L.net] 3行でまとめろ
92 名前:デフォルトの名無しさん [2017/05/01(月) 18:42:02.68 ID:Ypd7EE7u.net] ダ・ヴィンチ曰く「単純であることは究極の洗練だ」 今回の例にどれほど当てはまるかはわからんが、目指すのはそこだ。
93 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 15:46:12.05 ID:/wkwyrKC.net] 検索置換を教えて下さい。 行末の半角数字(桁数はまちまち)を行頭に移動したいです。 ────────────── ■置換前■ abc1 東44 4-123 あいうえお02 ────────────── ■置換後■ 1abc 44東 1234- 02あいうえお ────────────── 使ってるエディタはgpadです。サクラエディタもあります。宜しくお願い致します。
94 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 16:08:53.89 ID:KtRh/Jcn.net] >>92 gpadやサクラエディタは知らんけどJSならこんな感じ replace(/(.*?)([0-9]*)¥n/g, "$2$1¥n") 最後の行にも改行がある前提 なければ入力の最後を示す$をOR条件として指定する
95 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 17:09:36.61 ID:/wkwyrKC.net] >>93 ありがとうございます。レスをいただき申し訳ないのですが、 最初に書いているようにテキストエディタでできる検索置換を教えて頂きたいのです。
96 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 17:53:10.90 ID:tt/7nJiL.net] >>94 gpad の[検索]-[置換]で 検索文字列 ^(.*\D)(\d+) 置換文字列 $2$1 とかかな
97 名前:デフォルトの名無しさん mailto:sage [2017/05/03(水) 18:09:12.54 ID:/wkwyrKC.net] >>95 すごいできます!即レスありがとうございました!感謝です!
98 名前:デフォルトの名無しさん mailto:sage [2017/05/04(木) 02:53:36.15 ID:P+e+GY0n.net] ●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 この有様。誰か助けてください。
99 名前:デフォルトの名無しさん mailto:sage [2017/05/04(木) 03:21:35.65 ID:1Mi5Sic1.net] >>97 s/\].*\|.*\[//g
100 名前:デフォルトの名無しさん mailto:sage [2017/05/04(木) 03:22:48.12 ID:7TNYL3q7.net] cat test.txt | sed -E 's/[^\[]*(\[[^\[]*\]).*/\1/g' sedはnon-greedyサポートしてないので[^\[]*で "["以外の文字にマッチするように指定する
101 名前:デフォルトの名無しさん mailto:sage [2017/05/04(木) 10:29:51.92 ID:P+e+GY0n.net] >>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 狙い通りのが拾えました。[ ] が付いてくるけどそれは自分で外します。 どうもありがとうございました。
102 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 08:29:26.53 ID:bm+deAdf.net] 「Regular Expression」ってことは RegularじゃないExpressionもあるのかな?
103 名前:デフォルトの名無しさん [2017/05/05(金) 11:21:47.47 ID:Ll1Ek2oh.net] >>101 https://www.google.co.jp/search?q=irregular+expression&ie=UTF-8&oe=UTF-8&hl=ja-jp&client=safari
104 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 13:41:26.64 ID:Xc50Qjgk.net] >「irregular expression」に関連するキーワード > >保守速報 ワロタ
105 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 03:23:46.82 ID:bf3ZF7DF.net] >>101 正規表現で表される集合の標本それぞれが正規でない表現じゃないの
106 名前:デフォルトの名無しさん [2017/05/07(日) 07:31:07.21 ID:fOF53fEF.net] そもそも誤訳だし
107 名前:101 mailto:sage [2017/05/07(日) 16:34:35.27 ID:fwX9OlSY.net] >>104 なるほどおおおおぉぉぉ!!! 合点がいきまくりんぐです。ありがとうございます!
108 名前:デフォルトの名無しさん [2017/05/13(土) 23:19:52.64 ID:4xoUv3bU.net] 書き込めない?
109 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 17:21:45.80 ID:IUk17Lsy.net] ●Regular Expressionの使用環境 サクラエディタ ●検索か置換か? 検索 ●説明 「ABC
110 名前:」の英大文字と小文字を区別せずに検索したいのですが 書き方はあるのでしょうか? 今は『abc|Abc|ABC』という正規表現を使っていますが 書くのがめんどうだし、aBcやabCにもヒットさせたいので もっと簡潔な書き方があれば教えて下さい。 [] [ここ壊れてます]
111 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 18:29:13.61 ID:YzpdvDlp.net] >>108 (?i:ABC) で行けるんではなかろうか
112 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 18:30:36.34 ID:qjlEaygK.net] そのものズバリのチェックボックスがあるのに釣りかメクラか
113 名前:デフォルトの名無しさん mailto:sage [2017/05/14(日) 20:19:12.83 ID:IUk17Lsy.net] >>110 すみません、実はJaneStyleなど複数の環境で正規表現を使っていて、一番よく使うサクラエディタを例に出してしまいました。 確かにサクラエディタだと「英大文字と小文字を区別する」ってチェックがありますよね・・・ >>109 ありがとうございます!バッチリいけました。 ><
114 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 19:51:02.34 ID:gdXMy//z.net] ●Regular Expressionの使用環境 テキストエディタMeryでの強調文字列指定について質問です 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"のあとに続く文字列の長さ、形式は不定です ・対照データはマンガミーヤのブックリストです よろしくお願いします
115 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 06:04:53.01 ID:PkY5eGnw.net] "[^"]*"(?=[^"]*$) (?<=")[^"]*(?="[^"]*$)
116 名前:112 mailto:sage [2017/05/28(日) 07:52:06.42 ID:5aByZaI0.net] >>113 両方のパターンを教えていただきまして、ありがとうございます "フォルダパス" の "[A-Z]:\\.+?" と "年/月/日 時:分:秒 "の "../.+?" タイトルフィールドだけは全/半スペースで字下げして "[ ]+.+?" というパターンまでは作れましたが 字下げなしで強調表示できるようになり、一層見分けやすく、編集しやすくなりました なぜこれらが最後の "タイトル" 部分にマッチするのか、まだ理解できてはいないのですが 読み解けるように頑張ってみます
117 名前:112 mailto:sage [2017/05/28(日) 11:31:39.10 ID:5aByZaI0.net] 先読みと後読みの使い方をなんとなく理解できるようになったかも?という感じで、自分で同じ表現をすぐに導き出せるかとなるとまだまだ難しそうです 調子にのって後読みで12番目のカンマの後ろの "著者" にマッチさせようとやってみましたが、繰り返し表現をふくむ後読みはダメだとか… ^".+?"([^,]*,){12}".+?" で「行頭から"著者"まで」はできても ^(?<=".+?"([^,]*,){12})".+?" では機能しないんですね あれこれ弄り回して "タイトル" からカンマ5つ戻るかたちで先読みにして "[^"]*"(?=(,[^,]*){5}"[^"]*"(?=[^"]*$)) にしたら "著者" に 同様に {4} で "出版社" にマッチしました おかげさまで色々と勉強になり、あらためてありがとうございました
118 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 12:13:46.77 ID:IsUf2Pl+.net] こんな古代呪文みたいなの、実際に仕事とかで使ってないとなかなか覚えないし 覚えてもすぐ忘れてしまうよなw 全てのパターンを記憶して空で完全詠唱できる人なんているんだろうか?
119 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:15:52.74 ID:QUomuFPF.net] 暗唱できる必要性があるのか? 使うときにそういうのがあったなあって思う出すだけでいいだろ あとは詳細を見て使えばいいだけ
120 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:26:02.06 ID:35oU3ReV.net] 仕事じゃなく趣味で覚えたけど 間違いなく覚えた方が便利 どっかに正規表現化してるだけでお金貰える仕事ないかな
121 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 15:27:00.29 ID:dHcH/mRb.net] >>116 わたしレベルになると詠唱破棄すら可能w
122 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 16:06:45.06 ID:MqtJ47ff.net] 言語環境ごとに使える使えない、エスケープ必要不必要を間違えたりする サポートしてない環境の多い先読みとかは他の手段使っちゃったりするからなかなか使いこなせない
123 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 16:10:29.49 ID:W53JMrzP.net] $1 と \1 を間違えて泣きをみて以来、むしろ記憶しないようにしている……・
124 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 16:18:27.70 ID:mQ0E20+1.net] perlから初めるとカタワになるな
125 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 08:14:03.69 ID:XV2pt9yI.net] えっ!?
126 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 11:05:33.03 ID:sPbSPx8D.net] コマンドプロンプトのfindstrコマンドで使えるやつより貧弱な正規表現環境なんてないよね?
127 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 11:21:53.73 ID:sPbSPx8D.net] imgur.com/a/Yk1JN
128 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 11:24:10.17 ID:sPbSPx8D.net] 貼り間違えた i.imgur.com/CTLs1wr.jpg
129 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 21:58:39.79 ID:YdL4iPz3.net] >>124 おれの彼女の胸
130 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 13:16:32.07 ID:V9BCWx6K.net] >>118 とある地方の区画整理の際、住所表記が変わるので 住所を正規化するために正規表現と簡単なDB処理とを組み合わせた 単純な処理を行うだけの1日仕事で、 そこらのリーマンの3ヶ月分ぐらいお金になった事とかあったな 仕事柄色んな会社を訪問するけど テキストの簡単な置換すらできない(まずテキスト置換という概念を知らない)人って 事務程度でしかパソコン使わない人にはめちゃくちゃ多いんだよね そんなに人達に (.+)abcd\n みたいな初歩的な正規表現を教えると 物凄く驚かれる 見下すようだけど世の中そんなもん
131 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 17:50:42.66 ID:bhgaCfDA.net] >>128 まぁハードル高いよね、低くないと言うべきか 知らなきゃ「正規表現」というチェックボックスがあっても、それが何をするものなのか 言葉から具体的イメージが全く湧かないし ヘルプ見てはじめて何をするものなのかわかるという、といっても具体例が 無ければヘルプ見たところで「難しそう>便利そう」になりがち 一目で「難しそう<便利そう」になるならとっくに正規表現を使ってる層だろうし ファイルの検索 や excel や word や メモ帳 、IE、Edge あたりに正規表現が 最初っからあれば話は違ってくるんだろうなと Mac触った事ないからアレだけど、Macなら充実してるのかしら?
132 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 22:14:32.37 ID:wMq9WrJJ.net] >>129 システム屋やってる人間からしても正規表現って見るからにとっつきにくそうだもんな。 システム会社なのに知らない人間の方が多いというw
133 名前:デフォルトの名無しさん [2017/05/30(火) 22:28:36.41 ID:RvF0nsOU.net] >>130 えー プログラム組む人種なら例外なく好物だと思ってたんだが(^^;;
134 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 02:32:02.26 ID:6BoaVWxP.net] システム屋とかシステム会社って何のシステム?
135 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 05:29:32.86 ID:hSyYnyRA.net] 使い捨てコードといったらPerlで書いてた世代は正規表現に抵抗無さそう
136 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 05:30:03.72 ID:sJHTybMt.net] >>131 VBとかでポチポチやってる人は嫌いそう GUIで書けるいいツールがあったら広まるかもね
137 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 08:06:38.95 ID:rBoo2fCo.net] 小さな会社だと他より少しPC関連に詳しいってだけでIT部長とか言われこき使われる 勿論そんな役職なんて無い 正規表現なんて言葉を発したらセクハラだの変態だの言われかねん
138 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 11:16:23.49 ID:u9qpXxTe.net] >>135 正規表現で置換 とか知らない人が聞いたらアレだもんなw >>133 正にその世代だけど 昔のperlは正規表現抜きでも変態記法満載だったから だんだん昔のコードは読めない人が増えてきてる $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_} 10年ぐらい前のメモからのコピペだけど見ただけで目眩がするw
139 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 11:27:09.17 ID:u9qpXxTe.net] >>132 一概にシステムといっても色々あるからね 機器制御系システムなんかだと正規表現を使う機会なんてまず無いだろうし WEB系の事やってるなら何だかんだで正規表現を使う機会はそこそこあるだろうし
140 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 11:46:52.88 ID:AV1cHHAT.net] CSV は、" などのエスケープについて、様々な方言があるから、正規表現では無理。 CSV の方言・規格を確定させてから、Ruby を使うべき バグのほとんどが設計段階・仕様で生じる。 方言さえ確定していれば、バグらない
141 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 11:53:36.36 ID:L1juUrGR.net] >>135 会社の忘年会では正規表現やりますって言ってパンツ脱ぐのか?
142 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 12:15:57.63 ID:u9qpXxTe.net] >>138 仕事内容にもよるけどそんな事はない なんせ世の中にはExcelのデータが糞ほどあるので 「Excelルールのcsvを正規表現で処理する+α」の仕事だけでも たぶんそこらのリーマンよりは稼がせてもらってきたよ 日本の企業の大半は中小企業なわけだけど ほんと信じられないほど無駄な事やってる会社がたくさんあるからね こんな時間に2chなんてやってられるのも、そのお陰ですわ
143 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 12:35:12.54 ID:MQUo5X9j.net] 万能な処理って得てして使いにくいしな
144 名前:デフォルトの名無しさん [2017/05/31(水) 12:44:32.50 ID:gy6WrZsR.net] >>138 Rubyを使うべき、と言う唐突な結論以外は同意できる。 Ruby (のようなスクリプト)を使うべきなら完全に同意できたのに。
145 名前:デフォルトの名無しさん [2017/05/31(水) 16:04:23.05 ID:jFN45aLj.net] >>142 少し日本語は下手だが、 事前にCSV の方言・規格を確定すべし という主張と読んだ。
146 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 17:04:05.88 ID:MQUo5X9j.net] なぜrubyなのかよく分からん 多少正規表現エンジンの種類やバージョンの違いはあれど 正規表現はperlでもPHPでもJavaScriptでもPythonでも使えるし rubyの正規表現なんて昔はコールバック処理するのがくそ面倒だった筈だが
147 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 17:10:42.06 ID:BtqSGsFQ.net] 正規表現を使わずにrubyでやれと言いたいのでは まあ確かにrubyは標準で簡単強力なcsv処理ができるけど ruby以外でのcsvの処理の仕方を知らない知識不足な人の戯言にしか見えない
148 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 17:29:50.80 ID:nyiBm3r5.net] excelでも正規表現使えるけどな
149 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 17:55:47.82 ID:b1E/NNUq.net] >>144 たぶんrubyのような言語と言いたかったのだと推察致しまする
150 名前:デフォルトの名無しさん [2017/06/01(木) 04:08:09.64 ID:+TrYOuL5.net] >>134 VB(今時は.NET)では入力チェックとかでよく使うからお前の偏見だよ。
151 名前:デフォルトの名無しさん [2017/06/01(木) 04:08:53.15 ID:+TrYOuL5.net] >>134 いい忘れたがサクラのマクロもよく使う。
152 名前:デフォルトの名無しさん mailto:sage [2017/06/01(木) 05:13:28.59 ID:gHUhkzd0.net] >>148 VBやってるやつが皆そうやってると思うか? それこそ偏見だ
153 名前:デフォルトの名無しさん mailto:sage [2017/06/01(木) 05:24:23.62 ID:gHUhkzd0.net] >>149 お前個人の話かよ
154 名前:デフォルトの名無しさん mailto:sage [2017/06/01(木) 05:39:57.85 ID:pPoV2n06.net] そもそもテキスト処理じゃないと使わんよ 使う使う言う奴はプログラミングの分野が偏ってるんじゃないか?
155 名前:デフォルトの名無しさん mailto:sage [2017/06/01(木) 06:10:29.36 ID:htPbJpjE.net] エンドユーザーに近い分野で使うというより、開発者が使うものでしょ。SQLとかと同じ。