[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:48 / Filesize : 330 KB / Number-of Response : 1037
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Regular Expression(正規表現) Part14



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以降

262 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 18:26:15.97 ID:UlpW8N7A.net]
まあ読点の打ち方とかみるにアホガキか底辺土方がドヤりたかっただけだろうから
そろそろそっとしておいておやり

263 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 19:38:32.33 ID:VudXLbcK.net]
臭う正規表現だと言えばいいのかな

264 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 21:03:00.43 ID:JJ3vg08i.net]
>>250は句読点の打ち方からも、おかしいとわかる

発端は正規表現は行を対象にマッチするものという偏見じゃないか

265 名前:デフォルトの名無しさん [2017/07/27(木) 08:25:22.52 ID:JB/MQIbV.net]
>>254
もう本来の問題は解決して、間違いを防ぐという話をしているところに >>250 だ。
いかにも頭悪そうだけど何しに来たんだというのが論点じゃないのか?

266 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 09:03:12.08 ID:32ZlcHw6.net]
よくこんなネタでいつまでも盛り上がれるな

267 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 10:22:50.72 ID:FeDFxsXm.net]
うむ

268 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 11:04:39.19 ID:w0VKyQmM.net]
そこら辺も含めてプログラマに多いタイプって事だ
話の流れや空気を読むのが苦手なタイプ

269 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 15:20:17.23 ID:DvNlZLuV.net]
>>265
辛辣ワロタ

270 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 18:27:44.41 ID:t8Fq16Nl.net]
2ch的にはまだ甘い方



271 名前:デフォルトの名無しさん [2017/07/27(木) 19:38:46.83 ID:/VCkXAgy.net]
プログラマって話の流れが読めないやつ確かに多い気がするけど、何でなんだろう。
プログラムとかって、流れを理解する事が重要じゃん?

272 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 21:11:31.82 ID:oiygPPLB.net]
プログラマーとひと口に言ってもピンキリ
使えないキリの方のコミュ障ボッチオタク系IT土方をバカにするネタでそういったのが多いから
そんなイメージが付いてるだけでしょ
業種に依らず底辺のゴミ共に通じるネタだったものが独り歩きしたんじゃない?

まあでも「流れや空気を読む」てのはファジーな判断能力でコミュニケーションの中で培われるから
人間関係よりも数学の方が楽って人には難しく、そういった傾向はあるのかも知れない

273 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 22:58:53.54 ID:SUaLVh4Q.net]
>>268
君、249か253じゃあないのかよ?

274 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 06:08:45.61 ID:Xfxcd5ys.net]
やっとスレチ終わった?

275 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 11:26:50.45 ID:qIgprOUf.net]
sageも知らずに書いてる人って同一人物なんだろうけど
自分が遠回しにディスられてる事にも気付いてなくて可愛い
ある意味幸せか

276 名前:デフォルトの名無しさん [2017/08/12(土) 17:55:36.45 ID:cYclCetd.net]
●Regular Expressionの使用環境
Java1.8

●検索か置換か?
検索

●説明
下記の部分を抽出したい
AV0bc-t3.jpg
B32bc4f.jpg

●対象データ(一部)
風景-20170503-AV0bc-t3.jpg
b5-two-mountain-B32bc4f.jpg


最初は-を区切りとして抽出できるかと思ったが
抽出対象の文字列にも-が登場することが判明して為万事休す状態です。
どうかご指導お願い致します。

277 名前:272 mailto:sage [2017/08/12(土) 18:05:09.95 ID:cYclCetd.net]
>>273です
すいません。これどう考えても不可能ですね。
-ファイルについては手動でやってその他は正規表現で対応します。
失礼しました。

278 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 20:46:08.10 ID:oUGtyFlO.net]
不可能

279 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 21:05:50.58 ID:wIgCsZkA.net]
>>273
誤爆前提
(?<=\-)([A-Za-z\d]+\-?[A-Za-z\d]{0,3}\.jpg)(?=(?:\n|$))

[A-Za-z\d]{0,3}部の構成次第か?
まあ全部手でやるよりかはマシになるような気がする

