17/03/15 02:04:35.47 e01p03UP.net
Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part13
スレリンク(tech板)
次スレは>>980宜しく
天ぷら等2以降
2:デフォルトの名無しさん
17/03/15 02:06:40.55 ko4BTSP2.net
スルーされにくい質問のテンプレと例
●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
※ ^ はアンダーラインだそうな ^^;
3:デフォルトの名無しさん
17/03/15 02:06:57.31 ko4BTSP2.net
◆関連サイト
正規表現メモ
URLリンク(www.kt.rim.or.jp)
Perl正規表現雑技
URLリンク(www.din.or.jp)
Regular Expression(Riue ちゃんの正規表現講座)
URLリンク(www.sixnine.net)
正規表現パズル
URLリンク(www.geocities.jp)
詳説 正規表現
URLリンク(www.oreilly.co.jp)
正規表現プログラミングFAQ
URLリンク(capslockabcjp.kitunebi.com)
JScript 正規表現の概説
URLリンク(msdn.microsoft.com)
.NET Framework 正規表現言語要素
URLリンク(msdn.microsoft.com)
【 初心者 】 正規表現 【 入門 】 ←閉鎖
URLリンク(funcchan.blog16.fc2.com)
クックブック ←追加
鬼車、鬼雲 ←追加
4:デフォルトの名無しさん
17/03/15 02:07:49.24 ko4BTSP2.net
◆関連スレ
[UNIX板] 正規表現
スレリンク(unix板)
[WebProg] 正規表現道場 Part2 ←板移転
スレリンク(php板)
◆前スレ
[1] スレリンク(tech板)
[2] スレリンク(tech板)
[3] スレリンク(tech板)
[4] スレリンク(tech板)
[5] スレリンク(tech板)
[6] スレリンク(tech板)
[7] スレリンク(tech板)
[8] スレリンク(tech板)
[9] スレリンク(tech板)
[10] スレリンク(tech板)
[11] スレリンク(tech板)
[12] スレリンク(tech板)
[13] スレリンク(tech板)
5:デフォルトの名無しさん
17/03/15 02:08:13.70 ko4BTSP2.net
鬼車
URLリンク(www.geocities.jp)
鬼雲
URLリンク(github.com)
Boost.Regex(日本語訳)
URLリンク(alpha.sourceforge.jp)
秀丸: 複数行にまたがる検索について
URLリンク(homepage2.nifty.com)
サクラエディタ: 改行
URLリンク(d.hatena.ne.jp)
※ サクラエディタでは複数行に渡る検索・置換は出来ません。
正規表現クックブック
URLリンク(www.oreilly.co.jp)
せいきなんとか
URLリンク(akiba.geocities.jp)
6:デフォルトの名無しさん
17/03/15 02:08:24.61 5ViZ5KQR.net
387:名無し募集中。。。:2017/03/15(水) 02:01:25
以下依頼します。
よろしくお願いします(宣言してスレ立て規制に引っかかった)
【板名】 プログラム技術
【板URL】 URLリンク(echo.2ch.net)
【タイトル】 Regular Expression(正規表現) Part14
【名前(省略可)】
【メール欄(省略可)】
【本文】
Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part13
スレリンク(tech板)
次スレは>>980宜しく
天ぷら等2以降
7:デフォルトの名無しさん
17/03/15 02:09:35.98 ko4BTSP2.net
[ ある "文字列" を含まない正規表現 ]
▽ 先読みが使える環境
((?!xyz).)* または (?:(?!xyz).)*
後者はカッコによるキャプチャを無効化しています。
1文字以上の繰り返しにしたい場合は * を + に書き換えて下さい。
▽ 先読みが使えない環境
オートマトンの知識が不可欠なため初心者にはまず無理です。
解説サイトですらほとんどがデタラメな作成方法を載せています。
↓正しい作り方はこちら。
xy を含まないものにマッチする正規表現 - Perl正規表現雑技
URLリンク(www.din.or.jp)
xyz を含まないものにマッチする正規表現 - Perl正規表現雑技
URLリンク(www.din.or.jp)
↓いろいろな文字列否定
タグの中に "ある文字列" を含まない正規表現
URLリンク(akiba.geocities.jp)
8:デフォルトの名無しさん
17/03/15 08:53:37.66 ZusWJMmJ.net
>>1
乙
9:デフォルトの名無しさん
17/03/15 11:35:18.29 7YWEdixI.net
どうでもいいけど deny は高校で習ったわ
10:デフォルトの名無しさん
17/03/15 15:17:17.33 ARIh7/3F.net
習う習わないっていう材料はテキストに出てくるかどうかなのか?
(と言っても俺の時代学校によって採用するテキストの種類だって何種類もあったんだけど)
それともどっかの参考書も含むのか?
11:デフォルトの名無しさん
17/03/15 15:21:02.26 JuWg/t11.net
私は中学校で習いましたよ
12:デフォルトの名無しさん
17/03/15 16:23:05.39 FiGu7lnE.net
Regexの発音
URLリンク(www.youtube.com)
URLリンク(english.stackexchange.com)
URLリンク(www.quora.com)
英語圏でもhard g派とsoft g派が半々
俺は語呂がいいからsoft g派 カタカナにするとレジェックス
英語で発音するときはリージェックスのほうが近いけどね
gifをギフって読む人がいるのと同じ
13:デフォルトの名無しさん
17/03/15 18:00:46.15 LExN6Gy2.net
ギットをジットと呼ぶ人もいるの?
14:デフォルトの名無しさん
17/03/15 19:10:20.88 FiGu7lnE.net
それは略語じゃなくて元から英単語だからね
リーナスがジットって発音してたらそれが広まっただろうけど
15:デフォルトの名無しさん
17/03/15 23:15:08.29 GyMxol53.net
海外の動画見たら「SQL Server」を「シークルサーバー」って発音しててちょっと驚いた
16:デフォルトの名無しさん
17/03/16 01:57:00.56 y9TWt00W.net
>>15
そういえば昔、初めてRDBを学んだ頃
会社の先輩でSQLを「シークェル」て呼ぶ人いたわ
その人一人だけだったけど
17:デフォルトの名無しさん
17/03/16 23:04:01.82 SS9/9E5d.net
FAQ!
18:デフォルトの名無しさん
17/03/21 02:29:10.44 5LrJtuWs.net
>>16
Fileをローマ字読みでフィレと読んでいる
MakeFileはマケフィレ
19:デフォルトの名無しさん
17/03/23 06:22:49.19 m0GWFz0v.net
URLリンク(patorjk.com)
20:デフォルトの名無しさん
17/03/24 06:37:22.44 J6kPEUuW.net
SQLの話まで行くともはやスレタイ関係ないじゃん、と思ったが>>19は面白かったわ
俺はsoft g、S-Q-Lで読んでるが、相手が先に違う読み方してたらそれに合わせてる
21:デフォルトの名無しさん
17/03/29 23:42:35.49 CyM0OTMA.net
質問
詳説 正規表現 第2版 持ってるんだけど、 詳説 正規表現 第3版 との違いって何かある?
第3版の方は5000円もするから大差ないなら買わないでおきたい
22:デフォルトの名無しさん
17/03/30 00:21:57.35 LEwdK5Fw.net
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:デフォルトの名無しさん
17/03/30 00:39:32.58 Z/GqZVkW.net
買おうと思ったけど、後ろ半分が自分に関係なくて買うのやめた。
24:デフォルトの名無しさん
17/03/30 01:42:52.91 1DorAGfX.net
失礼します。質問させていただきます。
複数行からなるデータを、指定したピッチ(行)おきに消したいのですが、やり方を教えて下さい!
例えば
中1行空けてなら1,3,5,7
中2行空けてなら1,4,7,10
中3行空けてなら1,5,9,13
の行を削除していくみたいな感じです。
出だしは1行目からでなくても、これは行の調整でなんとか出来そうです。
できるだけ手順が少ないのが理想です。やり方解る方マジ教えてほしいです!
手作業でやってて疲れてしました。まだいっぱいあります・・・お願いします。
25:デフォルトの名無しさん
17/03/30 02:07:11.97 J79lEXio.net
それエディタのマクロでやること
26:デフォルトの名無しさん
17/03/30 02:20:39.52 7+t5IDTq.net
>>24
gawk
27:デフォルトの名無しさん
17/03/30 03:34:41.36 Z/GqZVkW.net
何かスクリプトが使えるなら簡単だけど
正規表現だけでは難しそう
いらない行だけに含まれている
決まった文字、記号があるとか、またはその逆みたいな
いらない行を判断出来る要素があれば正規表現の検索置換で可能
28:デフォルトの名無しさん
17/03/30 04:00:51.53 Z/GqZVkW.net
あそっか、上から3行づつとかで切っていけばいけるのか
明日試してみよっと。
29:デフォルトの名無しさん
17/03/30 04:11:47.74 LEwdK5Fw.net
中1行ずつに削除なら(.*)¥n.* を ¥1に置換
中2行ずるに削除なら(.*)¥n.*¥n.* を ¥1に置換
みたいな方法でできるけど
特別な理由が無い限りエディタのマクロ使うかスクリプト使うね
30:デフォルトの名無しさん
17/03/30 04:16:57.88 UdsMclqE.net
正規表現でって言うけど何使うのかな?
Perl?
31:24
17/03/30 06:57:32.87 1DorAGfX.net
レスを頂い方々どうもありがとうございます。エディタのマクロでやる方がいいのですか!
これはいいことを知りました!マクロ使ったことないですがこの次に勉強してみようと思います。
>>29さん
教えて頂いた正規表現で出来ました!これでマジ助かります\(^o^)/
どうもありがとうございました。\(^o^)/
32:デフォルトの名無しさん
17/04/01 03:40:09.20 4EJbPXqm.net
(?i)((\S+ ){5}|^(\S+ ){0,5}?)(\bAAA\b)(( \S+){5}|( \S+){0,5}?$)
英文からある単語AAAを検索して前後5文字づつ一緒に取得
ただし途中に改行がある場合は改行前まで
上の表現で目的は達成したのですが
疑問が湧いたので質問です
A|Bのような単純またはではなくて
ifのような条件で切り替えるような正規表現はありますか?
(各種のスクリプト言語に依存しないやり方で)
合わせて、上の表現よりもこうした方が良いとかあったら
よろしくお願いします。
33:デフォルトの名無しさん
17/04/01 03:45:05.14 FRLTAWk8.net
URLリンク(www.regular-expressions.info)
URLリンク(www.rexegg.com)
34:デフォルトの名無しさん
17/04/01 10:44:34.81 4EJbPXqm.net
>>33
ありがとうございます!
35:デフォルトの名無しさん
17/04/02 20:30:31.43 g6KuPxH9.net
ファイル名の置換(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:デフォルトの名無しさん
17/04/02 20:41:25.41 TvISwdcG.net
>>35
dのところのエスケープ
あと置換文字列はピリ�
37:Iドにエスケープいらない マッチしないだけだからエラーがでなくてもおかしくない
38:デフォルトの名無しさん
17/04/02 22:31:46.58 g6KuPxH9.net
ありがと。うまく行ったよ。
39:デフォルトの名無しさん
17/04/12 19:00:37.87 QHemYrmG.net
正規表現で任意文字以外を消すにはどうしたらいいですか?
検索でヒットしたものだけ残したいということです。
よろしくおねがいします。
40:デフォルトの名無しさん
17/04/12 20:59:49.88 u8woYKAJ.net
>>38
漠然とした質問だから漠然としか答えられないけど
キーワードを含む文全体(先頭から末尾まで)をマッチさせて
それをキーワードに置換させればいい
41:デフォルトの名無しさん
17/04/12 21:00:35.18 ud+oociV.net
[^(abc)]
これでabc以外の文字が全部選択できる
でもこれってどういう時に使うんだろう?
結局残るのがabcだけなら
わざわざ検索しなくてもよさそうだけど
42:デフォルトの名無しさん
17/04/12 21:12:14.06 u8woYKAJ.net
>>40
なんか勘違いしてそうな記述なんだけど?
それは、(,a,b,c,)の5文字以外の1文字を表してる
文字列abc以外を表すのなら
(?:(?!abc).)
43:デフォルトの名無しさん
17/04/12 21:52:20.74 ixmoPw8q.net
Ruby 2.4.1で使えるようになった非包含オペレータ便利
URLリンク(qiita.com)
44:38
17/04/12 22:16:13.87 QHemYrmG.net
>>39>>40
レスをありがとうございます。
やろうとしてたのは下記例のような場合で、-で直接挟まれた文字のみ残したいというものです。
消-残-残--消 -残--消 -残-
消--残--消 -消 -残-
45:デフォルトの名無しさん
17/04/13 05:45:19.12 Bx+Z85rt.net
- と - の間の文字列で空白文字が入っちゃいかんということならこんな感じ?
perl -ne 'print( /(?<=-)([^-\s]+)(?=-)/g ,"\n")'
こういうことじゃないならもう少し説明を。
46:43
17/04/14 03:41:56.00 8AuQ8qy9.net
>>44
レスをいただきありがとうございます。教えて頂いた記述はPerlということであってますよね?
Perlを導入して使ってみてからレスをお返ししようといろいろ調べていたら、大変遅れてしまい礼を欠いてしました。
いろんなサイトを見過ぎたせいか、結局導入方法が絞れないというか、よくわからなくり、
時間だけが過ぎましたので不甲斐なく申し訳ないですが兎に角お礼まで。どうもありがとうございました。
47:デフォルトの名無しさん
17/04/14 08:15:43.14 mEmX7gnv.net
ブラウザから実行すれば、簡単
paiza.IO, codepad なら、ログインもいらない
48:デフォルトの名無しさん
17/04/14 09:03:58.80 uldWbSLb.net
>>45
とりあえず>>1-2を嫁
49:デフォルトの名無しさん
17/04/14 11:21:59.85 7lZUeeAF.net
置換でやるとすると、これでどうかな?
これなら適当なエディタやWSH(JScript)ででも実行できる
(先頭の.*?を[\s\S]*?に変えれば、改行コードは末尾のみになる)
ただ、もしかすると考慮抜けの場合があるかも
正規表現:/.*?-([^\s-]+)(?=-)|-*[^-]*?(\r)?$/mg
置換文字:$1$2
50:デフォルトの名無しさん
17/04/15 02:46:51.37 8aYCgh5m.net
レスをくださった方々、また遅くなりましたがありがとうございます。
>>46
こんな便利なものがあるんですね!教えていただきありがとうございます。またゆっくり触ってみたいとおもいます。
>>47
質問方法の不備を自覚しました。以後気を付けます。申し訳ありません。
>>48
サクラエディタで希望どうりの置換えが出来ました。本当にありがとうございます。
たて続けになり申し訳ないのですが。できればもう一つお聞きしたいです。
下記のような英文やその他も、単語と単語の間に入る半角スペースを許容することは可能でしょうか?
-Good Morning-
-残 残-
-東京都 港区 六本木-
-残 残 残-
51:デフォルトの名無しさん
17/04/15 09:28:31.10 7fUWShMv.net
>>49
それは別件なのか?
-a -b-
の場合、その条件なら
a b
が残ることになるけど?
それでいいなら、\sを抜くだけでもいいし、(?=-)も取ってもいい
52:デフォルトの名無しさん
17/04/15 10:02:24.26 7fUWShMv.net
ごめん、「間に入る」だったのか
/.*?-((?:[^-\s]| )*[^-\s])(?=-)|-*[^-]*?\r?$/mg
$1
53:デフォルトの名無しさん
17/04/15 10:07:27.57 7fUWShMv.net
\rもいらないか
/.*?-((?:[^-\s]| )*[^-\s])(?=-)|-*[^-]*?$/mg
54:デフォルトの名無しさん
17/04/15 10:21:57.02 7fUWShMv.net
これじゃまずい
/.*?-((?:[^\s-]| )*[^\s-])(?=-)|.*-(?:[^\s-]| )*[^\s-](?=[^-])|-*[^-]*$/mg
冗長かもしれない
55:デフォルトの名無しさん
17/04/15 10:24:14.97 7fUWShMv.net
↑でも問題ないけど
/.*?-((?:[^\s-]| )*[^\s-])(?=-)|.*-(?:[^\s-]| )*[^\s-](?!-)|-*[^-]*$/mg
56:デフォルトの名無しさん
17/04/15 11:39:21.99 8aYCgh5m.net
>>50-54
無理を利いてくださりありがとうございます。
実は最初の質問に穴があったので別件という形で再質問させていただきました。失礼しました。
教えて頂いた記述は完璧でした本当に感謝です!
レスも何度もくださってこの度は大変お世話になりました。
57:デフォルトの名無しさん
17/04/20 21:29:57.11 rsUIJG5Q.net
●Regular Expressionの使用環境
Becky!
●検索か置換か?
検索
●説明
+0900以外に一致
●対象データ
+
-
+0
-0
+09
-09
+090
-090
+0900
-0900
+09000
-09000
+09010
-09010
58:デフォルトの名無しさん
17/04/20 21:30:53.51 rsUIJG5Q.net
+
-
+0
-0
+09
-09
+090
-090
-0900
+09000
-09000
+09010
-09010
よろしくお願いします
※"+0900を含まない"を"+0900以外"を含むで実現したいです
59:デフォルトの名無しさん
17/04/21 08:10:19.34 P/4d/uOg.net
Beckyで使えるかは知らんけど
^(?!\+0900$).*
60:デフォルトの名無しさん
17/04/21 12:02:05.13 30M0P9UI.net
zip版をダウロードしてchmヘルプファイルを見てみたら、
正規表現は本当に基本的なものしか無かった
(?!)はおろか()とかのキャプチャ自体無い(括弧は優先順位が上になるだけ)
[abc-d]もダメ( ([ab]|[c-d])と分けて書くらしい)
だから、やるなら
^[^+]|^\+$|^\+[^0]|^\+0]$|^\+0[^9]|…と全ての場合を併記するしかないかも
61:デフォルトの名無しさん
17/04/21 14:10:39.59 P/4d/uOg.net
鬼車や鬼雲使わず独自実装なんだね。シェアウェアだからかな
非包含か先読みを使えなきゃ実質無理だと思う
^\+0900$ の方をどうにかする運用を考えた方が良い
Beckyの公式のメーリングリストや掲示板で正規表現じゃなく具体的にやりたい事を質問してみたら?
上手い運用方法を思い付いてくれる人が居るかも
62:デフォルトの名無しさん
17/04/21 16:15:06.41 hNfgTF//.net
GPLならいざ知らずPCREや鬼車, 鬼雲もBSDライセンスだからなぁ
誰か外部の高機能正規表現ライブラリを利用するプラグインとか作ってそうだけど
63:デフォルトの名無しさん
17/04/22 00:09:10.84 R9IUk1ak.net
>>57
if ≠"+0900" みたいなやり方が1番簡単だけど正規表現だと面倒
≠ や = にまで拡張した正規表現があればいいんだ
64:56
17/04/22 01:50:21.67 IwPPNWuo.net
>>56分かる方いたら教えてください
よろしくお願いします
65:デフォルトの名無しさん
17/04/22 04:17:39.78 T741eTMO.net
ほらよ。使い物になるかは知らんが示された対象データにおいては要件を満たす
^(.{,4}|-0900|.{6,})$
量指定子の{}が使えないなら
^(.|..|...|....|-0900|......)$
Beckyの仕様が一般的なPerlの正規表現とは違うならここで聞いても分かるやつ少ないだろうし
後出しする必要が出たらBeckyの方で聞いた方がいいぞ
66:デフォルトの名無しさん
17/04/22 17:13:13.21 1zuuifbC.net
>>63
+0900のみのデータなんて普通は無いよね
こういうのはJSTとかの時刻の後ろにつくもんじゃないの?
何がしたいのかよく解からないんだが?
フィルタで使うんなら、~が「ある時」「ない時」と選択できるようだから、
「ない時」にチェックすれば君の要件どうりなら、指定は^+0900$でよいことになる(+0900のみがない時ということになるけど)
だけど、上で疑問視したように+0900の前に時刻があるならマッチしなくなるよ
67:デフォルトの名無しさん
17/04/22 17:16:27.15 1zuuifbC.net
+のエスケープし忘れた(仕様にエスケープはあるよね?)
68:56 ◆mUjtBupG2M
17/04/22 21:58:03.61 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:デフォルトの名無しさん
17/04/23 02:31:41.68 hK6ntaQJ.net
Beckyって基本的なものとはいえ正規表現使えるのか、いいなぁ
会社で強制使用のOutlookなんか and or しかない上に
検索語を入力中に変なところで勝手にor区切りするわフォーカス外れるわでもうムチャクチャ
仕事で何年も前のメール探すのに絞り込めなくて、最終的には数百通人間grep状態しょっちゅう…
70:デフォルトの名無しさん
17/04/23 05:21:48.35 DzF9wMLj.net
^(\+|-|-0900)(.?|..|...|([1-9].|.[0-8])..|..([1-9].|.[1-9])|.....+)$
71:デフォルトの名無しさん
17/04/23 05:33:24.87 DzF9wMLj.net
^(.|-0900)(.?|..|...|(([1-9]|\D).|.([0-8]|\D))..|..(([1-9]|\D).|.([1-9]|\D))|.....+)$
72:デフォルトの名無しさん
17/04/23 05:44:27.04 DzF9wMLj.net
^(.|-0900)(.?|..|...|([^0].|.[^9])..|..([^0].|.[^0])|.....+)$
73:デフォルトの名無しさん
17/04/23 05:52:59.96 DzF9wMLj.net
^(-0900|.(.?|..|...|([^0].|.[^9])..|..([^0].|.[^0])|.....+))$
74:デフォルトの名無しさん
17/04/23 07:11:51.07 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:デフォルトの名無しさん
17/04/23 14:27:49.79 fsvPYIZO.net
>>68
wanderlust使ってて十分だがmaildirでファイル保存してるのでなんでもありだ
76:56
17/04/23 22:57:55.33 /2AcrhSu.net
>>72
質問に忠実な正規表現ありがとうございました
>>73
きゃー素敵!と冗談はさておき
まさに望んでいたものでした、本当にどうもありがとうございました!
77:デフォルトの名無しさん
17/04/28 19:19:48.10 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
17/04/28 19:24:12.30 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:デフォルトの名無しさん
17/04/29 18:45:01.61 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
URLリンク(gamon.webfactional.com)
100–899 ⇒ ([1-7][0-9]{2}|8[0-8][0-9]|89[0-9])
たまたま 8[0-8][0-9] と 89[0-9] がまとめられると気がついたのでそこは直したけど
全部まとめられるとは気づいてなかっただけ
80:デフォルトの名無しさん
17/04/30 00:11:00.00 PxU3UZJt.net
>>78
回答ありがとうございます
つい先日覚え始めた身ながらも>>73さんの式に感銘を受け是非とも理解したく思い
分からない事だらけの中、自分であれこれ分解したり試したりしていたのですが
疑問に思った点を自力で晴らす事が出来ず質問させて頂きました
未熟故に不理解な部分があるのではないかと思っておりましたが
「どちらも深い意味はない」との事で少々肩透かしでしたが安心しました
無知故に身構え過ぎていたようです
作成の経緯や方法まで丁寧に説明して頂きありがとうございました
今後の参考にさせて頂きます。感謝!
81:デフォルトの名無しさん
17/04/30 03:04:48.91 sTLetcQY.net
慇懃無礼でうぜえ
82:デフォルトの名無しさん
17/04/30 04:34:43.13 smayr5dM.net
>>80
確かに邪魔だけど、おこるほどじゃない
83:デフォルトの名無しさん
17/04/30 07:25:58.21 PxU3UZJt.net
>>80
それも少し思ったんだが重箱の隅をつついてると受け取られ答えてもらえないんじゃないかとか色々悩んだ末 出来るだけ丁寧にとこうなった
もし次があったら気を付ける。すまんかったな
84:デフォルトの名無しさん
17/04/30 07:50:01.45 BxxkE9Fv.net
丁寧な方がいいに決まってる
>>80はバカだから長文がウザいことに気付かず
丁寧語がウザいと的外れな指摘をしている。
85:デフォルトの名無しさん
17/04/30 08:21:18.33 PxU3UZJt.net
>>83
自分を非難している相手を擁護するのは変な感じだが
バカかどうかはあの一文からは分からないでしょ
それに自分も慇懃無礼にあたらないかとは危惧していたし的外れとは言えないと思う
何でも度が過ぎるのは良くない
だが齟齬を生じさせないようにする為にはこういったスレで長文になるのは仕方なくないか?
身の丈に合わない質問して「この解釈で合ってる?」みたいな聞き方した自分にも非があるとは思うが
バカ丁寧禁止より長文禁止の方が厳しいと思うわ
86:デフォルトの名無しさん
17/04/30 09:47:52.98 Dc5Ny+RF.net
正規表現で数字は、[0-9] または、\d
[0-9][0-9] なら、\d{2} と同じ
87:デフォルトの名無しさん
17/04/30 12:18:27.09 VPr4LyhY.net
丁寧なことが必ずしも良いとは限らない
質問するときは相手のことも考えて無駄を省くことが大事
質問を整理している間に自分で気付くこともある
88:デフォルトの名無しさん
17/04/30 15:52:39.90 3TcYedTF.net
>>84
>バカ丁寧禁止より長文禁止の方が厳しいと思うわ
読む側は馬鹿丁寧な長文=好感が持てる、長文でも許せる
丁寧でないけど長文=丁寧でない癖に長文だとぉ~?!許せん
ってなる
89:デフォルトの名無しさん
17/04/30 20:35:41.23 IjVGB2EF.net
お前ら仲良くしろ
90:デフォルトの名無しさん
17/05/01 09:32:05.11 lsW6qson.net
長文NGしてれば見なくて済むのにわざわざ見てウゼェ言ってる奴って
マゾなの?やり方分かんないバカなの?ウゼェ言ってる俺カッケーな池沼?
91:デフォルトの名無しさん
17/05/01 11:29:31.86 hzoMRY/L.net
3行でまとめろ
92:デフォルトの名無しさん
17/05/01 18:42:02.68 Ypd7EE7u.net
ダ・ヴィンチ曰く「単純であることは究極の洗練だ」
今回の例にどれほど当てはまるかはわからんが、目指すのはそこだ。
93:デフォルトの名無しさん
17/05/03 15:46:12.05 /wkwyrKC.net
検索置換を教えて下さい。
行末の半角数字(桁数はまちまち)を行頭に移動したいです。
───────
■置換前■
abc1
東44
4-123
あいうえお02
───────
■置換後■
1abc
44東
1234-
02あいうえお
───────
使ってるエディタはgpadです。サクラエディタもあります。宜しくお願い致します。
94:デフォルトの名無しさん
17/05/03 16:08:53.89 KtRh/Jcn.net
>>92
gpadやサクラエディタは知らんけどJSならこんな感じ
replace(/(.*?)([0-9]*)¥n/g, "$2$1¥n")
最後の行にも改行がある前提
なければ入力の最後を示す$をOR条件として指定する
95:デフォルトの名無しさん
17/05/03 17:09:36.61 /wkwyrKC.net
>>93
ありがとうございます。レスをいただき申し訳ないのですが、
最初に書いているようにテキストエディタでできる検索置換を教えて頂きたいのです。
96:デフォルトの名無しさん
17/05/03 17:53:10.90 tt/7nJiL.net
>>94
gpad の[検索]-[置換]で
検索文字列 ^(.*\D)(\d+)
置換文字列 $2$1
とかかな
97:デフォルトの名無しさん
17/05/03 18:09:12.54 /wkwyrKC.net
>>95
すごいできます!即レスありがとうございました!感謝です!
98:デフォルトの名無しさん
17/05/04 02:53:36.15 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:デフォルトの名無しさん
17/05/04 03:21:35.65 1Mi5Sic1.net
>>97
s/\].*\|.*\[//g
100:デフォルトの名無しさん
17/05/04 03:22:48.12 7TNYL3q7.net
cat test.txt | sed -E 's/[^\[]*(\[[^\[]*\]).*/\1/g'
sedはnon-greedyサポートしてないので[^\[]*で
"["以外の文字にマッチするように指定する
101:デフォルトの名無しさん
17/05/04 10:29:51.92 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:デフォルトの名無しさん
17/05/05 08:29:26.53 bm+deAdf.net
「Regular Expression」ってことは
RegularじゃないExpressionもあるのかな?
103:デフォルトの名無しさん
17/05/05 11:21:47.47 Ll1Ek2oh.net
>>101
URLリンク(www.google.co.jp)
104:デフォルトの名無しさん
17/05/05 13:41:26.64 Xc50Qjgk.net
>「irregular expression」に関連するキーワード
>
>保守速報
ワロタ
105:デフォルトの名無しさん
17/05/07 03:23:46.82 bf3ZF7DF.net
>>101
正規表現で表される集合の標本それぞれが正規でない表現じゃないの
106:デフォルトの名無しさん
17/05/07 07:31:07.21 fOF53fEF.net
そもそも誤訳だし
107:101
17/05/07 16:34:35.27 fwX9OlSY.net
>>104
なるほどおおおおぉぉぉ!!!
合点がいきまくりんぐです。ありがとうございます!
108:デフォルトの名無しさん
17/05/13 23:19:52.64 4xoUv3bU.net
書き込めない?
109:デフォルトの名無しさん
17/05/14 17:21:45.80 IUk17Lsy.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
検索
●説明
「ABC
110:」の英大文字と小文字を区別せずに検索したいのですが 書き方はあるのでしょうか? 今は『abc|Abc|ABC』という正規表現を使っていますが 書くのがめんどうだし、aBcやabCにもヒットさせたいので もっと簡潔な書き方があれば教えて下さい。
111:デフォルトの名無しさん
17/05/14 18:29:13.61 YzpdvDlp.net
>>108
(?i:ABC)
で行けるんではなかろうか
112:デフォルトの名無しさん
17/05/14 18:30:36.34 qjlEaygK.net
そのものズバリのチェックボックスがあるのに釣りかメクラか
113:デフォルトの名無しさん
17/05/14 20:19:12.83 IUk17Lsy.net
>>110
すみません、実はJaneStyleなど複数の環境で正規表現を使っていて、一番よく使うサクラエディタを例に出してしまいました。
確かにサクラエディタだと「英大文字と小文字を区別する」ってチェックがありますよね・・・
>>109
ありがとうございます!バッチリいけました。 ><
114:デフォルトの名無しさん
17/05/27 19:51:02.34 gdXMy//z.net
●Regular Expressionの使用環境
テキストエディタMeryでの強調文字列指定について質問です
URLリンク(www.haijin-boys.com)
Onigmo (Oniguruma-mod) (regular expression library) 5.15.0
URLリンク(github.com)
●検索か置換か?
検索?
●対象データ
"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:デフォルトの名無しさん
17/05/28 06:04:53.01 PkY5eGnw.net
"[^"]*"(?=[^"]*$)
(?<=")[^"]*(?="[^"]*$)
116:112
17/05/28 07:52:06.42 5aByZaI0.net
>>113
両方のパターンを教えていただきまして、ありがとうございます
"フォルダパス" の "[A-Z]:\\.+?" と "年/月/日 時:分:秒 "の "../.+?"
タイトルフィールドだけは全/半スペースで字下げして "[ ]+.+?" というパターンまでは作れましたが
字下げなしで強調表示できるようになり、一層見分けやすく、編集しやすくなりました
なぜこれらが最後の "タイトル" 部分にマッチするのか、まだ理解できてはいないのですが
読み解けるように頑張ってみます
117:112
17/05/28 11:31:39.10 5aByZaI0.net
先読みと後読みの使い方をなんとなく理解できるようになったかも?という感じで、自分で同じ表現をすぐに導き出せるかとなるとまだまだ難しそうです
調子にのって後読みで12番目のカンマの後ろの "著者" にマッチさせようとやってみましたが、繰り返し表現をふくむ後読みはダメだとか…
^".+?"([^,]*,){12}".+?" で「行頭から"著者"まで」はできても ^(?<=".+?"([^,]*,){12})".+?" では機能しないんですね
あれこれ弄り回して "タイトル" からカンマ5つ戻るかたちで先読みにして "[^"]*"(?=(,[^,]*){5}"[^"]*"(?=[^"]*$)) にしたら "著者" に
同様に {4} で "出版社" にマッチしました
おかげさまで色々と勉強になり、あらためてありがとうございました
118:デフォルトの名無しさん
17/05/28 12:13:46.77 IsUf2Pl+.net
こんな古代呪文みたいなの、実際に仕事とかで使ってないとなかなか覚えないし
覚えてもすぐ忘れてしまうよなw
全てのパターンを記憶して空で完全詠唱できる人なんているんだろうか?
119:デフォルトの名無しさん
17/05/28 13:15:52.74 QUomuFPF.net
暗唱できる必要性があるのか?
使うときにそういうのがあったなあって思う出すだけでいいだろ
あとは詳細を見て使えばいいだけ
120:デフォルトの名無しさん
17/05/28 13:26:02.06 35oU3ReV.net
仕事じゃなく趣味で覚えたけど
間違いなく覚えた方が便利
どっかに正規表現化してるだけでお金貰える仕事ないかな
121:デフォルトの名無しさん
17/05/28 15:27:00.29 dHcH/mRb.net
>>116
わたしレベルになると詠唱破棄すら可能w
122:デフォルトの名無しさん
17/05/28 16:06:45.06 MqtJ47ff.net
言語環境ごとに使える使えない、エスケープ必要不必要を間違えたりする
サポートしてない環境の多い先読みとかは他の手段使っちゃったりするからなかなか使いこなせない
123:デフォルトの名無しさん
17/05/28 16:10:29.49 W53JMrzP.net
$1 と \1 を間違えて泣きをみて以来、むしろ記憶しないようにしている……・
124:デフォルトの名無しさん
17/05/28 16:18:27.70 mQ0E20+1.net
perlから初めるとカタワになるな
125:デフォルトの名無しさん
17/05/29 08:14:03.69 XV2pt9yI.net
えっ!?
126:デフォルトの名無しさん
17/05/29 11:05:33.03 sPbSPx8D.net
コマンドプロンプトのfindstrコマンドで使えるやつより貧弱な正規表現環境なんてないよね?
127:デフォルトの名無しさん
17/05/29 11:21:53.73 sPbSPx8D.net
URLリンク(imgur.com)
128:デフォルトの名無しさん
17/05/29 11:24:10.17 sPbSPx8D.net
貼り間違えた
URLリンク(i.imgur.com)
129:デフォルトの名無しさん
17/05/29 21:58:39.79 YdL4iPz3.net
>>124
おれの彼女の胸
130:デフォルトの名無しさん
17/05/30 13:16:32.07 V9BCWx6K.net
>>118
とある地方の区画整理の際、住所表記が変わるので
住所を正規化するために正規表現と簡単なDB処理とを組み合わせた
単純な処理を行うだけの1日仕事で、
そこらのリーマンの3ヶ月分ぐらいお金になった事とかあったな
仕事柄色んな会社を訪問するけど
テキストの簡単な置換すらできない(まずテキスト置換という概念を知らない)人って
事務程度でしかパソコン使わない人にはめちゃくちゃ多いんだよね
そんなに人達に (.+)abcd\n みたいな初歩的な正規表現を教えると
物凄く驚かれる
見下すようだけど世の中そんなもん
131:デフォルトの名無しさん
17/05/30 17:50:42.66 bhgaCfDA.net
>>128
まぁハードル高いよね、低くないと言うべきか
知らなきゃ「正規表現」というチェックボックスがあっても、それが何をするものなのか
言葉から具体的イメージが全く湧かないし
ヘルプ見てはじめて何をするものなのかわかるという、といっても具体例が
無ければヘルプ見たところで「難しそう>便利そう」になりがち
一目で「難しそう<便利そう」になるならとっくに正規表現を使ってる層だろうし
ファイルの検索 や excel や word や メモ帳 、IE、Edge あたりに正規表現が
最初っからあれば話は違ってくるんだろうなと
Mac触った事ないからアレだけど、Macなら充実してるのかしら?
132:デフォルトの名無しさん
17/05/30 22:14:32.37 wMq9WrJJ.net
>>129
システム屋やってる人間からしても正規表現って見るからにとっつきにくそうだもんな。
システム会社なのに知らない人間の方が多いというw
133:デフォルトの名無しさん
17/05/30 22:28:36.41 RvF0nsOU.net
>>130
えー
プログラム組む人種なら例外なく好物だと思ってたんだが(^^;;
134:デフォルトの名無しさん
17/05/31 02:32:02.26 6BoaVWxP.net
システム屋とかシステム会社って何のシステム?
135:デフォルトの名無しさん
17/05/31 05:29:32.86 hSyYnyRA.net
使い捨てコードといったらPerlで書いてた世代は正規表現に抵抗無さそう
136:デフォルトの名無しさん
17/05/31 05:30:03.72 sJHTybMt.net
>>131
VBとかでポチポチやってる人は嫌いそう
GUIで書けるいいツールがあったら広まるかもね
137:デフォルトの名無しさん
17/05/31 08:06:38.95 rBoo2fCo.net
小さな会社だと他より少しPC関連に詳しいってだけでIT部長とか言われこき使われる
勿論そんな役職なんて無い
正規表現なんて言葉を発したらセクハラだの変態だの言われかねん
138:デフォルトの名無しさん
17/05/31 11:16:23.49 u9qpXxTe.net
>>135
正規表現で置換
とか知らない人が聞いたらアレだもんなw
>>133
正にその世代だけど
昔のperlは正規表現抜きでも変態記法満載だったから
だんだん昔のコードは読めない人が増えてきてる
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
10年ぐらい前のメモからのコピペだけど見ただけで目眩がするw
139:デフォルトの名無しさん
17/05/31 11:27:09.17 u9qpXxTe.net
>>132
一概にシステムといっても色々あるからね
機器制御系システムなんかだと正規表現を使う機会なんてまず無いだろうし
WEB系の事やってるなら何だかんだで正規表現を使う機会はそこそこあるだろうし
140:デフォルトの名無しさん
17/05/31 11:46:52.88 AV1cHHAT.net
CSV は、" などのエスケープについて、様々な方言があるから、正規表現では無理。
CSV の方言・規格を確定させてから、Ruby を使うべき
バグのほとんどが設計段階・仕様で生じる。
方言さえ確定していれば、バグらない
141:デフォルトの名無しさん
17/05/31 11:53:36.36 L1juUrGR.net
>>135
会社の忘年会では正規表現やりますって言ってパンツ脱ぐのか?
142:デフォルトの名無しさん
17/05/31 12:15:57.63 u9qpXxTe.net
>>138
仕事内容にもよるけどそんな事はない
なんせ世の中にはExcelのデータが糞ほどあるので
「Excelルールのcsvを正規表現で処理する+α」の仕事だけでも
たぶんそこらのリーマンよりは稼がせてもらってきたよ
日本の企業の大半は中小企業なわけだけど
ほんと信じられないほど無駄な事やってる会社がたくさんあるからね
こんな時間に2chなんてやってられるのも、そのお陰ですわ
143:デフォルトの名無しさん
17/05/31 12:35:12.54 MQUo5X9j.net
万能な処理って得てして使いにくいしな
144:デフォルトの名無しさん
17/05/31 12:44:32.50 gy6WrZsR.net
>>138
Rubyを使うべき、と言う唐突な結論以外は同意できる。
Ruby (のようなスクリプト)を使うべきなら完全に同意できたのに。
145:デフォルトの名無しさん
17/05/31 16:04:23.05 jFN45aLj.net
>>142
少し日本語は下手だが、
事前にCSV の方言・規格を確定すべし
という主張と読んだ。
146:デフォルトの名無しさん
17/05/31 17:04:05.88 MQUo5X9j.net
なぜrubyなのかよく分からん
多少正規表現エンジンの種類やバージョンの違いはあれど
正規表現はperlでもPHPでもJavaScriptでもPythonでも使えるし
rubyの正規表現なんて昔はコールバック処理するのがくそ面倒だった筈だが
147:デフォルトの名無しさん
17/05/31 17:10:42.06 BtqSGsFQ.net
正規表現を使わずにrubyでやれと言いたいのでは
まあ確かにrubyは標準で簡単強力なcsv処理ができるけど
ruby以外でのcsvの処理の仕方を知らない知識不足な人の戯言にしか見えない
148:デフォルトの名無しさん
17/05/31 17:29:50.80 nyiBm3r5.net
excelでも正規表現使えるけどな
149:デフォルトの名無しさん
17/05/31 17:55:47.82 b1E/NNUq.net
>>144
たぶんrubyのような言語と言いたかったのだと推察致しまする
150:デフォルトの名無しさん
17/06/01 04:08:09.64 +TrYOuL5.net
>>134
VB(今時は.NET)では入力チェックとかでよく使うからお前の偏見だよ。
151:デフォルトの名無しさん
17/06/01 04:08:53.15 +TrYOuL5.net
>>134
いい忘れたがサクラのマクロもよく使う。
152:デフォルトの名無しさん
17/06/01 05:13:28.59 gHUhkzd0.net
>>148
VBやってるやつが皆そうやってると思うか?
それこそ偏見だ
153:デフォルトの名無しさん
17/06/01 05:24:23.62 gHUhkzd0.net
>>149
お前個人の話かよ
154:デフォルトの名無しさん
17/06/01 05:39:57.85 pPoV2n06.net
そもそもテキスト処理じゃないと使わんよ
使う使う言う奴はプログラミングの分野が偏ってるんじゃないか?
155:デフォルトの名無しさん
17/06/01 06:10:29.36 htPbJpjE.net
エンドユーザーに近い分野で使うというより、開発者が使うものでしょ。SQLとかと同じ。
156:デフォルトの名無しさん
17/06/01 08:16:36.86 YbQp1MN1.net
>>153
そりゃプログラムから使うものだから開発者しか使わんよ
そう言う意味じゃなくて利用者が入力した値の妥当性確認とかに使うケースが多いんじゃね?
って話なんだろ
157:デフォルトの名無しさん
17/06/01 09:37:01.51 OU3iOJ/C.net
>>148
これが偏見な
158:デフォルトの名無しさん
17/06/01 10:35:10.56 Fkhc5exB.net
エマ中尉の盾になって死んだ人?
159:デフォルトの名無しさん
17/06/01 12:16:30.24 o/dQD8LP.net
>>154
特殊な例を一般化するのはよくない
160:デフォルトの名無しさん
17/06/01 12:52:26.55 YbQp1MN1.net
>>157
特殊?
そう言うなら他にもっと使われてる用途挙げてくれ
161:デフォルトの名無しさん
17/06/01 12:55:42.58 uSxzswpP.net
検索じゃろ
grep然りsed然りエディタの検索然り
162:デフォルトの名無しさん
17/06/01 20:45:19.78 YbQp1MN1.net
>>159
その辺りもエンドユーザー(多くは開発者だと思うけど)に近いところじゃね?
163:デフォルトの名無しさん
17/06/01 21:36:20.85 z/dTvzRJ.net
一般に正規表現自体をどこで使うかの話と違うんか?
プログラマがどこで使うかって文脈に限定してるのんか?
164:デフォルトの名無しさん
17/06/02 00:26:45.39 ixZw1vso.net
perlがそうであったようにログ読んだり整形したりするときにも良く使う。システム管理者。
プログラマによっては無理に正規表現使わないで正規表現を引数に取らないcontainとか複数行で書くって人もいるんじゃないか。入力チェックもそんな考えるような正規表現の出番少ないような。
perlくらい言語に組み込まれてるならともかく。
165:デフォルトの名無しさん
17/06/02 01:15:51.17 ZbzhojDH.net
>>156
ヘンケン艦長~!
166:デフォルトの名無しさん
17/06/02 14:02:59.19 s9L+1vWi.net
正規表現、難しいですね…全然わかりません
お知恵をおかし下さい
例えば
test = "//abc"; // コメント "です"
という一行があった場合、後半の
// コメント "です"
にだけマッチする正規表現はどのように書いたらいいんでしょうか?
最初は
/(?!.*(\"|\'))\/\/(.*)/
こんなカンジで否定的先読みを利用していたのですが、
コメント部にも、 シングル及びダブルクォーテーションが入る可能性が出てきたので、
この書き方では ?! で否定しているためなのかマッチ出来ません。
何か良い書き方はありますでしょうか?
やりたい事は、PHPなどで、javascriptのソースから単一行のコメントを削除したいです。
よろしくお願い致します。
167:デフォルトの名無しさん
17/06/02 14:24:22.46 zHTMhHhl.net
//((?!//).)*?$
168:デフォルトの名無しさん
17/06/02 20:31:58.40 KFrvDlYH.net
PHP は知らん
$perl -ne 'm%((?:\".*?\"|/(?!/)|[^/])*)(.*)% ; printf("<$1> <$2>\n");'
test = "//abc"; // コメント "です"
<test = "//abc"; > <// コメント "です">
// コメント "です"
<> <// コメント "です">
$
169:デフォルトの名無しさん
17/06/02 21:10:46.42 yyLeCvfJ.net
末尾方向から、// を探して、もしあれば、その行を選択する。
^.*\/\/(ここに、2連続以上の、/ が存在しない)$
/// 例えば、3連続でも、コメント扱いするよな?
test = "///abc"; /// コメント "です"
シングルクォーテーションは、どうするんだ?
test = '///abc'; /// コメント "です"
170:デフォルトの名無しさん
17/06/02 23:18:34.61 cODXM6Ca.net
javascriptだから、シングルダブルは同等機能
"'"とか'"'とか有だし
"\""とかのエスケープもある
"//abc"は文字列だし、"\""//abc"はコメント
171:デフォルトの名無しさん
17/06/03 00:22:48.22 02UJhjHA.net
みなさん、ありがとう御座います!
165さんの短いのでサクっと出来ました!
なるほど、末尾から検索をかけるとう考えなんですね。
本当に奥が深くて、使いこなすのは難しいです…
いろんなパターンを作りだし、自由にマッチ出来るよう精進します
>165-167さん、ありがとう御座いました!
172:デフォルトの名無しさん
17/06/03 00:23:37.51 02UJhjHA.net
>168さん抜けちゃいました(汗
ありがとう御座いました!
173:165
17/06/03 01:16:11.91 janVI+9u.net
>>169
ツッコミか逆ギレ待ちだったんだが…
165ではコメントが無くてコード中に//がある場合にそのコードの部分にマッチする
削除だとコードを削ってしまうよ
コード中に//が無い場合、またはコード中に//がある場合にその後ろにコメント行がある場合、限定
マトモなのは「JS コメント 正規表現」とかのワードでggr
174:デフォルトの名無しさん
17/06/03 01:49:01.34 VDeCcObx.net
s#((?:"(?:\\\\|\\"|[^"])*+"|'(?:\\\\|\\'|[^'])*+'|/(?!/)|[^/])*+)(.*)#<$1>\t<$2>#
175:デフォルトの名無しさん
17/06/03 02:57:17.44 02UJhjHA.net
>>171
え!?
限定的なテストで、思ったとおりの動きをしたので、おお!すげー!って思ってました…
実際のスクリプトには、まだ組み込んでないので気付きませんでした
他の方が書かれてた方法も試したり、ググってみますね
176:デフォルトの名無しさん
17/06/03 04:51:38.86 ZUxfcpWv.net
区切り記号 ; や閉じ括弧 } のあとにスペースかタブいくつかの後に来る // から行末をコメントと見なすのが簡単?
177:デフォルトの名無しさん
17/06/03 12:52:21.44 7vig672V.net
コメント化は、プログラムデバッグ中にも命令を無効にするために使うこともあるし、ことはそう簡単じゃないよ
//if(hoge=="URLリンク(hoge.net")) {//コメント
178:デフォルトの名無しさん
17/06/03 14:13:52.35 ep62Y9tf.net
これは、無限の組み合わせがあるから、正規表現じゃ無理
AST変換とか、LLVMでコンパイル後の命令木をもらって、
コメント部分を削除するとかしないと、自力じゃ無理なレベル
179:デフォルトの名無しさん
17/06/03 14:17:50.88 sCohk93m.net
うむ
180:デフォルトの名無しさん
17/06/03 14:32:23.81 7vig672V.net
こんな場合もあるからね
/* 一行コメントを外す
//*/hoge="abc";
181:デフォルトの名無しさん
17/06/03 14:42:13.81 mWYP1opd.net
文脈自由言語の領域か
182:デフォルトの名無しさん
17/06/03 16:26:56.85 kz1iKZuq.net
テキストから
06/03(
を抽出する場合、どんな表現になりますか?
183:デフォルトの名無しさん
17/06/03 16:32:48.16 7vig672V.net
何それ限定なの?
06\/03\(
(スラッシュにエスケープが要らない場合もあるけど付けといてダメなことはない)
184:デフォルトの名無しさん
17/06/03 20:14:19.78 4NkabvDw.net
>>181
sedのsなんかは(をエスケープすると特別な意味を持つんじゃ
185:デフォルトの名無しさん
17/06/03 22:49:00.44 yEDWU2+/.net
正規表現って本当に色々なパターンでテストしないと抜けがあったりするから怖いね
186:デフォルトの名無しさん
17/06/03 23:15:22.50 eiMrU4PF.net
>>183
それは仕様を理解していないから。
正規表現で表現してあるパターン以外にマッチする事はないんだから、
抜けがあるならパターンの意味を理解していないって事
187:デフォルトの名無しさん
17/06/04 00:01:51.87 caz8ZVsN.net
理解してないのに使う方が怖い
188:デフォルトの名無しさん
17/06/04 10:21:55.88 ty2rLUEJ.net
>>184
仕様を理解してたらバグがないって? w
189:デフォルトの名無しさん
17/06/05 17:11:30.09 oWlVC1QB.net
非欲張り、欲張り、強欲の違いが分からなかったんだけど
URLリンク(d.hatena.ne.jp)
これ読んでやっと分かった
こりゃエディタの検索で試してるだけじゃ理解出来なくて当然だね
誰か同じように例を交えて先読みと戻り読みのロジックを解説して欲しい
それか解説してるwebページがあるならリンク貼って下さい
190:デフォルトの名無しさん
17/06/09 23:50:59.51 fJoQB/gQ.net
●Regular Expressionの使用環境
秀丸 HMJRE.DLL V5.00
●検索か置換か?
置換
●説明
文章最後の文字からEOFまでの 空白(全角半角両方) タブ 改行 を消したい。
●対象データ
AAAAA
BBBBB
CCCCC
[EOF]
●希望する結果
AAAAA
BBBBB
CCCCC[EOF]
191:デフォルトの名無しさん
17/06/10 10:49:19.67 qGbgn0XY.net
URLリンク(htom.in.coocan.jp)
192:デフォルトの名無しさん
17/06/10 12:37:04.98 6tXlKKLu.net
[ \s]*(?!\n)$(?#maxlines:99999999)
193:デフォルトの名無しさん
17/06/12 04:37:37.47 40WtKqR9.net
>>187
Qiitaなのでコメントまで必ず読むこと
正規表現の先読み/後読みを「絞り込み」と理解してみる - Qiita
URLリンク(qiita.com)
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
URLリンク(qiita.com)
後者は日本語表現のネタモノなので理解にはあまり役に立ちませんが
194:デフォルトの名無しさん
17/06/12 04:43:04.94 3uouTe/z.net
>>191
ありがとう。読んでみます
195:デフォルトの名無しさん
17/06/15 14:44:28.61 p0Tdw73d.net
そもそも「正規表現」が誤訳だし
「先読み/後読み」がどうだって驚かない
196:デフォルトの名無しさん
17/06/15 17:11:52.26 vJds0eqB.net
名前なのに誤訳ってなんだよ
197:デフォルトの名無しさん
17/06/15 20:46:27.61 am9DsefU.net
「正規表現」が誤訳!!www
198:デフォルトの名無しさん
17/06/15 21:53:29.88 5Ry9SVFq.net
前厄,翻訳,後厄
199:デフォルトの名無しさん
17/06/15 23:55:29.06 kDv/IOKj.net
非正規労働者に謝れ
200:デフォルトの名無しさん
17/06/16 00:00:22.35 AvJwaQP1.net
>>193
そんな感じがする
でも�
201:闥�して何十年経過したからいまさら変更できない 直訳すると正則記法?
202:デフォルトの名無しさん
17/06/16 00:03:22.93 ugmLNmLC.net
まさのりって誰よ?
203:デフォルトの名無しさん
17/06/16 00:09:53.04 7387anCt.net
>>198
数学用語で考えると、「正則式」
204:デフォルトの名無しさん
17/06/16 00:28:35.35 CHM/yJyC.net
誤訳にしたくて必死過ぎw
205:デフォルトの名無しさん
17/06/16 00:34:50.74 PEuGYK32.net
確かに数学的にはregularは正則でnormalが正規だけども
正規表現が正則式だの正則表現になったからといって何が分かりやすくなるでもなし
206:デフォルトの名無しさん
17/06/16 01:26:14.32 1cZCMNBu.net
ID変わった時間に擁護
207:デフォルトの名無しさん
17/06/16 03:20:09.01 cmFh/xD2.net
英語圏の人たちにとってもRegular Expressionと言われて
[ \s]* みたいなことか~て思い浮かぶわけでもなかろ
単に「それを何と呼ぶか」つまり名前付けをどうするってだけのことだよ
ただ日本では(2chだけかもしれないけど)性器表現とか茶々入れる奴がいるのが面倒くさい
208:デフォルトの名無しさん
17/06/16 06:44:35.89 HukDnr5k.net
2chに限らずゲスな一般大衆の猿共は真っ先に性器と捉える
正規よりかは正則の方が良かっただろうけど
若い女の子へのセクハラに使えるから正規も捨て難い
まあ今時「せいき」の言葉にモジモジする女子なんて希少だが居なくは無い
209:デフォルトの名無しさん
17/06/16 12:48:55.14 dHQ1DtF8.net
くっさ
210:デフォルトの名無しさん
17/06/16 13:01:55.39 KyUpje1a.net
正規表現で置換
211:デフォルトの名無しさん
17/06/16 16:51:35.05 ugmLNmLC.net
>>207
通報した
212:デフォルトの名無しさん
17/06/16 17:21:44.35 HukDnr5k.net
痴漢の際に性器表現を用いた
213:デフォルトの名無しさん
17/06/16 18:35:19.21 1eQLQexT.net
成基学園ってまだあるんかね
214:デフォルトの名無しさん
17/06/16 22:02:33.78 fr6XvX0v3
緊急で知りたいのでお願いします
●Regular Expressionの使用環境
linux 4.1 カーネル
●検索か置換か?
置換
●説明
デジカメのファイル名を一括で変更したい
●対象データ DSC_で始まり4桁の数字.jpg
DSC_0414.jpg
DSC_0415.jpg
DSC_0416.jpg
●希望する結果 001.jpgから3桁で順番
001.jpg
002.jpg
003.jpg
215:デフォルトの名無しさん
17/06/19 22:55:10.17 HM1jnBNt.net
システム関係の仕事してるけど正規表現知ってるとホント仕事がはかどるわ
知らん奴いたら教えたくないレベルw
216:デフォルトの名無しさん
17/06/20 00:30:35.64 qgvPAN/M.net
システム関係の仕事って自宅警備員のこと?
217:デフォルトの名無しさん
17/06/20 08:43:02.71 bMt5HDL+.net
>>209
正規表現を用いて置換と挿入を行った
だろ
218:デフォルトの名無しさん
17/06/20 12:36:20.94 5s5M5H6z.net
痴漢と挿入
219:デフォルトの名無しさん
17/06/20 16:59:32.57 V+xxZfop.net
表現を抜いてれば完璧
220:デフォルトの名無しさん
17/06/22 00:33:36.51 WTVST2HN.net
痴漢って挿入する前にするものなのか?
221:デフォルトの名無しさん
17/06/25 14:01:32.44 cBKwT0iz.net
挿入したら痴漢じゃなくなるからそういうことだな
222:デフォルトの名無しさん
17/06/25 14:08:45.87 cBKwT0iz.net
質問です。
URLリンク(hayabusa3.2ch)・sc/test/read.cgi/news/1498009569/
↑ここに、「それは文科省にとってリスクか&#12441;あるわけて&#12441;すね。」っていう文章があります。
これをエディタで置換したいです。
秀丸エディタには半角化、全角化があるので、
「&#12441;」を「゛」に、「゛」とその前を半角に、「゙」とその前を全角にと言う手順で全角濁音化することができます。
しかし、段階的に置換すると、[ニダ]と言う文字が[ニダ]となります。
専ブラでなく普通のエディタでメール欄に限定せず「&#12441;」だけをちゃんと全角濁音化するにはどうしたらいいでしょうか。
223:デフォルトの名無しさん
17/06/25 14:14:01.85 cBKwT0iz.net
変換関数をネストして、全角から直接全角に置換すれば大丈夫っぽいです。
スレ汚し失礼しました。
224:デフォルトの名無しさん
17/06/25 14:17:59.69 lrjpj5rj.net
マクロ
225:デフォルトの名無しさん
17/06/25 14:24:13.60 cBKwT0iz.net
マクロを覚えるほど気力ないので。
せいぜいキーボードマクロまでですね。
メモ:
1回目「゙」→「゛」
2回目「[か-こさ-そた-と][゛]」→「\((0,ToHankaku),ToZenkakuHira)」
226:デフォルトの名無しさん
17/06/25 14:40:18.89 gOEYQ1GV.net
Unicode正規化
227:デフォルトの名無しさん
17/06/25 15:09:28.12 cBKwT0iz.net
ID:fr6XvX0v3
DOSコマンドでいけるよ
【.cmd】 バッチファイルスクリプト %12 【.bat】
スレリンク(tech板)
なんかscに書けなくなった。
認証が延々と出てくる。
228:デフォルトの名無しさん
17/06/25 15:19:25.37 cBKwT0iz.net
>>223
なるほど。
URLリンク(hide.maruo.co.jp)
> Unicode正規化を行ないます。
> パラメータとしてNFC、NFD、NFKC、NFKDが指定可能です。
Googlエ
> 合成形に正規化する方法を NFC(Normalization Form Composition)
229:デフォルトの名無しさん
17/06/29 16:59:45.11 02bfNUCV.net
質問します
●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])
までは考えましたがこれ以上力不足でわかりません よろしくお願いします
230:デフォルトの名無しさん
17/06/29 18:40:30.46 poRQnsAj.net
(^.*?,).*?(?=[,¥n])
rea,CCCCのパターンが行末だとできないんだよなー。
231:デフォルトの名無しさん
17/06/29 18:57:06.54 WmvxL1Sm.net
^([^,]*,)[^,\r\n]+
を
$1******
に置換
"a,b",defのようなものはダメだが
232:デフォルトの名無しさん
17/06/30 03:23:16.33 9+Qy2E7i.net
>>227-228
ありがとうございます 上手くいきました
使わせていただきます&勉強材料にさせていただきます
233:デフォルトの名無しさん
17/07/06 20:38:45.39 zX6kiHLz.net
質問です。
●Regular Expressionの使用環境
Java Script
●検索か置換か?
置換
●対象データ
abc:ABCDEFG
def:123456789
ghi:くぁwせdr
●希望する結果
上記のような複数行の文字列があったとして、
"123456789"を取り出すにはどのようにしたら良いでしょうか?
条件としては、行頭の"def"をキーにして、
「defで始まる行の、def:の次の文字から行末まで」を取り出したいです。
よろしくお願い致します。
234:デフォルトの名無しさん
17/07/07 08:13:19.50 QFC9teR0.net
後読みが使えないJSなら/def:(.*?$)/m
使えるなら/(?<=def:).*?$/m
235:デフォルトの名無しさん
17/07/08 02:10:34.01 OqNCkVph.net
BBCの正規表現クイズ。たまにはこういうのも面白いね
URLリンク(www.bbc.co.uk)
236:デフォルトの名無しさん
17/07/08 06:16:34.80 b/20QJ7+.net
>>231
こういう場合、先読みの方法でやるメリットって有るんですか?
初心者なんで教えて下さい。
237:デフォルトの名無しさん
17/07/08 06:17:08.46 b/20QJ7+.net
訂正
後読みでした。
238:デフォルトの名無しさん
17/07/08 09:10:13.00 NOOXEVdu.net
>>233
後読みの部分にはマッチしない
つまり>>230で後読み使った場合には
123456789
にマッチするがそうでない場合は
def:123456789
にマッチする
239:デフォルトの名無しさん
17/07/08 19:51:13.74 utlt5XjQ.net
後読みの説明はそうなんだけど、>>231 について訊いてるんでしょ?
俺も>>231の意図はよくわからん。行単位の処理を希望してるのにm付けてるし
240:デフォルトの名無しさん
17/07/10 01:20:40.78 8zNQYoZi.net
>>232
日本語の記事
URLリンク(gigazine.net)
241:デフォルトの名無しさん
17/07/15 10:24:03.66 /mu01QmD.net
>>232
新しいなコレ!
面白いんでエクセルで入力できるフォーマットを作ってみた
URLリンク(www.dotup.org)
(拡張子でうちのエクセルが激古なのがバレる…)
242:デフォルトの名無しさん
17/07/15 12:03:12.72 6mzqXSAQ.net
少しやって時間の問題だなと思って途中で切り上げて答見たけど
数文字しか合ってなかった
最後までやらなくてよかった
243:デフォルトの名無しさん
17/07/25 08:57:23.04 QW1aVSBc.net
●Regular Expressionの使用環境
VBA7.1
●検索か置換か?
検索
●説明
期待する数値の桁数かどうか。拡張子はあっても無くても良い。
●対象データ
AA17-0001.xlsm
AA17-0002
●希望する結果
ifで合致しているかどうかを判定しています。
.Pattern = "^AA\d{2}-\d{4}(\.xlsm$)?"
○AA17-0001.xlsm
○AA17-0002
×AA17-00023
×AA17-00024.xlsm
最後の?を削れば、拡張仕込みであれば上手くいきますが良い方法は
ないでしょうか。
244:デフォルトの名無しさん
17/07/25 09:09:17.24 jjK7Ecmt.net
>>240
VBAの仕様は知らんけど、これでできない?
^AA¥d{2}¥-¥d{4}(¥.xlsm)?$
245:デフォルトの名無しさん
17/07/25 12:00:47.38 QW1aVSBc.net
>>241
有り難うございます!ばっちりです。
$マークを足すだけで良かったんですね。助かりました。
246:デフォルトの名無しさん
17/07/25 12:23:12.14 QW1aVSBc.net
差し支え無ければ、 ^AA\d{2}-\d{4}(\.xlsm)? だと
ND17-00001
ND17-00001.xlsm2
等々にもマッチしてしまう理由を教えていただけないでしょうか。
247:デフォルトの名無しさん
17/07/25 12:24:08.99 QW1aVSBc.net
ミス。AAでした。
AA17-00001
AA17-00001.xlsm2
248:デフォルトの名無しさん
17/07/25 12:38:31.42 0gI9u146.net
>>243,244
横からだけど
AA17-0000部分にマッチしちゃうんじゃない?
249:デフォルトの名無しさん
17/07/25 13:05:32.38 BGzbzmfB.net
^AA\d{2}-\d{4}(\.xlsm$)?
は
"^AA\d{2}-\d{4}" と "^AA\d{2}-\d{4}\.xlsm$" という意味
AA17-00001
AA17-00001.xlsm2
の "AA17-0000" の部分に前者がマッチする
"^AA\d{2}-\d{4}$" であればマッチしない
250:デフォルトの名無しさん
17/07/25 13:22:18.59 QW1aVSBc.net
なるほど。分かりやすく有り難うございます!
だから>>241で期待通りになるんですね。
頭固いと理解するのが大変です。。orz
251:デフォルトの名無しさん
17/07/25 13:29:36.02 oWvKCPb4.net
?は「直前のパターンが 0回または 1回登場する事」なので、そのパターン中に、$「行末」を含めてしまうと、(0回登場側で)効果が消えてしまう。
1人で書いてるとよくやるミスだと思う。
252:デフォルトの名無しさん
17/07/25 21:26:32.07 lTcbRvTI.net
^AA\d{2}-\d{4}
は実は
^AA\d{2}-\d{4}.*$
だと考えれば理解の助けになるかも。ならないかも。
253:デフォルトの名無しさん
17/07/26 01:05:33.15 3rtPYRQF.net
^AA\d{2}-\d{4}(\.xlsm$)?
$?
行末の後ろに、? か。
この式は、見た瞬間に、おかしいとわかる
254:デフォルトの名無しさん
17/07/26 11:10:37.56 Vp/yahqk.net
>>250
文法的にも間違いでは無いだろ
255:デフォルトの名無しさん
17/07/26 13:08:28.96 9H6h7u80.net
>>251
文法的には正しいけれど、式としておかしい「と感じる事ができる」と言いたいんだと思う。
256:デフォルトの名無しさん
17/07/26 14:48:10.36 Vp/yahqk.net
>>252
式としても正しい
257:デフォルトの名無しさん
17/07/26 14:55:46.30 aH2YwDtv.net
250,252みたいなのをアスペっていうんだろうな
論点は式や文法として正しいか正しくないかではないって事ぐらい一目見れば分かりそうなもんだが
258:デフォルトの名無しさん
17/07/26 16:41:49.04 NnPMbS6q.net
きちんと整理すると目的に合わない正規表現が直感的に分かるエスパー能力
としか言いようがないし>>250がその能力者だとしても特に羨ましくもない
259:デフォルトの名無しさん
17/07/26 17:37:15.75 UlpW8N7A.net
例えば、エディタの検索等で強調表示する際の式としてなら何も不思議は無いが
プログラム中での判定式ならば後者は必ず前者にマッチするので意味を成さない
つまり無駄に冗長であったり何かミスをしている可能性が高い。そういう事でしょ
260:デフォルトの名無しさん
17/07/26 17:37:56.28 Sop8S35W.net
>>254
プログラマに多いタイプではある
261:デフォルトの名無しさん
17/07/26 17:52:57.91 Bbl5PJto.net
問題は >>250 が何の役にも立ちそうにないということじゃないかな。
何を言いたいか想像できなくもないが、単に知らないだけという可能性もまた捨てきれない。
ここはそういう場所だ。
明確に「$ は末尾にだけ書くようにすれば間違いを防げると思うよ」とでも書けばよかったのに。
262:デフォルトの名無しさん
17/07/26 18:26:15.97 UlpW8N7A.net
まあ読点の打ち方とかみるにアホガキか底辺土方がドヤりたかっただけだろうから
そろそろそっとしておいておやり
263:デフォルトの名無しさん
17/07/26 19:38:32.33 VudXLbcK.net
臭う正規表現だと言えばいいのかな
264:デフォルトの名無しさん
17/07/26 21:03:00.43 JJ3vg08i.net
>>250は句読点の打ち方からも、おかしいとわかる
発端は正規表現は行を対象にマッチするものという偏見じゃないか
265:デフォルトの名無しさん
17/07/27 08:25:22.52 JB/MQIbV.net
>>254
もう本来の問題は解決して、間違いを防ぐという話をしているところに >>250 だ。
いかにも頭悪そうだけど何しに来たんだというのが論点じゃないのか?
266:デフォルトの名無しさん
17/07/27 09:03:12.08 32ZlcHw6.net
よくこんなネタでいつまでも盛り上がれるな
267:デフォルトの名無しさん
17/07/27 10:22:50.72 FeDFxsXm.net
うむ
268:デフォルトの名無しさん
17/07/27 11:04:39.19 w0VKyQmM.net
そこら辺も含めてプログラマに多いタイプって事だ
話の流れや空気を読むのが苦手なタイプ
269:デフォルトの名無しさん
17/07/27 15:20:17.23 DvNlZLuV.net
>>265
辛辣ワロタ
270:デフォルトの名無しさん
17/07/27 18:27:44.41 t8Fq16Nl.net
2ch的にはまだ甘い方
271:デフォルトの名無しさん
17/07/27 19:38:46.83 /VCkXAgy.net
プログラマって話の流れが読めないやつ確かに多い気がするけど、何でなんだろう。
プログラムとかって、流れを理解する事が重要じゃん?
272:デフォルトの名無しさん
17/07/27 21:11:31.82 oiygPPLB.net
プログラマーとひと口に言ってもピンキリ
使えないキリの方のコミュ障ボッチオタク系IT土方をバカにするネタでそういったのが多いから
そんなイメージが付いてるだけでしょ
業種に依らず底辺のゴミ共に通じるネタだったものが独り歩きしたんじゃない?
まあでも「流れや空気を読む」てのはファジーな判断能力でコミュニケーションの中で培われるから
人間関係よりも数学の方が楽って人には難しく、そういった傾向はあるのかも知れない
273:デフォルトの名無しさん
17/07/27 22:58:53.54 SUaLVh4Q.net
>>268
君、249か253じゃあないのかよ?
274:デフォルトの名無しさん
17/07/28 06:08:45.61 Xfxcd5ys.net
やっとスレチ終わった?
275:デフォルトの名無しさん
17/07/28 11:26:50.45 qIgprOUf.net
sageも知らずに書いてる人って同一人物なんだろうけど
自分が遠回しにディスられてる事にも気付いてなくて可愛い
ある意味幸せか
276:デフォルトの名無しさん
17/08/12 17:55:36.45 cYclCetd.net
●Regular Expressionの使用環境
Java1.8
●検索か置換か?
検索
●説明
下記の部分を抽出したい
AV0bc-t3.jpg
B32bc4f.jpg
●対象データ(一部)
風景-20170503-AV0bc-t3.jpg
b5-two-mountain-B32bc4f.jpg
最初は-を区切りとして抽出できるかと思ったが
抽出対象の文字列にも-が登場することが判明して為万事休す状態です。
どうかご指導お願い致します。
277:272
17/08/12 18:05:09.95 cYclCetd.net
>>273です
すいません。これどう考えても不可能ですね。
-ファイルについては手動でやってその他は正規表現で対応します。
失礼しました。
278:デフォルトの名無しさん
17/08/12 20:46:08.10 oUGtyFlO.net
不可能
279:デフォルトの名無しさん
17/08/12 21:05:50.58 wIgCsZkA.net
>>273
誤爆前提
(?<=\-)([A-Za-z\d]+\-?[A-Za-z\d]{0,3}\.jpg)(?=(?:\n|$))
[A-Za-z\d]{0,3}部の構成次第か?
まあ全部手でやるよりかはマシになるような気がする
280:272
17/08/12 22:50:49.75 cYclCetd.net
>>276
ありがとうございます!!
まじで神です!相談して良かったです。
こういう人がお金をもらえる世の中になってほしいです。
本当に感謝します。あなたは誰よりも優しいです。
無償で人の為にがんばる人は本当に尊敬します!!
ありがとうございました!!
281:デフォルトの名無しさん
17/08/12 23:11:24.65 U/tP6VJk.net
該当文字列長の幅が決まっているなら{6,8}の数字を調整すればこれでいけるはず
(?<=-)[-A-Za-z\d]{6,8}\.jpg
282:デフォルトの名無しさん
17/08/13 03:23:49.05 SYaWjJhn.net
ファイル名には、半角英数字の他、「- _ .」と半角空白も、考慮しろ
こういうファイル名もある
a.txt.zip
283:デフォルトの名無しさん
17/08/13 04:21:48.64 dm/KZ1el.net
.tar.gzとかで良かったのでは
284:デフォルトの名無しさん
17/08/13 19:47:39.02 BX+CBZkv.net
2chのNGで、「URLが含まれる文章を除いた行が5つ以上あるレスをNG」という表記を作ることは可能ですか?
285:デフォルトの名無しさん
17/08/13 21:08:22.43 lg+GT5+n.net
>>281
日本語を(´・ω・`)
286:デフォルトの名無しさん
17/08/13 23:08:53.31 47VquCRx.net
gopher:とかmailto:とかか
287:デフォルトの名無しさん
17/08/14 03:10:00.43 FrfucSX4.net
>>282
前提
①正規表現を使い、2chのNG設定を行いたい
②専門板での長文荒らしをNGしたい
③URLが貼られたレスは長文であってもNGにしたくない
以上から、「URLが含まれる文章を除いた行が5つ以上あるレスをNG」をしたいです
この表記を作ることは可能ですか?
288:デフォルトの名無しさん
17/08/14 03:17:09.39 FrfucSX4.net
URLの定義を以下のようにしました
://([a-zA-Z0-9_/:;%#\$&\?\(\)~\.=\+\-])*
(://の後に英数字とURLに使われる記号が続く文字列)
これを[^]で括って否定にした後、任意の行数以上含まれるレスのNGをするという方向性で考えています
289:デフォルトの名無しさん
17/08/14 16:30:05.91 yxoqAlkZ.net
^が否定と 先頭の2つの意味を持っていて
$ が 末尾と $1 $2 などのインデックスの意味を持っているとか
メタ文字の効果が重複しているのが混乱します。
290:どうすればいいですか?
291:デフォルトの名無しさん
17/08/14 16:37:59.81 IeoGyZA4.net
>>286
たぶん[^]で括って否定には出来ないと思うよ。
292:デフォルトの名無しさん
17/08/14 18:31:02.14 89kehc6V.net
Jane StyleでIDなしのレスだけ抽出するにはどうしたらよろしいでしょうか?
IDなしをNGにする方法はいくらでも出てくるのですが・・・
293:デフォルトの名無しさん
17/08/14 19:13:15.73 j2odgQ2N.net
>>288
IDの有無が混在しているスレ教えて
294:デフォルトの名無しさん
17/08/14 20:33:03.02 89kehc6V.net
>>289
浪人あればID消せるんじゃなかったっけ?
ID表示スレでも?
たまに見かけるんだけど、
じゃあ、どのスレ?と聞かれてもなかなか見つからない。
すいません、見つかるまでお待ち下さい・・・
295:デフォルトの名無しさん
17/08/14 20:34:12.87 89kehc6V.net
半角文字列板でたまに見かけたような気が・・・
296:デフォルトの名無しさん
17/08/14 20:39:37.25 j2odgQ2N.net
もしくは
IDなしをNGにして、あぼーんのみ表示するとか
297:デフォルトの名無しさん
17/08/14 20:59:49.60 89kehc6V.net
>>292
すみません。今のところ該当スレが見つかりません。
目的としては、
優良エロ画像スレでたまにIDなしでグロ画像を貼る輩がいて、
IDなしのレスがほぼグロ画像ならIDなしをNGにするし、
IDなしでも優良エロ画像を貼ってくれてるならIDなしでもNGしないし・・・
という恥ずかしい理由なんです
298:デフォルトの名無しさん
17/08/14 21:00:54.22 89kehc6V.net
>>292
>IDなしをNGにして、あぼーんのみ表示するとか
これってどうやればいいんでしょうか?
299:デフォルトの名無しさん
17/08/14 21:04:32.71 j2odgQ2N.net
>>293-294
ここ正規表現スレだからJane質問スレに来て
300:デフォルトの名無しさん
17/08/21 19:05:01.74 ToOu4wDd.net
よろしければアドバイスください
●Regular Expressionの使用環境
正規表現で検索できるテキストエディタ
●検索か置換か?
検索
●説明
アンド検索で一つ目にマッチした文字列からn行以内にある二つ目の文字列までを抽出したい
●対象データ
林檎みかんバナナ
みかん林檎バナナ
林檎キウイみかん
バナナ林檎みかん
メロン林檎バナナ
メロンみかん林檎
みかんバナナ林檎
林檎みかんキウイ
林檎バナナみかん
●希望する結果
みかんバナナ
みかん林檎バナナ
林檎キウイ
301:295
17/08/21 19:05:58.56 ToOu4wDd.net
>>296の質問のつづきです
●自分で試したこと
今回は三行以内に「みかん」と「キウイ」の二つの文字列を含む部分 だけ を抽出したい
記述は以下のように書いてみたが、四行以上にまたがってマッチした部分まで抽出されてしまった
みかん([¥s¥S]*?)キウイ
●自分で試した検索ワード
「正規表現 複数行 文字列 検索 -秀丸」の組み合わせをいくつか試した
検索結果からプログラマーの質問回答サイトに飛んで似たように検索するも欲しい回答は見つからず
302:デフォルトの名無しさん
17/08/21 21:48:45.68 EQVEvxNp.net
n行なら可能だけどn行以内ってのは無理だと思う
つまり
1行の式|2行の式|…|n行の式
と書くしかないんじゃないかな
303:295
17/08/21 22:44:09.38 ToOu4wDd.net
そうですか
やはり ([¥s¥S]*?) を使うのが間違ってますよね?
レスありがとうございます
304:デフォルトの名無しさん
17/08/21 23:09:35.41 7hohe37q.net
/みかん¥S*?¥n??¥S*?¥n??¥S*?キウイ/g
とか
/みかん(?:¥S*¥n?){0,2}¥S*キウイ/g
とかかな
1~3行目と6~8行目のみかん~キウイがマッチする
305:デフォルトの名無しさん
17/08/23 21:18:57.34 a8dh4txw.net
>>297
秀丸の正規表現はしらないので一般的な正規表現で考えてみた。
試していないので間違っているかもしれないが。
みかん(.*¥n){1,3}?.*キウイ
306:デフォルトの名無しさん
17/08/23 23:01:36.58 bHZ6/xkT.net
>>301
試すといいよ
URLリンク(regex101.com)
307:デフォルトの名無しさん
17/08/23 23:56:43.55 v21fsY6g.net
できないね
秀丸はマイナス検索では?
308:デフォルトの名無しさん
17/08/24 22:00:31.43 vZuGMV9A.net
できたよ
コピペしたときバックスラッシュが別の文字に変わっていたので、
309:そこだけ入力し直したけど
310:デフォルトの名無しさん
17/10/02 15:17:50.91 uet6lO9o.net
二文字以上連続していない場合のみヒットする正規表現はどう書けばいいですか?
aを探すとして
"abc"のaはヒットする
"aabc"のaaは連続しているのでヒットしない
ということをしたいです
311:デフォルトの名無しさん
17/10/02 15:33:07.99 MBLNVziv.net
(?<!a)a(?!a)
312:デフォルトの名無しさん
17/10/02 15:50:22.85 oE42sBRL.net
aで固定って訳じゃなくて
bだけとかcだけとかも探したいのでは?
313:デフォルトの名無しさん
17/10/02 16:29:10.05 rrE28i3s.net
冷静なつっこみに受けた
314:デフォルトの名無しさん
17/10/02 17:40:05.25 G/SyJC6m.net
単に見つけるだけなら
/(.)(?!\1)(.)(?!\2)/
で出来なくもない。
しかし、見つかったときは2文字マッチするパターンなので
全部見つけたい場合はそこを考慮する必要がある。
先頭の文字は見つけられないから別途
/^(.)(?!\1)/
のようにする必要があるだろう。
言語によってはもっとうまくできるかもしれない。
でも、for 文とかで探す方がいいと思うよ。
315:デフォルトの名無しさん
17/10/02 18:33:11.59 G/SyJC6m.net
/(.)(\1)*/
でマッチした長さが 1 だったらという考え方も出来るけど、どう?
316:デフォルトの名無しさん
17/10/03 03:04:28.76 FFksRFs1.net
/^(?!.*(.)\1).*/
317:デフォルトの名無しさん
17/10/11 15:02:29.43 PTqhQudL.net
ユニコード文字プロパティから
特定の文字のみを除外した文字の集合を
簡単に書く方法はあるでしょうか?
例えば \p{C} からタブ(\t)と改行コード(\n|\r)のみ除外したもの
318:デフォルトの名無しさん
17/10/12 22:03:36.05 iUceZ3nS.net
>>312
(?![\n\r])\p{C}
319:デフォルトの名無しさん
17/10/14 07:42:21.07 sv7zl76d.net
「"」以外の文字にマッチするが「\"」ならそれにもマッチする
ってどう書けばいいですか?
320:デフォルトの名無しさん
17/10/14 08:04:06.86 Wo1S3xrN.net
>>314
([^"]|(?<=\\)")
321:デフォルトの名無しさん
17/10/14 08:38:00.26 sv7zl76d.net
ありがとうございます
知らない記号があるので勉強します
322:デフォルトの名無しさん
17/10/14 12:04:18.44 SVCVJk+z.net
正規表現を再利用したくて調べたんだができないんだな
itemcode:=/(S|T|U)\d{3}-\d{4}/
/^\s*\{itemcode}\s*$/
こういう仕様あっても全然いいと思うんだが仕様策定団体がサボったのか
323:デフォルトの名無しさん
17/10/14 12:19:47.01 2Glba8SI.net
言語やエディタの機能で補完すれば?
変数に正規表現リテラルを格納して後で使えるようにするのは正規表現の枠をこえてる
324:デフォルトの名無しさん
17/10/14 13:45:15.89 m/q/3Rhj.net
>>317
そもそも正規表現の規格の枠外やん
Perlなら
my $itemcode = q/(S|T|U)\d{3}-\d{4}/;
my $regex = qq/^\s*{$itemcode}\s*$/;
$target =~ /$regex/;
とか出来たと思うが, $itemcodeも$regexも単に文字列だしな
325:デフォルトの名無しさん
17/10/14 20:25:03.69 nyEdEfPd.net
>>317
環境によるが、pcreを使っているプログラムなら、
(?(DEFINE)(?<name>pattern)...)で定義して(?&name)で使える。つまり、
/(?(DEFINE)(?<itemcode>(S|T|U)\d{3}-\d{4}))^\s*(?&itemcode)\s*$/
326:デフォルトの名無しさん
17/10/15 12:04:10.87 xFgouCR2.net
正規表現技術入門って本買ったら初心者の入門書じゃなかった…
327:デフォルトの名無しさん
17/10/15 23:07:27.13 /4ZFGRZX.net
後方参照っどこが後方やねん、後方で参照してるってことか?
と思っていたのですが、
左から右へと文字列を舐めていくカーソルの立場から見て後ろ、
という意味ですね?
328:デフォルトの名無しさん
17/10/16 07:55:53.10 hhyAWP
329:uR.net
330:デフォルトの名無しさん
17/10/16 10:07:29.75 ZoMoe7Af.net
上から下
331:デフォルトの名無しさん
17/10/16 16:17:56.84 BvwEZWNg.net
PCRE_EXTENDEDの説明に
この修飾子を設定すると、エスケープするか 文字クラスの内部を除き、
パターンの空白文字は完全に無視されます。
とありますが、
これはどういう時に使うのでしょうか?
空白文字を無視したいなら
最初からパターンに含めなければいいだけのような気がするのですが・・
332:デフォルトの名無しさん
17/10/16 17:17:54.69 VwEzpL/B.net
>>325
改行したりして可読性を高めたい時とか
333:デフォルトの名無しさん
17/10/16 17:31:22.40 BvwEZWNg.net
>>326
可読性を上げるためのオプションですね
ありがとうございます
334:デフォルトの名無しさん
17/10/18 00:44:52.51 HJHK1SNa.net
[$]
こういう文字クラスがあった場合、これは終端と解釈されますか?
それとも文字列の$と解釈されますか?
また、[\$] だった場合は挙動が変化しますか?
335:デフォルトの名無しさん
17/10/18 01:19:34.59 GswCLlj6.net
試せば?
URLリンク(regex101.com)
336:デフォルトの名無しさん
17/10/18 01:39:24.99 HJHK1SNa.net
ありがとうございます
やはり文字列なんですね
337:デフォルトの名無しさん
17/10/20 00:50:10.62 hFePCOoH.net
過去にAutohotkeyスレで正規表現自体の質問は正規表現スレに行けとあったのでこちらで質問させて下さい(巻き添えアク禁でソフトウェア板に書き込めません)。宜しくお願いします。
●Regular Expressionの使用環境
wikiより引用
>AutoHotkeyで用意されている正規表現は、Perl 5に搭載されているものと概ね互換のPCRE(Perl Compatible Regular Expressions)である
●検索か置換か?
検索
●説明
順不同の単語群のすべてを含む文字列の最長を検索し取り出したいです
●対象データ
var := "クリスマス任意の文字列お盆任意の文字列正月任意の文字列"
pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)", $)
MsgBox, pos=%pos% $=%$%
s)の意味はシングルラインモード
posはマッチした位置
$にはマッチした全体が入ります
これですと先頭の"位置"にマッチ(pos=1になります)するのでマッチした全体$は空になってしまいます
●希望する結果
$=クリスマス任意の文字列お盆任意の文字列正月
実際は長文の一部で単語群がもっと多いです
どの文字が先頭でどの文字が最後か不明のとき、これらの単語群がすべて含まれる文字列全体を取り出すにはどのように書いたら良いでしょうか
(クリスマス|お盆|正月).+(?1)
これですと正月という単語が含まれなくてもマッチしてしまいます
338:デフォルトの名無しさん
17/10/20 02:08:00.45 yLtxI7rs.net
>>331
>これらの単語群がすべて含まれる文字列全体を取り出すには
これらの単語群って、クリスマス・お盆・正月の3単語を指してるのかな?
それならダサいけど(クリスマス|お盆|正月)を3回繰り返せば?
URLリンク(regex101.com)
339:デフォルトの名無しさん
17/10/20 02:42:11.40 GaFTw98F.net
>>331
その2を組み合わせればいいじゃん
/(?=.*クリスマス)(?=.*お?盆)(?=.*正月)(?:クリスマス|お?盆|正月).*(?:クリスマス|お?盆|正月)/
340:デフォルトの名無しさん
17/10/20 19:27:41.06 P/1hvwmS.net
2ch → 5chになったタイミングでアク禁って全解除されたと思うけど、また規制され始めたのかな?
341:デフォルトの名無しさん
17/10/20 19:58:25.65 S6VTZkXa.net
は?
342:デフォルトの名無しさん
17/10/20 20:01:26.36 GaFTw98F.net
アク禁は知らんけど、おπ規制だけは5chでは2chのを引き継いでないってことは言われてた
343:330
17/10/20 20:06:35.04 JiGfFRv1.net
>>332
すみませんでした
(クリスマス|お盆|正月)の3つの単語を全て含む文字列の最長マッチと書くべきでした
(クリスマス|お盆|正月).*?(クリスマス|お盆|正月).*?(クリスマス|お盆|正月)
では最長3単語まででお盆という単語を含まなくてもマッチしてしまいます
>>333
>その2
というのが何をさす
344:のかすみません分かりませんでした var := "クリスマス任意の文字列お盆任意の文字列正月任意の文字列お盆任意の文字列正月任意の文字列クリスマスzzzz盆zzzzz盆zzzzzzz盆zzzzzzzzzzzお盆" pos := RegExMatch(var, "s)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $) MsgBox,,, pos%pos% %$%, ;マッチ $=var全体 pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $) MsgBox,,, pos%pos% %$%, ;行頭^記号ありでもマッチしました $=var全体 これでお盆が含まなければマッチせず、全ての単語が含まれるとき期待通りになりました。有難うございました ただ、対象文字列の1文字目が(クリスマス|お盆|正月)以外で始まるケースではマッチしませんでした 最初に書いたこれなら1文字目を問わずマッチするのですがやはり全体が拾えず……。 pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)", $) var := RegExReplace(var, "^.*?(?=クリスマス|お?盆|正月)", "") のように1文字目が必ず指定した単語のどれかになるように修正してから使わせていただきます お世話になりました。
345:デフォルトの名無しさん
17/10/20 20:21:51.48 GaFTw98F.net
先頭に^を付けたらダメだろ
^は文頭の位置を表す記号なんだから
346:デフォルトの名無しさん
17/10/20 20:23:53.34 JiGfFRv1.net
pos := RegExMatch(var, "s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))", $)
MsgBox, %$1%
すみませんこれで1文字目不問で取り出せました
長文失礼しました
347:デフォルトの名無しさん
17/10/20 20:27:40.74 GaFTw98F.net
何がしたいの?
>>333で要求する最長文字列を取れるはずだけど?
マッチ全体がそうなるようにしてるんだから
それとも部分キャプチャで取りたかったんなら全体を()で括るだけでいいよ
348:デフォルトの名無しさん
17/10/20 20:41:25.29 JiGfFRv1.net
説明下手ですみません
var := "zzあzzzいzzzうzzzうzzあzzいzz"
最初に見つかる(あ|い|う)のどれかから
最後に見つかる(あ|い|う)のどれかまで
かつ(あ|い|う)すべての語が含まれる文字列を取り出したかった
アク禁じゃなくスマホ回線だからかも知れません
349:デフォルトの名無しさん
17/10/20 22:48:55.52 yLtxI7rs.net
>>337
おおそういう事だったか
ちょっと難しいね
URLリンク(regex101.com)
350:デフォルトの名無しさん
17/10/21 00:17:18.52 jXM7J8Fl.net
こういうのはどうかな
(?=.*クリスマス)(?=.*お盆)(?=.*正月)(?:クリスマス|お盆|正月).*(?:クリスマス|お盆|正月)
351:デフォルトの名無しさん
17/10/21 00:21:45.84 jXM7J8Fl.net
と思ったら>>333と全く同じやんけ・・・・
これでちゃんと途中からでも欲しい部分全部拾えるでしょ?
URLリンク(regex101.com)
352:デフォルトの名無しさん
17/10/21 00:33:00.59 ZBz0JWdz.net
**クリスマス**クリスマス**正月**お盆**お盆**
だったら最初と最後の**を抜かして
クリスマス**クリスマス**正月**お盆**お盆
にマッチさせたいって話なの?
あとシングルラインモード使ってるから
複数行にわたってマッチさせたいんだよね?
↓こういうの
**クリスマス**
**クリスマス**正月**
**正月**お盆**
353:デフォルトの名無しさん
17/10/21 00:33:20.08 ZBz0JWdz.net
アスタリスク見にくいな
354:338
17/10/21 02:32:45.68 o7hEIA7f.net
>>343,344
AutoHotkey v1.1.26.01(最新) Unicode版ですがやはり先頭が別の文字列だとマッチしません
var := "zzzクリスマス任意の文字列お盆任意の文字列正月任意の文字列お盆任意の文字列正月任意の文字列クリスマスzzzz盆zzzzz盆zzzzzzz盆zzzzzzzzzzzお盆"
pos := RegExMatch(var, "s)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $)
MsgBox,,, pos%pos% %$%, ;pos=0 マッチしません
>>339の正規表現ならpos=1で最初に見つかるクリスマスから最後の盆まで取り出せました
>>345
その通りです>>341より分かりやすい説明が思いつきません
355:デフォルトの名無しさん
17/10/21 12:04:21.32 Awu3DWjD.net
"s)(?=((お?+盆)|(クリスマス)|(正月)))(?=.*(?2))(?=.*(?3))(?=.*(?4)).*(?1)"
>>347
気持ち悪いから試してみた
"s)(?=盆)盆"→マッチする
"s)(?=.*?盆)盆"→マッチしない←?!?!
"s).(?=.*?盆)盆"→する
"s)(?=.)(?=.*?盆)盆"→する
"s)(?:)(?=.*?盆)盆"→する
s)と(?=.*の間に何かを挿めば何故か回避できそう?
"s)(?:)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)"
356:338
17/10/21 17:14:22.52 o7hEIA7f.net
>>348
すごい!>>347のvar文字列に対しpos=4で最も理想的な形でとれました!
pos := RegExMatch(var, "s)(?=((お?+盆)|(クリスマス)|(正月)))(?=.*(?2))(?=.*(?3))(?=.*(?4)).*(?1)", $)
MsgBox,,, pos%pos% %$%, ;pos=4 $=最初のクリスマスから最後の盆
s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)
この正規表現の出所はスマホアプリ板2chmate質問スレのテンプレにあるNGワードで
2chmateのシングルラインモードは(?s:ここに正規表現)と書くようです
その辺のやりとりが過去スレ
URLリンク(itest.5ch.net)
357:9/893-n にありました >893 >複数のワードを全て含む書き込みをNG >(?s:^(?=.*ワード1)(?=.*ワード2)(?=.*ワード3)) >これがどうしても分からん(なぜワードの順番を入れ換えてもマッチするのか) > >895 >ワード1を先読みしてそれを含む^にマッチ >ワード2を先読みしてそれを含む^(?=.*ワード1)にマッチ >ワード3を先読みしてそれを含む^(?=.*ワード1)(?=.*ワード2)にマッチ > >896 >例えば「(先頭)あいうえお」という文字列に^(?=.*うえお)でサーチかける場合 >^(?=.*うえお)は「.*うえお」が続く^のみにマッチするから「うえお」を含む「(先頭)」にマッチ >つまりこれを何度やっても^に戻ってくる >で、先読みがどこかで失敗したらそこで成立しなくなるというカラクリ
358:338
17/10/21 17:15:24.33 o7hEIA7f.net
s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))
AutoHotkeyシングルラインモードでは正規表現の先頭に「^」が有っても無くても先頭からマッチするので
.*?(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月) ;<----ここで先頭にマッチ(1)
(?:お?盆|クリスマス|正月) ;<----先頭に続く最初に見つかる(?:お?盆|クリスマス|正月)のどれかにマッチ(2)
.*(?:お?盆|クリスマス|正月) ;<----(2)に続く最後に見つかる(?:お?盆|クリスマス|正月)のどれかにマッチ(3)となるようです
s)と(?=.*?の間に最短0文字表現を入れないとマッチしないのはもしかしてバグなんでしょうかね
359:デフォルトの名無しさん
17/10/24 15:16:03.89 5n0ye5v7.net
すみません。
自分で書いた正規表現が期待通り動いたのですが理由が分かりません。
どなたか解説お願いします。
Notepad++の置換で、こんなデータに対して
<abcde> <hijk>
<abc> <XYZ>
<dfg>
検索文字列 (?:\s*<([^<>]*)>)?\s*<([^<>]*)>
置換文字列 [$1]\t[$2]\r\n
で置換して、結果がこうなりました。
[abcde] [hijk]
[abc] [XYZ]
[] [dfg]
この三行目の動作なんですが、一行に一個しかデータが無い場合には、二番目のデータとしてキャプチャしたかったので
この動きで良いのですが、なぜこれが出来たのが分かりません。
検索文字列の一つ目の丸カッコの (?:・・・)? <== この量指定子?がそう言う動作になるのでしょうか?
そうだとしたら、なぜそうなるのでしょうか?
あるいはもっと簡潔なパターンはありますか?
宜しくお願い致します。