- 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以降
- 249 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 13:05:32.38 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 13:22:18.59 ID:QW1aVSBc.net]
- なるほど。分かりやすく有り難うございます!
だから>>241で期待通りになるんですね。 頭固いと理解するのが大変です。。orz
- 251 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 13:29:36.02 ID:oWvKCPb4.net]
- ?は「直前のパターンが 0回または 1回登場する事」なので、そのパターン中に、$「行末」を含めてしまうと、(0回登場側で)効果が消えてしまう。
1人で書いてるとよくやるミスだと思う。
- 252 名前:デフォルトの名無しさん [2017/07/25(火) 21:26:32.07 ID:lTcbRvTI.net]
- ^AA\d{2}-\d{4}
は実は ^AA\d{2}-\d{4}.*$ だと考えれば理解の助けになるかも。ならないかも。
- 253 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 01:05:33.15 ID:3rtPYRQF.net]
- ^AA\d{2}-\d{4}(\.xlsm$)?
$? 行末の後ろに、? か。 この式は、見た瞬間に、おかしいとわかる
- 254 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 11:10:37.56 ID:Vp/yahqk.net]
- >>250
文法的にも間違いでは無いだろ
- 255 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 13:08:28.96 ID:9H6h7u80.net]
- >>251
文法的には正しいけれど、式としておかしい「と感じる事ができる」と言いたいんだと思う。
- 256 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 14:48:10.36 ID:Vp/yahqk.net]
- >>252
式としても正しい
- 257 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 14:55:46.30 ID:aH2YwDtv.net]
- 250,252みたいなのをアスペっていうんだろうな
論点は式や文法として正しいか正しくないかではないって事ぐらい一目見れば分かりそうなもんだが
- 258 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 16:41:49.04 ID:NnPMbS6q.net]
- きちんと整理すると目的に合わない正規表現が直感的に分かるエスパー能力
としか言いようがないし>>250がその能力者だとしても特に羨ましくもない
- 259 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 17:37:15.75 ID:UlpW8N7A.net]
- 例えば、エディタの検索等で強調表示する際の式としてなら何も不思議は無いが
プログラム中での判定式ならば後者は必ず前者にマッチするので意味を成さない つまり無駄に冗長であったり何かミスをしている可能性が高い。そういう事でしょ
- 260 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 17:37:56.28 ID:Sop8S35W.net]
- >>254
プログラマに多いタイプではある
- 261 名前:デフォルトの名無しさん [2017/07/26(水) 17:52:57.91 ID:Bbl5PJto.net]
- 問題は >>250 が何の役にも立ちそうにないということじゃないかな。
何を言いたいか想像できなくもないが、単に知らないだけという可能性もまた捨てきれない。 ここはそういう場所だ。 明確に「$ は末尾にだけ書くようにすれば間違いを防げると思うよ」とでも書けばよかったのに。
- 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
|

|