280 名前:272 [2017/08/12(土) 22:50:49.75 ID:cYclCetd.net]
>>276
ありがとうございます!!
まじで神です!相談して良かったです。
こういう人がお金をもらえる世の中になってほしいです。
本当に感謝します。あなたは誰よりも優しいです。
無償で人の為にがんばる人は本当に尊敬します!!
ありがとうございました!!



281 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 23:11:24.65 ID:U/tP6VJk.net]
該当文字列長の幅が決まっているなら{6,8}の数字を調整すればこれでいけるはず
(?<=-)[-A-Za-z\d]{6,8}\.jpg

282 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 03:23:49.05 ID:SYaWjJhn.net]
ファイル名には、半角英数字の他、「- _ .」と半角空白も、考慮しろ

こういうファイル名もある

a.txt.zip

283 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 04:21:48.64 ID:dm/KZ1el.net]
.tar.gzとかで良かったのでは

284 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 19:47:39.02 ID:BX+CBZkv.net]
2chのNGで、「URLが含まれる文章を除いた行が5つ以上あるレスをNG」という表記を作ることは可能ですか?

285 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 21:08:22.43 ID:lg+GT5+n.net]
>>281
日本語を(´・ω・`)

286 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 23:08:53.31 ID:47VquCRx.net]
gopher:とかmailto:とかか

287 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 03:10:00.43 ID:FrfucSX4.net]
>>282
前提
@正規表現を使い、2chのNG設定を行いたい
A専門板での長文荒らしをNGしたい
BURLが貼られたレスは長文であってもNGにしたくない
以上から、「URLが含まれる文章を除いた行が5つ以上あるレスをNG」をしたいです
この表記を作ることは可能ですか?

288 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 03:17:09.39 ID:FrfucSX4.net]
URLの定義を以下のようにしました
://([a-zA-Z0-9_/:;%#\$&\?\(\)~\.=\+\-])*
(://の後に英数字とURLに使われる記号が続く文字列)
これを[^]で括って否定にした後、任意の行数以上含まれるレスのNGをするという方向性で考えています

289 名前:デフォルトの名無しさん [2017/08/14(月) 16:30:05.91 ID:yxoqAlkZ.net]
^が否定と 先頭の2つの意味を持っていて
$ が 末尾と $1 $2 などのインデックスの意味を持っているとか
メタ文字の効果が重複しているのが混乱します。


290 名前:どうすればいいですか? []
[ここ壊れてます]



291 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 16:37:59.81 ID:IeoGyZA4.net]
>>286
たぶん[^]で括って否定には出来ないと思うよ。

292 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 18:31:02.14 ID:89kehc6V.net]
Jane StyleでIDなしのレスだけ抽出するにはどうしたらよろしいでしょうか?
IDなしをNGにする方法はいくらでも出てくるのですが・・・

293 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 19:13:15.73 ID:j2odgQ2N.net]
>>288
IDの有無が混在しているスレ教えて

294 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 20:33:03.02 ID:89kehc6V.net]
>>289
浪人あればID消せるんじゃなかったっけ?
ID表示スレでも?

たまに見かけるんだけど、
じゃあ、どのスレ?と聞かれてもなかなか見つからない。

すいません、見つかるまでお待ち下さい・・・

295 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 20:34:12.87 ID:89kehc6V.net]
半角文字列板でたまに見かけたような気が・・・

296 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 20:39:37.25 ID:j2odgQ2N.net]
もしくは
IDなしをNGにして、あぼーんのみ表示するとか

297 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 20:59:49.60 ID:89kehc6V.net]
>>292
すみません。今のところ該当スレが見つかりません。

目的としては、
優良エロ画像スレでたまにIDなしでグロ画像を貼る輩がいて、
IDなしのレスがほぼグロ画像ならIDなしをNGにするし、
IDなしでも優良エロ画像を貼ってくれてるならIDなしでもNGしないし・・・

という恥ずかしい理由なんです

298 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 21:00:54.22 ID:89kehc6V.net]
>>292

>IDなしをNGにして、あぼーんのみ表示するとか
これってどうやればいいんでしょうか?

299 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 21:04:32.71 ID:j2odgQ2N.net]
>>293-294
ここ正規表現スレだからJane質問スレに来て

300 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 19:05:01.74 ID:ToOu4wDd.net]
よろしければアドバイスください

●Regular Expressionの使用環境
正規表現で検索できるテキストエディタ

●検索か置換か?
検索

●説明
アンド検索で一つ目にマッチした文字列からn行以内にある二つ目の文字列までを抽出したい

●対象データ
林檎みかんバナナ
みかん林檎バナナ
林檎キウイみかん
バナナ林檎みかん
メロン林檎バナナ
メロンみかん林檎
みかんバナナ林檎
林檎みかんキウイ
林檎バナナみかん

●希望する結果
みかんバナナ
みかん林檎バナナ
林檎キウイ



301 名前:295 mailto:sage [2017/08/21(月) 19:05:58.56 ID:ToOu4wDd.net]
>>296の質問のつづきです

●自分で試したこと
今回は三行以内に「みかん」と「キウイ」の二つの文字列を含む部分 だけ を抽出したい
記述は以下のように書いてみたが、四行以上にまたがってマッチした部分まで抽出されてしまった

みかん([¥s¥S]*?)キウイ

●自分で試した検索ワード
「正規表現 複数行 文字列 検索 -秀丸」の組み合わせをいくつか試した
検索結果からプログラマーの質問回答サイトに飛んで似たように検索するも欲しい回答は見つからず

302 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 21:48:45.68 ID:EQVEvxNp.net]
n行なら可能だけどn行以内ってのは無理だと思う
つまり
1行の式|2行の式|…|n行の式
と書くしかないんじゃないかな

303 名前:295 mailto:sage [2017/08/21(月) 22:44:09.38 ID:ToOu4wDd.net]
そうですか
やはり ([¥s¥S]*?) を使うのが間違ってますよね?

レスありがとうございます

304 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 23:09:35.41 ID:7hohe37q.net]
/みかん¥S*?¥n??¥S*?¥n??¥S*?キウイ/g
とか
/みかん(?:¥S*¥n?){0,2}¥S*キウイ/g
とかかな

1~3行目と6~8行目のみかん〜キウイがマッチする

305 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 21:18:57.34 ID:a8dh4txw.net]
>>297

秀丸の正規表現はしらないので一般的な正規表現で考えてみた。
試していないので間違っているかもしれないが。

みかん(.*¥n){1,3}?.*キウイ

306 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 23:01:36.58 ID:bHZ6/xkT.net]
>>301
試すといいよ
https://regex101.com/

307 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 23:56:43.55 ID:v21fsY6g.net]
できないね
秀丸はマイナス検索では?

308 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 22:00:31.43 ID:vZuGMV9A.net]
できたよ

コピペしたときバックスラッシュが別の文字に変わっていたので、


309 名前:そこだけ入力し直したけど []
[ここ壊れてます]

310 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 15:17:50.91 ID:uet6lO9o.net]
二文字以上連続していない場合のみヒットする正規表現はどう書けばいいですか?
aを探すとして
"abc"のaはヒットする
"aabc"のaaは連続しているのでヒットしない
ということをしたいです



311 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 15:33:07.99 ID:MBLNVziv.net]
(?<!a)a(?!a)

312 名前:デフォルトの名無しさん [2017/10/02(月) 15:50:22.85 ID:oE42sBRL.net]
aで固定って訳じゃなくて
bだけとかcだけとかも探したいのでは?

313 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 16:29:10.05 ID:rrE28i3s.net]
冷静なつっこみに受けた

314 名前:デフォルトの名無しさん [2017/10/02(月) 17:40:05.25 ID:G/SyJC6m.net]
単に見つけるだけなら
/(.)(?!\1)(.)(?!\2)/
で出来なくもない。
しかし、見つかったときは2文字マッチするパターンなので
全部見つけたい場合はそこを考慮する必要がある。
先頭の文字は見つけられないから別途
/^(.)(?!\1)/
のようにする必要があるだろう。
言語によってはもっとうまくできるかもしれない。
でも、for 文とかで探す方がいいと思うよ。

315 名前:デフォルトの名無しさん [2017/10/02(月) 18:33:11.59 ID:G/SyJC6m.net]
/(.)(\1)*/
でマッチした長さが 1 だったらという考え方も出来るけど、どう?

316 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 03:04:28.76 ID:FFksRFs1.net]
/^(?!.*(.)\1).*/

317 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 15:02:29.43 ID:PTqhQudL.net]
ユニコード文字プロパティから
特定の文字のみを除外した文字の集合を
簡単に書く方法はあるでしょうか?

例えば \p{C} からタブ(\t)と改行コード(\n|\r)のみ除外したもの

318 名前:デフォルトの名無しさん [2017/10/12(木) 22:03:36.05 ID:iUceZ3nS.net]
>>312
(?![\n\r])\p{C}

319 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 07:42:21.07 ID:sv7zl76d.net]
「"」以外の文字にマッチするが「\"」ならそれにもマッチする
ってどう書けばいいですか?

320 名前:デフォルトの名無しさん [2017/10/14(土) 08:04:06.86 ID:Wo1S3xrN.net]
>>314
([^"]|(?<=\\)")



321 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 08:38:00.26 ID:sv7zl76d.net]
ありがとうございます
知らない記号があるので勉強します

322 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:04:18.44 ID:SVCVJk+z.net]
正規表現を再利用したくて調べたんだができないんだな
itemcode:=/(S|T|U)\d{3}-\d{4}/
/^\s*\{itemcode}\s*$/
こういう仕様あっても全然いいと思うんだが仕様策定団体がサボったのか

323 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:19:47.01 ID:2Glba8SI.net]
言語やエディタの機能で補完すれば?
変数に正規表現リテラルを格納して後で使えるようにするのは正規表現の枠をこえてる

324 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 13:45:15.89 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 20:25:03.69 ID:nyEdEfPd.net]
>>317
環境によるが、pcreを使っているプログラムなら、
(?(DEFINE)(?<name>pattern)...)で定義して(?&name)で使える。つまり、
/(?(DEFINE)(?<itemcode>(S|T|U)\d{3}-\d{4}))^\s*(?&itemcode)\s*$/

326 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 12:04:10.87 ID:xFgouCR2.net]
正規表現技術入門って本買ったら初心者の入門書じゃなかった…

327 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 23:07:27.13 ID:/4ZFGRZX.net]
後方参照っどこが後方やねん、後方で参照してるってことか?
と思っていたのですが、
左から右へと文字列を舐めていくカーソルの立場から見て後ろ、
という意味ですね?

328 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 07:55:53.10 ID:hhyAWP ]
[ここ壊れてます]

329 名前:uR.net mailto: んだんだ []
[ここ壊れてます]

330 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 10:07:29.75 ID:ZoMoe7Af.net]
上から下



331 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 16:17:56.84 ID:BvwEZWNg.net]
PCRE_EXTENDEDの説明に
この修飾子を設定すると、エスケープするか 文字クラスの内部を除き、
パターンの空白文字は完全に無視されます。
とありますが、
これはどういう時に使うのでしょうか?
空白文字を無視したいなら
最初からパターンに含めなければいいだけのような気がするのですが・・

332 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 17:17:54.69 ID:VwEzpL/B.net]
>>325
改行したりして可読性を高めたい時とか

333 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 17:31:22.40 ID:BvwEZWNg.net]
>>326
可読性を上げるためのオプションですね
ありがとうございます

334 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 00:44:52.51 ID:HJHK1SNa.net]
[$]

こういう文字クラスがあった場合、これは終端と解釈されますか?
それとも文字列の$と解釈されますか?

また、[\$] だった場合は挙動が変化しますか?

335 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 01:19:34.59 ID:GswCLlj6.net]
試せば?
https://regex101.com/r/jvUFhB/2

336 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 01:39:24.99 ID:HJHK1SNa.net]
ありがとうございます
やはり文字列なんですね

337 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:50:10.62 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 02:08:00.45 ID:yLtxI7rs.net]
>>331
>これらの単語群がすべて含まれる文字列全体を取り出すには

これらの単語群って、クリスマス・お盆・正月の3単語を指してるのかな?
それならダサいけど(クリスマス|お盆|正月)を3回繰り返せば?
https://regex101.com/r/yRw8ob/1

339 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 02:42:11.40 ID:GaFTw98F.net]
>>331
その2を組み合わせればいいじゃん
/(?=.*クリスマス)(?=.*お?盆)(?=.*正月)(?:クリスマス|お?盆|正月).*(?:クリスマス|お?盆|正月)/

340 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 19:27:41.06 ID:P/1hvwmS.net]
2ch → 5chになったタイミングでアク禁って全解除されたと思うけど、また規制され始めたのかな?



341 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 19:58:25.65 ID:S6VTZkXa.net]
は?

342 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:01:26.36 ID:GaFTw98F.net]
アク禁は知らんけど、おπ規制だけは5chでは2chのを引き継いでないってことは言われてた

343 名前:330 mailto:sage [2017/10/20(金) 20:06:35.04 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:21:51.48 ID:GaFTw98F.net]
先頭に^を付けたらダメだろ
^は文頭の位置を表す記号なんだから

346 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:23:53.34 ID:JiGfFRv1.net]
pos := RegExMatch(var, "s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))", $)
MsgBox, %$1%
すみませんこれで1文字目不問で取り出せました
長文失礼しました

347 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:27:40.74 ID:GaFTw98F.net]
何がしたいの?
>>333で要求する最長文字列を取れるはずだけど?
マッチ全体がそうなるようにしてるんだから
それとも部分キャプチャで取りたかったんなら全体を()で括るだけでいいよ

348 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:41:25.29 ID:JiGfFRv1.net]
説明下手ですみません
var := "zzあzzzいzzzうzzzうzzあzzいzz"
最初に見つかる(あ|い|う)のどれかから
最後に見つかる(あ|い|う)のどれかまで
かつ(あ|い|う)すべての語が含まれる文字列を取り出したかった
アク禁じゃなくスマホ回線だからかも知れません

349 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 22:48:55.52 ID:yLtxI7rs.net]
>>337
おおそういう事だったか
ちょっと難しいね
https://regex101.com/r/yRw8ob/4

350 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 00:17:18.52 ID:jXM7J8Fl.net]
こういうのはどうかな

(?=.*クリスマス)(?=.*お盆)(?=.*正月)(?:クリスマス|お盆|正月).*(?:クリスマス|お盆|正月)



351 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 00:21:45.84 ID:jXM7J8Fl.net]
と思ったら>>333と全く同じやんけ・・・・
これでちゃんと途中からでも欲しい部分全部拾えるでしょ?

https://regex101.com/r/raKyIg/1

352 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 00:33:00.59 ID:ZBz0JWdz.net]
**クリスマス**クリスマス**正月**お盆**お盆**
だったら最初と最後の**を抜かして
クリスマス**クリスマス**正月**お盆**お盆
にマッチさせたいって話なの?


あとシングルラインモード使ってるから
複数行にわたってマッチさせたいんだよね?
↓こういうの

**クリスマス**
**クリスマス**正月**
**正月**お盆**

353 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 00:33:20.08 ID:ZBz0JWdz.net]
アスタリスク見にくいな

354 名前:338 mailto:sage [2017/10/21(土) 02:32:45.68 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:04:21.32 ID:Awu3DWjD.net]
"s)(?=((お?+盆)|(クリスマス)|(正月)))(?=.*(?2))(?=.*(?3))(?=.*(?4)).*(?1)"

>>347
気持ち悪いから試してみた
"s)(?=盆)盆"→マッチする
"s)(?=.*?盆)盆"→マッチしない←?!?!
"s).(?=.*?盆)盆"→する
"s)(?=.)(?=.*?盆)盆"→する
"s)(?:)(?=.*?盆)盆"→する

s)と(?=.*の間に何かを挿めば何故か回避できそう?
"s)(?:)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)"

356 名前:338 mailto:sage [2017/10/21(土) 17:14:22.52 ID: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:ここに正規表現)と書くようです
その辺のやりとりが過去スレ
itest.5ch.net/potato/test/read.cgi/applism/147491225

357 名前:9/893-n
にありました

>893
>複数のワードを全て含む書き込みをNG
>(?s:^(?=.*ワード1)(?=.*ワード2)(?=.*ワード3))
>これがどうしても分からん(なぜワードの順番を入れ換えてもマッチするのか)
>
>895
>ワード1を先読みしてそれを含む^にマッチ
>ワード2を先読みしてそれを含む^(?=.*ワード1)にマッチ
>ワード3を先読みしてそれを含む^(?=.*ワード1)(?=.*ワード2)にマッチ
>
>896
>例えば「(先頭)あいうえお」という文字列に^(?=.*うえお)でサーチかける場合
>^(?=.*うえお)は「.*うえお」が続く^のみにマッチするから「うえお」を含む「(先頭)」にマッチ
>つまりこれを何度やっても^に戻ってくる
>で、先読みがどこかで失敗したらそこで成立しなくなるというカラクリ
[]
[ここ壊れてます]

358 名前:338 mailto:sage [2017/10/21(土) 17:15:24.33 ID:o7hEIA7f.net]
s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))
AutoHotkeyシングルラインモードでは正規表現の先頭に「^」が有っても無くても先頭からマッチするので
.*?(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月) ;<----ここで先頭にマッチ(1)
(?:お?盆|クリスマス|正月) ;<----先頭に続く最初に見つかる(?:お?盆|クリスマス|正月)のどれかにマッチ(2)
.*(?:お?盆|クリスマス|正月) ;<----(2)に続く最後に見つかる(?:お?盆|クリスマス|正月)のどれかにマッチ(3)となるようです
s)と(?=.*?の間に最短0文字表現を入れないとマッチしないのはもしかしてバグなんでしょうかね

359 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 15:16:03.89 ID:5n0ye5v7.net]
すみません。
自分で書いた正規表現が期待通り動いたのですが理由が分かりません。
どなたか解説お願いします。

Notepad++の置換で、こんなデータに対して

<abcde> <hijk>
<abc> <XYZ>
<dfg>

検索文字列 (?:\s*<([^<>]*)>)?\s*<([^<>]*)>
置換文字列 [$1]\t[$2]\r\n
で置換して、結果がこうなりました。

[abcde] [hijk]
[abc] [XYZ]
[] [dfg]

この三行目の動作なんですが、一行に一個しかデータが無い場合には、二番目のデータとしてキャプチャしたかったので
この動きで良いのですが、なぜこれが出来たのが分かりません。
検索文字列の一つ目の丸カッコの (?:・・・)? <== この量指定子?がそう言う動作になるのでしょうか?
そうだとしたら、なぜそうなるのでしょうか?
あるいはもっと簡潔なパターンはありますか?
宜しくお願い致します。

360 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 15:43:41.40 ID:JVoqQJo1.net]
$1と$2が存在するという前提で置換しておきながら$1は?で消えるかもと指定してるから
$1が無いパターンにマッチしたと判断された(適当)



361 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 00:01:15.16 ID:J9gYbH6z.net]
Spam Mail Killerの正規表現についてすみませんがご教示ください。

メールアドレスに同じドメインのアドレスを複数(たとえば3個以上)含む、という場合
例えばですが
abc@uvw-xyz.com, defg123@uvw-xyz.com, hi456@uvw-xyz.com
このようなアドレスをひとくくりに探し出すにはどのようにすればいいでしょうか?
##/(?=.*@uvy-xyz\.com){3,}/km
とやってみましたがうまく動きませんでした。
正規表現って難しい・・・

362 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 00:27:29.48 ID:lY+8fymW.net]
(.+?@uvw-xyz.com){3,}






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<330KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef