- 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以降
- 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,}
- 363 名前:デフォルトの名無しさん mailto:352 [2017/12/01(金) 00:37:36.11 ID:J9gYbH6z.net]
- >>354
ありがとうございます。 対象アドレスが2つでも反応してしまいました(´・ω・`;)何故だー
- 364 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 01:38:11.93 ID:4kQewCo+.net]
- ([\w\d._-]+?@uvw-xyz\.com, ){2,}[\w\d._-]+?@uvw-xyz\.com
冗長だけど、とりあえずこれならどのアプリでも動くはず
- 365 名前:352 mailto:sage [2017/12/01(金) 03:23:10.36 ID:J9gYbH6z.net]
- >>356
ありがとうござます。ばっちりでした。 ひとまずはこれで運用してみようと思います。
- 366 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 14:56:42.38 ID:GNYmtVXo.net]
- ([\w\d._-]+?@uvw-xyz\.com(,\s?)?){3,}
メールアドレスに注目するなら、これでもいいかな
- 367 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 15:03:45.52 ID:GNYmtVXo.net]
- スペースのパターンも考慮すると、こちらのほうがいいかも
([\w\d._-]+?@uvw-xyz\.com(,\s*)?){3,}
- 368 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 19:07:13.56 ID:lDYRmGG1.net]
- 拘り始めるときりがない
複数の記述方法があるしそれで制限も変わる https://ja.m.wikipedia.org/wiki/%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9 軽く「正規表現 メールアドレス」でググればメールアドレスを糞まじめに正規表現で頑張る意味がないのが頭の5個も読めば理解できるでしょ 依頼者がとりあえず解決したと言ってるんだからこれ以上は現状不要だよ
- 369 名前:352 mailto:sage [2017/12/01(金) 23:13:24.55 ID:J9gYbH6z.net]
- みなさんありがとうございました。
書き方も拘りだしたらきりが無いというのはよくわかりました。 記述がすっきりしていて動作も問題なかったので >>359 の方法でいってみます。
- 370 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 07:41:29.80 ID:dQK/O/Fy.net]
- >>360
最初に与えられた条件の中で、単に冗長な表現をシンプルにすることは、 限界事例を前提するような拘りというのとは違うと思うけどな。
- 371 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 09:41:49.64 ID:mi+Z/zsa.net]
- >>361
横槍だけど358は最初に与えられた条件(3回出現)と違って3回“連続”出現だから留意してね そして\wは\d_を含んでいるからまだ冗長だ、ついでに+?の?も{3,}の,もシンプルじゃないね 最初の質問の=を:にするだけでよかったと思うよ ^(?>.*?@uvy-xyz\.com){3}
- 372 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 10:25:05.48 ID:hDsQS9Tu.net]
- 依頼者が充足宣言してるのにね
- 373 名前:デフォルトの名無しさん [2017/12/02(土) 10:49:44.12 ID:SQFbqxvb.net]
- 正規表現の難しいところは引き際。いろんな意味で。
- 374 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 20:04:53.17 ID:aLfswfyL.net]
- 質問がメインのスレじゃないんだから、
探究することは悪いことじゃないよ。
- 375 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 20:22:17.17 ID:P9eUjlcX.net]
- なにいってんだこいつ?
1 > 質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。 2 質問テンプレ
- 376 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 20:32:56.34 ID:+fOAFawt.net]
- > 質問する場合は
 ̄ ̄ ̄ ̄ ̄ ̄
- 377 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 22:11:28.09 ID:oKFwf0E4.net]
- ほとんど質問がルートのレスツリーばかり
テンプレも質問がらみばかり 引き際誤るとここまで人はみっともなくなれるのか
- 378 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 22:44:47.63 ID:1qjImk2p.net]
- 自己紹介乙
- 379 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 23:58:10.96 ID:NhirO4Ud.net]
- 引き際重要
- 380 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 08:22:53.66 ID:DxswVEqC.net]
- Google Apps Scriptで、下記の時系列データを配列で取得したいのだけど、どうしたら良いですか?
https://www.morningstar.co.jp/RankingWeb/IndicesPart.do?indcCode=15
- 381 名前:デフォルトの名無しさん [2017/12/10(日) 17:27:12.44 ID:UOQUQi73.net]
- どこまでやりましたか
- 382 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 18:40:59.63 ID:DxswVEqC.net]
- あとは正規表現のとこだけです。
<tr> <td class="center">12/08</td> <td class="center">169</td> <td class="center">17</td> <td class="center"> </td> <td class="center">26</td> </tr>
- 383 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 00:06:26.95 ID:4q7JrCp0.net]
- jQuery のセレクターを使え
$('td.center').text()
- 384 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 01:01:11.97 ID:06if4WxO.net]
- >>374
正規表現よりHTMLパーサ使えってのは>>374に同意するがjQueryは外部HTMLをパース/操作するものではない ttps://sites.google.com/site/scriptsexamples/learn-by-example/parsing-html この辺参考にするのがいいんじゃない
- 385 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 07:53:34.73 ID:HLwn5MaC.net]
- 急にHTMLパーサなんて言われてもチンプンカンプンやわ
- 386 名前:デフォルトの名無しさん [2017/12/11(月) 09:34:01.52 ID:78kXJ+6a.net]
- すぐできるだろうと思って泥沼にハマることが多いわ、こりだすとキリがないわで、あきらめどころが難しいのが正規表現。
自分の中で制限時間(10分など。忙しさによる)を設けて、 それ以上時間がかかる場合は正規表現による解決するのをあきらめるってのが、運用上は合理的だろうね。 正規表現そのものの学習・調査をしたい場合は、もちろん違うが。 このスレの客層はどっちなのってことなのかな。
- 387 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 14:24:59.19 ID:HLwn5MaC.net]
- jQueryやらHTMLパーサやら能書きばっかり
正規表現で出来たから、もうええわ
- 388 名前:デフォルトの名無しさん mailto:sage [2017/12/12(火) 00:30:19.52 ID:u8BojTW8.net]
- >>376
>jQueryは外部HTMLをパース/操作するものではない なんでよ?
- 389 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 17:08:16.97 ID:lv6L9acp.net]
- Perl互換ですが,
ファイルの先頭から末尾までをマッチさせる,つまりファイルのテキストを全部取得するにはどう書いたらいいのでしょうか?
- 390 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 17:36:18.19 ID:lv6L9acp.net]
- 解決しました
([\s\S]*)で出来ました.
- 391 名前:デフォルトの名無しさん [2017/12/16(土) 03:31:44.42 ID:ArLhqftT.net]
- 正規表現は構文解析器(parser)じゃないから、
XML, HTML のように、文書に構造があるものは解析できない。バグる 例えば、コメント部に、 <td と書かれていても、正規表現では該当してしまう それに要素間に、祖先・子孫などの関係があって、入れ子構造になるから、 開始・終了タグが一致しない
- 392 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 22:01:18.38 ID:fLY/8wUq.net]
- バックスラッシュt、でいいやろ
- 393 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 23:20:44.39 ID:LMSHu3dl.net]
- 正規表現でできることできないことの見極めが難しい。
うまくできない原因が、自分の未熟によるものか、そもそも誰がやろうが無理なのか、という見極め。 これは正規表現に限った話でないが、正規表現を使っていると遭遇することが非常に多い。
- 394 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 23:31:28.83 ID:Xb/4cQMD.net]
- 自分が使ってる範囲で使えるものか完璧を目指すかで違ってくるよ
- 395 名前:デフォルトの名無しさん [2017/12/25(月) 17:59:18.23 ID:9hKP95Nk.net]
- もはや姓のサイトウ(斉藤、齊藤など)に適した検索方法って正規表現ぐらいじゃね?
プレス発表 「文字情報基盤整備事業」で推進していた漢字6万文字の国際規格化が完了:IPA 独立行政法人 情報処理推進機構 https://www.ipa.go.jp/about/press/20171225.html
- 396 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 18:01:37.66 ID:9hKP95Nk.net]
- というか外字だとマルチプラットホーム対応した検索アルゴリズムを作ることが困難だったので、国際規格化されただけまだマシか。
- 397 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 22:40:21.08 ID:8yZmKHLj.net]
- ユニコードなので特に何かに限定されない
ZWSPやZWJなどの方が地獄 anti.rosx.net/etc/memo/002_space.html
- 398 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 13:30:58.99 ID:bFwGimBi.net]
- 新年おめでとうございます
スマホアプリで正規表現を使いたくて調べたレベルで恐縮です '\s'は空白文字だそうですが半角スペースのみを表現できないでしょうか? また'/'を用いて半角スペースを表す方法はありませんでしょうか? 宜しくお願い致します
- 399 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 19:00:49.45 ID:I9szCE3x.net]
- 何故その程度ググらない?
半角スペースはそのまま半角スペースだ
- 400 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 20:13:20.96 ID:bFwGimBi.net]
- >>391
半角文字ばかり調べて盲点でした ありがとうございました
- 401 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 20:03:46.61 ID:eEPcZWZ
]
- [ここ壊れてます]
- 402 名前:O.net mailto: 社外に情報を持ち出せず脳内再生ですみませんが、
以下の抽出条件を教えてください ●Regular Expressionの使用環境 Excel/VBAの参照設定で5.5 C#からのソースを移植中に、 Executeメソッドで(おそらく後読みができず)エラーとなっているが、 正規表現初心者で手も足も出ず… ●検索か置換か? 検索 ●説明 複数行の 任意のホワイトスペースhostname: 後の文字列を検索し、 直後のドメイン名を取得したい。ただし、IPアドレスは除外したい。 ●対象データ hostname: hogehoge.com改行 hostname: mogemoge.com改行 hostname: 192.168.1.1改行 ●希望する結果 hogehoge.com mogemoge.com よろしくお願いします。 [] - [ここ壊れてます]
- 403 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 20:08:09.69 ID:eEPcZWZO.net]
- ●対象データ
△△hostname:△hogehoge.com改行 △△△△hostname:△mogemoge.com改行 △hostname:△192.168.1.1改行 のようにスペースが入っています。 Janeでカキコするとスペースが消えたので補足します。
- 404 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 21:13:44.07 ID:RuMnMvof.net]
- ホスト名の条件が分からんからドメイン名と同等と仮定する
マルチラインモードで ^\s*(?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?:[^\S\x0A\x0D]*((?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?)$ としてグループ1のキャプチャを見る, とか つうかVBAなら正規表現で頑張るより改行文字と:でそれぞれsplitしてループ回しながらtrimするのが自然だと思うけど
- 405 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 22:13:51.90 ID:eEPcZWZO.net]
- >>395
なるほど、hostnameを検索して後読みするのではなく、 ドメインで合致させつつ、IPアドレスを除外するというわけですね。 理解のために改行してみました。 ^\s* (?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9]) ?:[^\S\x0A\x0D] *( (?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9]) ?)$ のうち、 [A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9]) がドメイン、 [^\S\x0A\x0D] がIPアドレス除外ですね。 私もVBAならInstrとMIDを駆使したほうが可読性も生産性も上がると思うのですが、 過去のC#とPerlの正規表現コードを再利用しつつ、将来的にはPythonとかにも応用できるように 正規表現でがんばれ、との指示を受けたのですが、 いきなりVBAでは後読みできないとか、まわりに有識者のいない罠にはまり難儀しています。
- 406 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 22:25:41.73 ID:RuMnMvof.net]
- > がIPアドレス除外ですね
違う \Sは空白文字以外だから[^\S\x0A\x0D]は空白文字以外とCR, LFの「何れでもない」場合, つまり空白文字からCRとLFを除外したもの そもそも(先頭が英字でなければならない)ドメイン名でマッチングしてるんだから先頭が数字で始まるIPアドレスを後から除外する必要はない 再利用性に関しても, 後読み出来るエンジンかそうでないかで既に失われてるんじゃないかね キャプチャの取得方法なんぞ言語ごとに大分違うしな 仕事で使うなら尚更メンテし辛い上に遅い正規表現を使わにゃならん積極的理由は無い splitでループ回せば入力のサイズに対して線型時間で終わることが保証される上に保守性も高い
- 407 名前:デフォルトの名無しさん mailto:sage [2018/01/07(日) 12:17:55.91 ID:ln22xrzP.net]
- >>393
ここでドメイン名文字種チェックせにゃならんの IPアドレスではないで判断でけんの
- 408 名前:デフォルトの名無しさん mailto:sage [2018/01/10(水) 23:41:51.90 ID:qa5Jh8Cf.net]
- >>398
現仕様だとまさにIP除外なんだけど、123.comとかが入ってくるので、あとで除外しているという。。 >>397 今日、やっと開発場所で試しました。 ドメインは見事マッチしました!が、 △△domain:△hogehoge.com改行 の行までマッチしてしまうので、 ^\s* (?:[A-Za-z]〜 のところを ^\shostname:* (?:[A-Za-z]〜 にしてみましたが、今度はすべてマッチしなくなりました。 スペース連続shostname:*を除外したつもりなんですが…
- 409 名前:教えてくだされ。 []
- [ここ壊れてます]
- 410 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 10:30:10.40 ID:Xo4biI2J.net]
- ^[△]*hostname:[△]*([0-9.]*[A-Za-z\-][0-9A-Za-z.\-]*)$
^[△]*hostname:[△]*([0-9.]*[^\s0-9.]\S*)$ hostname:△mevius.5ch.net hostname:△86886.jp hostname:△日本語.jp hostname:△はじめよう.みんな
- 411 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 12:30:44.58 ID:/99JjIqr.net]
- >>399
要件は満たしたつもりだが, その行がマッチしちゃならん理由は? それともキャプチャの意味が分かってないのか?
- 412 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 13:56:21.29 ID:/99JjIqr.net]
- >>399
あと申し訳ないけど, 正規表現を全く理解してないよね? 何でその書き換えで除外出来たと思ったのか教えてくれる?
- 413 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 17:51:18.77 ID:WzsJRajU.net]
- あぁ, hostnameは固定文字列なのか
なら ^\s*hostname:[^\S\x0A\x0D]*((?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?)$ だけど
- 414 名前:デフォルトの名無しさん [2018/01/16(火) 12:15:21.97 ID:RA24ssqp.net]
- 正規表現の書き方教えてください。
CentOS 7のサーバーにURLを要求した際、下記のような余計な文字が付きます。付くことがあります。 /ディレクトリ/ファイル名.拡張子%01 /ディレクトリ/desktop.inib%01 /ディレクトリ/desktop.inie%01 またファイル名の後に、 %EE%81%9F%E2%81%80%EE%81%97%C9%84とか %E6%89%B8%E7%A8%B7%E4%99%BA%E5%A5%97%E3%8D%95%E4%BD%8C%E6%A1%B2%01とか ファイル名の語尾に不特定の文字が勝手に付く場合もあります。 ディレクトリを要求したときも ディレクトリの語尾に%E4%84%B7など(これも不特定)が付いてしまうことがあります。 これを除外するには、 正規表現でどのように書けば良いのでしょうか? よろしくお願いします。
- 415 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 13:31:33.72 ID:y9BMfGeo.net]
- https://social.technet.microsoft.com/Forums/ja-JP/5debbbcd-1def-42f8-a495-f655ebd58c4b/windows10-1709-webdav-?forum=win10itprogeneralJP
コレか? URLエンコード文字だけなら簡単だがASCIIが入るとなると容易ではない(どこまでがファイル名か判別出来ない) クライアント側のアップデートを待つ方が賢明な気がする
- 416 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 13:45:59.33 ID:y9BMfGeo.net]
- あと忘れてたけどWebDAVならクライアントにWinSCP使うとか
- 417 名前:403 mailto:sage [2018/01/16(火) 14:48:31.79 ID:RA24ssqp.net]
- ありがとうございます。
自分の場合「空」にはなってませんが似てますね。 便利なクライアントアプリケーション探してみます。
- 418 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 17:00:43.44 ID:1yOH1J8J.net]
- pattern = /^(.*)(?!%)/
p pattern.match('abc%123') Ruby で否定先読みを使ったら、「abc」だけ取れない。 すべての文字列にマッチしてしまう なんでやねんw
- 419 名前:デフォルトの名無しさん [2018/01/16(火) 17:14:43.11 ID:G8V+pnDB.net]
- なんでやもなにも、.* だから全体にマッチするよ。1文字ごとにチェックするか、文字クラスを使いなさい。
- 420 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 18:31:44.93 ID:1yOH1J8J.net]
- Ruby では、先頭から、% を探して、それ以降を削除する
str = '/dir/desktop.inib%01%EE%81' pos = str.index('%') if pos str = str.slice(0...pos) end puts str 結果 /dir/desktop.inib
- 421 名前:409 mailto:sage [2018/01/16(火) 19:25:09.57 ID:1yOH1J8J.net]
- 正規表現でも、できた。
Ruby では、先頭から、% 以外の文字を探す pattern = /^[^%]+/ str = '/dir/desktop.inib%01%EE%81' puts pattern.match str 結果 /dir/desktop.inib
- 422 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 20:18:43.79 ID:y9BMfGeo.net]
- 要件には書いてないけど, .iniまでが正しいファイル名だと思うよ
その後ろのbとかeもゴミ
- 423 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 22:39:12.31 ID:9E60uHWe.net]
- どういう法則性でb,eが付いたのかがわからないと、
b,eの他にも付くのがあるのか、また付かないこともあるのかもわからん 例えば、hoge.exee%01とかになるのか?
- 424 名前:403 mailto:sage [2018/01/17(水) 15:18:31.78 ID:BVJUZk9+.net]
- 皆さんありがとうございます。
>>413 それ以外にも幾つか変な文字の時もあり、 問題なく何も付かない時もあります。 決まったパターンは無いと思った方が良いですね。 すべてが1byte文字の時は
- 425 名前:413 mailto:sage [2018/01/17(水) 17:17:53.77 ID:BVJUZk9+.net]
- 最後に変な文章を残してしまいました。
すべてが1byte文字を要求するときは、 そんな変なゴミは付きにくいと書こうと思ったのですが、 まだ確証が無いので無視して結構です。
- 426 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 23:42:01.50 ID:3vNjEx0B.net]
- ●Regular Expressionの使用環境
桜エディタ(テキストエディタ) ●検索か置換か? 置き換え ●説明 文字数、文字種はいろいろです。ただしすべて半角(1バイト文字)です。 結果として、<>内の文字だけにできればどんな方法でも構いません 必要な情報かわかりませんが、<>の外には、<>があることはありません。 asqa>w3e<a>s98<as897kja> ←こんな感じの行はありません。 行末は必ず、>で終わり、必要な文字は必ず<>でくくられたものの中にあります。 いらない文字<必要な文字>ここに改行が入る という書式は絶対です。 ●対象データ R&^&*(!TYUIKM<slihfd> BA%(*&%ASAS<asdlikh> TF^(VB(*&N<a09sfyighkljn> ●希望する結果 slihfd asdlikh a09sfyighkljn よろしくお願いいたします。
- 427 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 00:23:12.83 ID:kN+YdVUy.net]
- ^[^<>]*<([^<>]+)>$
$1
- 428 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 23:06:15.86 ID:VxK8nSc/.net]
- [^<>^] サンクス
- 429 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 23:24:13.78 ID:Zisu4Ynz.net]
- >>417
ありがとうございます。うまく抽出できました。
- 430 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 23:37:41.58 ID:kN+YdVUy.net]
- このぐらいの正規表現なら基本だし, 覚えると正規表現の載ってるエディタでの編集が楽になるよ
とりあえずPerl互換を勉強してみるといい
- 431 名前:デフォルトの名無しさん mailto:sage [2018/02/14(水) 13:35:37.03 ID:2LP2x+pK.net]
- C#なんですが
[ああ]おおおおお [いいい]こここここ [うう][ええ]そそそそそ ととととと[たた] ↓ おおおおお こここここ そそそそそ ととととと[たた] にしたいんですが、どうしたらいいでしょうか。 ※先頭じゃない文中の[はは]は残したい
|

|