Regular Expression(正規表現) Part15

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/09/16(月) 22:25:11.87ID:enU8we0d
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part14
https://mevius.5ch.net/test/read.cgi/tech/1489511075/


次スレは>>980宜しく
天ぷら等>>2以降
405400
垢版 |
2020/09/21(月) 05:27:30.09ID:+seX53Ud
Ruby, Nokogiri で、スクレイピングしたら、

require 'open-uri'
require 'nokogiri'

# プログラム技術@スレッド一覧
url = "https://mevius.5ch.net/tech/subback.html";

doc = Nokogiri::HTML( open( url ) )

# 「言語」という単語が含まれる、タイトルを表示する
ary = doc.css( "#trad > a" ).map { |elem| elem.content }
.select { |title| title.include? "言語" }

puts ary

出力
6: 次世代言語21 Go Nim Rust Swift Kotlin TypeScript (330)
10: 日本語プログラミング言語『なでしこ』スレ6.1c2ch.net (108)

以下略
406デフォルトの名無しさん
垢版 |
2020/09/21(月) 15:36:21.19ID:K0hBqhJG
冗談抜きでそんな無駄な努力するよりxpathとかそっち系おすすめするぞ
2020/09/21(月) 16:25:39.02ID:+MA8+KhA
単純なスクレイピングはcurl+pupが楽

$ curl -s https://mevius.5ch.net/tech/subback.html | pup '#trad > a' text{} | grep 言語 | head -5
408400
垢版 |
2020/09/21(月) 22:36:13.18ID:+seX53Ud
>>405
のopen-uri を、下のように、外部コマンドのcurl にも出来るけど、
普通は、わざわざ外部コマンドを呼ばない

url = "http〜"
doc = Nokogiri::HTML( open( url ) )

html = `curl http〜`
doc = Nokogiri::HTML( html )
2020/09/22(火) 15:43:36.39ID:fUgbeHE5
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
httpを含まない行の/を年に置き換えたい
●対象データ
https://5ch.net/
2020/9
●希望する結果
https://5ch.net/
2020年9
2020/09/22(火) 16:23:41.31ID:hefdb5Yb
こんなもんでもよろしいでしょうか。
あんまりうまくないと思いますが。
よろしくお願いいたします。

置換前
^(?!http)([0-9]{4})(/)

置換後
$1年
2020/09/22(火) 16:33:21.65ID:fUgbeHE5
>>410
ありがとうございます。うまくいきました。
2020/09/23(水) 20:03:55.75ID:itvZvUM6
>>403
>>404
なんかすげえな

>>402,405-408
いろいろやり方あるんだね、サンクス
2020/09/25(金) 14:10:58.84ID:3NF+8528
●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。

●検索か置換か?
置換

●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。

●対象データ
hogeghoe = type: furagura
mogemoge = syntax: mojamoja

●希望する結果
hogeghoe type: furagura
mogemoge syntax: mojamoja
※スペースで置き換えた例


よろしくお願いいたします。
2020/09/25(金) 14:14:55.55ID:3NF+8528
>>413
取り消します。精査する前に書き込んでおり
間違いがございました。すいません。



●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。

●検索か置換か?
置換

●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。

●対象データ
hogeghoe = type: fuga:fuga
mogemoge = syntax: moja:moja
※置換目的のコロンの後ろにさらにコロンがある場合があります。
 =から「次の最初のコロン」までが置換対象です。

●希望する結果
hogeghoe fuga:fuga
mogemoge moja:moja
※スペースで置き換えた例

よろしくお願いいたします。
2020/09/25(金) 14:24:47.87ID:q10QaMUD
>>414
sed 's/ =[^:]*://g'
2020/09/25(金) 16:57:28.24ID:3NF+8528
>>415
ありがとうございます。理解を超えた書き方なので
そのまま利用いたします・・・
2020/09/25(金) 21:14:34.14ID:9rvIESf7
>>416
そんなに難解ではないぞ
: でない文字が0個以上続いて
その後に一文字だけ : があるパターンを
すべてスペースに書き換えるというだけの意味
2020/09/25(金) 22:49:57.38ID:rXEBHfdh
●使用環境:RegEx Lab(iOSアプリ,ICU Regex)
●検索か置換か?:検索
●説明:時間毎の内容を取り出したいです。自分でも考えてみたのですが、(?m)(?<=\d{1,2}:\d{2}\r)([\s\S]*?)\r ではAt〜Mediaまで取得できませんでした。
補足として、各内容の前後には必ず時間と空白行が挿入されています。ただし、テキストにも空白行が挿入されている場合があります。ちなみに日付毎にファイルが分かれているため、対象データ最上部の日付が途中に挿入されることはありません。

●対象データ

25 September 2020
=================

8:05
テキスト1

10:44
テキスト2
At: スポット名: 位置情報・座標
Tags: タグ1, タグ2
Media: 123abcdefg.jpg
Media: hijklmn456.png

●希望する結果
○マッチ1
テキスト1

○マッチ2
テキスト2
At: スポット名: 位置情報・座標
Tags: タグ1, タグ2
Media: 123abcdefg.jpg
Media: hijklmn456.png
419デフォルトの名無しさん
垢版 |
2020/09/26(土) 02:18:28.42ID:Xs9MiFl7
とりあえず鬼雲なら
\d\d?:\d\d\n(([^\n]+\n)+)
で\1なり$1なりで取り出せるけど

どー使うのかしらねーけど改行に続く時刻消せばいいんじゃねw
2020/09/26(土) 07:24:38.50ID:QW/S7GaB
\d\d?:\d\d\n\K((.(?!^\d\d?:\d\d))+\n)+
マッチに時間の直前の空行まで含めるのか?含まないのか?
テキスト終端(例だとテキスト1\n 456.png\n)の改行文字を含めるのか?含まないのか?
マッチがどこまでなのか曖昧
2段階になるけど一旦時刻をテキスト中に現れない文字に置換すれば簡単に出来る
^\d\d?:\d\d → ★
[^★]+
時刻の直前の空行を含まないのなら
\n\d\d?:\d\d → ★
テキスト終端の改行を(ry
\n\n\d\d?:\d\d → ★
2020/09/26(土) 19:21:20.61ID:aEJhlUXF
>>419
>>420
ありがとうございます!
試してみたところ、Meryでは問題なく動作しているようでしたがRegEx Labでは動作しませんでした…

> 時間の直前の空行
>テキスト終端(例だとテキスト1\n 456.png\n)の改行文字
どちらも含めずに取得したいです。
422デフォルトの名無しさん
垢版 |
2020/09/26(土) 19:40:36.95ID:5brst4gY
(?m)(?<=^\d{1,2}:\d{2}(?:\r\n|(?<!\r)\n|\r(?!\n)))^[\s\S]*?(?=(?:\r\n|(?<!\r)\n|\r(?!\n))+\d{1,2}:\d{2}(?:\r\n|(?<!\r)\n|\r(?!\n))|(?:\r\n|(?<!\r)\n|\r(?!\n))*\z)
2020/09/26(土) 20:25:49.24ID:W0BkzYxL
こういう長い正規表現てやっぱ遅くなったりするの?
424デフォルトの名無しさん
垢版 |
2020/09/26(土) 20:47:28.01ID:5brst4gY
これでよかったっぽい
(?m)(?<=^\d{1,2}:\d{2}(?:\r?\n|\r))^[\s\S]*?(?=(?:\r?\n|\r)+\d{1,2}:\d{2}(?:\r?\n|\r)|(?:\r?\n|\r)*\z)
425デフォルトの名無しさん
垢版 |
2020/09/26(土) 20:48:16.86ID:5brst4gY
>>423
どうだろうね、基本的な構造は>>418と同じだけど
データの改行コードがどうなっているのか謎だったのでとりあえず全種類対応しようと欲張ったらこんなことに

\n に置き換えるとこう
(?m)(?<=^\d{1,2}:\d{2}\n)^[\s\S]*?(?=\n+\d{1,2}:\d{2}\n|\n*\z)
2020/09/26(土) 20:52:05.12ID:yw3DqGjj
長い短いではなく、試行回数が多い記述(行ったり戻ったり何度もやり直すもの)が遅い
そういうのは逆に記述を詳しくしたりして長くするほうが速い
2020/09/26(土) 21:02:00.75ID:aEJhlUXF
>>424
問題なく動作しました、ありがとうございます!
本当に助かりました!
2020/09/26(土) 21:08:10.61ID:GBugeZhr
>>416
正規表現のデフォルトは、貪欲・greedy・最長一致だから、
非貪欲・reluctant・最短一致にしたい場合に使う。? と同じ

[^x]*、x以外の文字を、0個以上
[^x]+、x以外の文字を、1個以上

Ruby では、

src = "12x34x56"

p src[ /.*x/ ] #=> 12x34x

p src[ /.*?x/ ] #=> 12x
p src[ /[^x]*x/ ] #=> 12x
2020/09/26(土) 21:51:29.79ID:awo63W4n
>>426
行ったり戻ったりはないんじゃない?
2020/09/26(土) 22:57:54.77ID:U+G6yEte
>>429
バックトラックの事でしょ
https://qiita.com/mochizukikotaro/items/d36e61e56220da5f95d1
431デフォルトの名無しさん
垢版 |
2020/09/27(日) 04:53:12.79ID:ICi3HfJX
\d{1,2}なら\d\d?
\d{2}なら\d\d
の方が短く済むから2桁以下なら無駄
2020/09/27(日) 05:56:53.69ID:nMBRMM6J
それは見易さと短さのどちらを優先するかによる
短いだけが正義では無い
2つ程度で見易いもクソも…と思うかも知れないが慣れない者にとっては数字の方が見易いらしい
俺は断然\d\d?派だが

でもこれは(?:\r?\n|\r)→(?:\r\n?|\n)
同じ意味だが
\r
\r\n
 \n
をどう表すか?ってことだから後者のように前方を固定した方が分かり易いと思う
RtoLが関係してたりするのだろうか?
2020/09/27(日) 06:00:47.57ID:Y+KxHJb0
今どき\rだけとか見ないし\r?\nで良くね? 駄目?
2020/09/27(日) 20:03:40.48ID:+P5c8fwT
●Regular Expressionの使用環境

c# .net Framework 4.8

●検索か置換か?
検索

●説明
「,」区切りの2桁の文字列を全て取得したい(Split関数でなく)。


●対象データ
04,05,28

●希望する結果
04
05
28

●補足
現在使っている正規表現は右です (\d{2})(?:,(\d{2}))*
これを使うと、対象となる2桁の数字のうち、最初と最後のものしか取得できません
対象データが4個以上でも同様です
435411
垢版 |
2020/09/27(日) 20:26:03.04ID:qo22866j
以前 >>409 で質問し解答を頂いた者です。
内容は同じなんですが、この置換を他のパターンでも応用したく再度質問致します。

●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
置換

●説明
◆を含まない行の▲を■に置き換えたい
◆▲■は任意の文字列で、文字数も決まっていません。

●対象データ
Sst68▲h4◆
DRkPP2▲V
NN▲◆9K12XV▲
G▲RL88▲A7

●希望する結果
Sst68▲h4◆
DRkPP2■V
NN▲◆9K12XV▲
G■RL88■A7

どうぞよろしくお願いいたします。
2020/09/27(日) 21:00:31.89ID:7/tRzxCb
>>430
極端な例だろうけど4倍も差が出るのか
2020/09/27(日) 21:15:26.41ID:5NvF/cEJ
>>434
(¥d{2}),?
2020/09/27(日) 22:52:42.77ID:+P5c8fwT
>>437
返信ありがと
だけど上手く取得できないです
対象データが 04,05,28 のときにマッチしたグループを全部出力すると
04,
04
となります
2020/09/27(日) 23:09:03.39ID:5NvF/cEJ
>>438
MatchじゃなくてMatches使ってね
よく考えたら単に¥d{2}でもよくない?
2020/09/27(日) 23:09:42.50ID:PP0FbEmI
>>436
ちっとも極端じゃないよ
対象テキストが長くて酷いと数sと数msとか何千倍、何万倍も差がつく
もっと極端なことにもなって、だんまり(終わらない)状態になることもある
2020/09/27(日) 23:11:27.15ID:PP0FbEmI
あ、そのリンク先の表現でのことじゃなく一般的な話としてのことなので、念のため
2020/09/27(日) 23:23:38.28ID:+P5c8fwT
>>439
おかげさまで出来ました。ありがとうございます
2020/09/28(月) 00:15:40.71ID:KUcib4mR
数年前に某技術系Q&Aサイト全体が30分以上応答不能になったことがあったけど、アレもbacktrack絡みの正規表現処理(に高負荷をもたらす投稿)がトリガーだったはず
2020/09/28(月) 00:39:03.54ID:HqyKtYng
Jane系のNGEx,ReplaceStr.txtの正規表現で酷いものが投稿されることがある
よく吟味しないと
対象スレ(ちょっと長いスレとか)によってはだんまりとか発生する
2020/09/28(月) 05:18:56.57ID:QIpyCS2B
>>435
一旦、grep で、◆ を含まない行だけを抽出してから、処理すれば?

grep -v "◆" ファイル名
2020/09/28(月) 05:43:11.14ID:9VrOlQkL
バックトラックは対象が簡単に一致するものしか無いのであればそれほど気を使わなくても良いが
一致しないものがある場合 一致しない に至るまでに全パターンを試すから
その挙動を必要最小限に抑えたものとそうでないものとでの試行数は桁違い
対象が長くなれば数倍どころでは済まない
大抵の場合、人が確認する際のロジックを再現するのが1番効率が良い

NGEx.txtを晒すスレ7
http://jane2ch.net/test/read.cgi/community/1497272912/340
(<br>.*){20}             49194006ms  激重
^(.*?<br>){20}            *1570733ms
^(?:(?:(?!<br>).)*<br>){20}     ****2202ms  軽い
^(?>.*?<br>){20}           ****1784ms  もっと軽い
447435
垢版 |
2020/09/28(月) 15:22:21.72ID:R3xf3P8N
>>445
単なるテキストならいいのですが、用途としては
リネーマーソフトReNamerやAdvanced Renamerなどで
バッチ処理にも使いたいので。
2020/09/28(月) 18:16:12.67ID:RQEq0dPl
>>435
(?:^(?!.*◆)|\G(?!\A))(.*?)▲ → $1■
2020/09/28(月) 18:54:06.13ID:R3xf3P8N
>>448
出来ました!素晴らしいです!マジ感謝です!ありがとうございました。
2020/10/21(水) 20:12:01.53ID:nvjx5i9I
一文字だけで改行するのを
NGにするには
どうしたらいい?
2020/10/21(水) 20:18:35.54ID:+qN3TxkM
>>450
テンプレを読んで出直しましょう
2020/11/06(金) 11:29:16.13ID:xeNq05z2
oniguruma6.9.6 Windows10のVS2019で64bit版だとtestc.exeが無言で終了する、32bitだと正常。
Winodws7でVS2015U3だと64bitでも32bitでも正常に動作する。

これ、以前からWindows64bitが鬼門だなあ
2020/11/10(火) 19:15:09.53ID:aUuUQimA
●PowerShell

●置換

●テキストファイル内の「WrtCookie=」で始まる行の値を「WrtCookie=」に置換する

●「WrtCookie=」で始まる行

現在のコマンド

$input = '^(WrtCookie=).+$'

$replacement = '$1'

$file_contents = $(Get-Content $filepath) -replace $input, $replacement

結果

テキストファイル内の全行が出鱈目な文字列に置換されます
たとえば「$1[$1W$1I$1N$1D$1O$1W$1]$1」など

よろしくお願いします
2020/11/10(火) 21:00:25.97ID:UHXHz0W1
https://www.google.co.jp/search?q=PowerShell+%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+%E7%BD%AE%E6%8F%9B
2020/11/11(水) 00:09:52.12ID:tbqNNnPd
>>454
書き込む前にたくさんググりましたが、ダメでした
456 【大凶】
垢版 |
2020/11/11(水) 01:27:50.51ID:zRgJ3mqg
>>453
変数名 input を regexp とかに変えれば上手くいくはず

input は「自動変数」として設定済
https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_automatic_variables
2020/11/11(水) 02:35:05.41ID:wa6LgG/F
>>453
俺のところじゃ、そのままでも正常だけどなあ(win7だからか? PS ver.5.1)
その3行だけじゃあ表示も出力もされないので
$file_contents
を最後に追加した
その入力ってJane系のiniファイル(SJIS)だよね?
ファイルに出力もして確認してみた
(デフォではUnicode16になっちゃうのでout-fileでencoding指定)
2020/11/11(水) 05:21:46.13ID:yU9bVv8n
Windows 10、PSVersion 5.1 では、

input という名前が、ダメ!
2020/11/11(水) 19:56:31.19ID:tbqNNnPd
>>456-458
おっしゃる通りに変数inputの名前を別の変数名にしたら出来ました
inputは予約語みたいなものだったのね
ありがとう
2020/11/11(水) 22:49:04.53ID:yU9bVv8n
VSCode を使っていれば、白色になる・注意されるから、おかしいとすぐに分かる

まあ、echo などのエイリアスも、白くなるけど
461デフォルトの名無しさん
垢版 |
2020/12/12(土) 00:58:58.79ID:c3naq2mv
質問
abc

a,b,c
に一発で変換する正規表現を教えてください!
2020/12/12(土) 07:54:00.68ID:hjoAkuIf
(?!^|$) → ,
2020/12/12(土) 09:13:39.74ID:weC8GZqi
461じゃないけど、知らなかった。

 行頭じゃない&行末じゃない

だけ言えば字間全てに入れてくれるんだ。
2020/12/12(土) 09:45:07.71ID:DbQnMcwq
s//,/g
だと、,a,b,c,になる
465デフォルトの名無しさん
垢版 |
2020/12/12(土) 10:10:46.24ID:c3naq2mv
>>462
ありがとうございます!
2020/12/15(火) 08:04:57.95ID:RAwP5vtJ
●Regular Expressionの使用環境
Perl5
●検索か置換か?
検索
●説明
文字列中のX,YY,ZZZのどれかが最初にあるまでのX,YY,ZZZを含む抽出
●対象データ
ABXCDXEFYYGH
ABYCZZZDXEFYYGH
ABCDXXGHZZ
●希望する結果
ABX
ABYCZZZ
ABCDX

お願いします
2020/12/15(火) 08:15:41.96ID:M4wr588R
>>466
($out) = ($in =~ /(.*?(?:X|YY|ZZZ))/)
2020/12/15(火) 08:17:29.03ID:cXhQAKUm
>>466
試してないけど、
\A.*?(X|YY|ZZZ)(?=(X|YY|ZZZ))
2020/12/15(火) 08:49:36.46ID:RAwP5vtJ
>>467-468
ありがとうございます。
最初のでできました。
2020/12/19(土) 09:53:24.06ID:YTpQ8Jg0
ublacklistでPinterestをブロックする正規表現教えて下さい
471デフォルトの名無しさん
垢版 |
2021/01/11(月) 15:03:41.29ID:A5mldiyH
行末以外の改行を任意の一文字(今回はアットマーク)に置換したいのですが可能でしょうか?
改行コードは、crもlfもcrlfも混じってるものとしてお願いしたいです。
472デフォルトの名無しさん
垢版 |
2021/01/11(月) 15:10:21.63ID:WVZOdukT
>>471
行末の改行と行末でない改行を区別する方法がわからぬ
CSVみたいな感じ?
473デフォルトの名無しさん
垢版 |
2021/01/11(月) 15:31:25.19ID:zqhSwaSS
初学者なのでうまく伝わるか心配ですが、 固定長で末尾に改行が入っているレコードファイルを扱っています
その中で、末尾だけでなくレコード中にも改行コードが含まれるようなデータがあり、それを置換したいといった具合です。

UNIX上での話なので、Perlやsedで置換できればと思います。
よろしくお願いいたします。
2021/01/11(月) 15:41:19.51ID:8i1ZTkbL
sedはデフォルト行ベースなので改行コードを全部置換すればいい
2021/01/11(月) 15:43:13.55ID:92N2rfT4
/[\r\n]++(?!$)/@/g
こんな感じじゃね?分からんけど
2021/01/11(月) 16:15:14.39ID:rLqIFFRR
s/\r?\n/@/gm;

どうよ?
2021/01/11(月) 16:20:44.13ID:A2M5zvGV
固定長ごとに出てくる改行以外の改行ってことじゃね
改行含めて80文字固定長なら80文字目や160文字目以外の37文字目や53文字目に出てくる改行
2021/01/11(月) 17:26:33.52ID:8i1ZTkbL
あーすまんそういうことか
それだと固定長単位に読み取って置換と出力のループかな

while read -N10 line || [ "$line" ]; do
echo "$line" | tr -d '¥r¥n'
echo
done < input.txt
479デフォルトの名無しさん
垢版 |
2021/01/11(月) 17:59:11.32ID:Op1S7Ai1
やりたいことは、 >>477 さんの仰る通りです。
少ない情報の中、皆さん色々とありがとうございます。

明日以降試してみます、本当にありがとうございます。
2021/01/11(月) 18:31:58.04ID:RwOnRvzI
改行コードは、cr・lf・crlf の3種類あるのか?

固定長の末尾の改行の後には、何が入っている?
ヌル文字か?

例えば、100バイトの固定長で、内容が80バイトなら、
残りの20バイトには、何が入っている?

それとも、内容の80バイトの部分だけが、渡ってくるのか?
2021/01/11(月) 18:43:53.19ID:5PaUweSP
CR なんとかReturn
LF LineFeed
CRLF なんとかReturnLineFeed
2021/01/11(月) 20:39:57.39ID:F0XanEVZ
echo -en "abcde
a\ncde
a\rcde
a\r\nde
abcdef
a\ncdef
a\nc" |
sed -re ':b;y/\r\n/@@/;/.{5}/!{N;bb};'
2021/01/11(月) 21:38:18.11ID:6WXFekQD
>>471
CRLFは@2個に置換でいいんだよね?
CRLFを@1個に置換したら固定長ファイルとして
ファイル構造がおかしくなるわけだし
484デフォルトの名無しさん
垢版 |
2021/01/12(火) 17:48:10.93ID:fqpU06Zc
>>481 carriage
2021/01/14(木) 20:15:05.94ID:uu7IOQ/X
>>479
解決しましたか?
486デフォルトの名無しさん
垢版 |
2021/01/14(木) 20:19:20.00ID:eDcISF88
うざw
2021/01/15(金) 04:04:23.16ID:VxNLJyBo
先日質問させていただいた471です。
色々と試した結果、
perl -pe ‘s/¥r/@/g $INFILE | perl -pe ‘s/¥n/@/g > $TMPFILE

cat $TMPFILE | perl -e ‘while(read(STDIN, $tmp , 100)){print $tmp, “¥n”}’ > $OUTFILE

と言った具合に、改行を消してから固定長に区切って再度改行付与という形でうまくいきました!

皆さんに教えてもらった方法とは少し異なりますが、ここで質問しなければ検索ワードすら導き出せませんでした。
皆様には感謝してもしきれません。
ありがとうございました。
2021/02/02(火) 23:52:09.94ID:LuWw9dWt
[]で囲まれた単語は/\[.+\]+/gで見つかるけど
文中に複数[]で囲まれた範囲があるとうまくいかない
'['以降で一番近い']'にマッチさせたいんだがどうやるか教えて
2021/02/03(水) 00:24:53.98ID:SY/XoUH2
/\[[^\]]+\]+/g
2021/02/03(水) 01:04:29.59ID:UENZ/29T
>>489
ありがとう!
491デフォルトの名無しさん
垢版 |
2021/02/03(水) 18:02:08.71ID:CJ1qfEuB
英数字7桁[0-9a-zA-Z]の文字列から(改行を経て)先程とは異なる英数字7桁の文字列まで最短一致させる正規表現を書きたいのですがわかりません…

一つ目の7桁の英数字は変数fistに入ってます
new Reg(first +"(.*\n)*?"+ここから先がわかりません

どなたかよろしくお願いしますm(_ _)m
2021/02/03(水) 18:33:27.05ID:sadlF3mb
最短一致ということは行当たりが[0-9a-zA-Z]{7}ではなく別の文字列も含んでいそうな
つまり「0123abc\ndef4567」だけではなく「あいう0123abc\ndef4567かきく」もあるとか

見本出した方がいいのではないかな
2021/02/03(水) 18:41:43.46ID:q3Uucr84
とりあえずこんな感じであとは調整して
https://regex101.com/r/aLWgGd/1
2021/02/03(水) 19:08:15.83ID:CJ1qfEuB
>>492
すいません、簡単にするために設定をちょっと変えさせてください。
[0-9A-Z]
大雑把で大丈夫なんですが
あいうえお01ABC23あいうえお01abc23あいうえお01abc23  ←ここの01ABC23から
あいうえお01abc23あいうえお01ABC23あいうえお01abc23
あいうえお01abc23あいうえお01ABC23あいうえお01abc23
あいうえお01abc23あいうえお01DEF23あいうえお01abc23  ←ここの01DEF23まで切り抜きたい
あいうえお01abc23あいうえお01ABC23あいうえお01abc23
あいうえお01abc23あいうえお01HIJ23あいうえお01abc23

first = "01ABC23" が入ってるので、正規表現の最後を01DEF23にしたいのですが
[0-9A-Z]{7}から"01ABC23"だけを除外する方法がわからず困ってます。
2021/02/03(水) 19:12:17.69ID:CJ1qfEuB
>>494
訂正 「大文字と数字だけの7桁に設定変更させてください」って文言が抜けてました

>>493
すいません、その後の調整方法がわからないんです...
2021/02/03(水) 19:16:51.84ID:CJ1qfEuB
日本語がおかしくなってました

01ABC23〜01DEF23と切り抜きたいのですが、
first = "01ABC23"と入っているので、firstという変数を使いつつ[0-9A-Z]{7}から"01ABC23"だけを除外する方法がわからず困ってます。
497デフォルトの名無しさん
垢版 |
2021/02/03(水) 19:28:51.74ID:oLpXy7xv
>>496
"(?!" + first + ")[0-9A-Z]{7}"
2021/02/03(水) 19:41:14.94ID:CJ1qfEuB
>>497
ありがとうございますm(_ _)m
↓だと最短一致しないのですが、真ん中がおかしいのでしょうか?

let reg = new RegExp(first+"(.*\n)*?"+"(?!"+first+")[0-9A-Z]{7}");


改行を含めた最短一致は([\s\S]*?)か(.*\n)*?でできていたのですが、何故か最短にならず困ってます
2021/02/03(水) 19:49:30.28ID:CJ1qfEuB
>>498
真ん中とは+で繋げた"(.*\n)*?"の部分のことです
日本語すら怪しくてすみません
2021/02/03(水) 20:21:28.10ID:CJ1qfEuB
>>498
自己解決しました
スレ汚しすみませんでした
答えてくださった方々ありがとうございました
2021/02/04(木) 12:49:19.54ID:ynIf2rIG
[正規表現の[表現力[は]ネストに]勝てない]
※Perlの拡張とかは除く
2021/02/04(木) 15:31:37.02ID:7s9fZWEo
繰り返しの中で使う時、時間のかかる正規表現を避けたいが、結局試すのが一番
if x=="abc" と if x=~/^abc$/ の比較など(簡単すぎる例)

重要なシステム内で複雑な表現を使う場合テストも重要だが、
どうしてもおかしくなったら調べる式になってしまう
503デフォルトの名無しさん
垢版 |
2021/02/06(土) 14:47:08.00ID:s4jA/y9i
お願いします

●Regular Expressionの使用環境
VBScript

●検索か置換か?
置換

●説明
[hoge]をブラケットごと消したい
[[hoge]]の場合は残したい

●対象データ
abc[hoge]def
ghi[[hoge]]jkl

●希望する結果
abcdef
ghi[[hoge]]jkl
^^^^^^^

否定戻り読み否定先読みで試してみたのですが、ブラケット2回の場合にマッチせずブラケット1回の場合にのみマッチさせる方法が分かりませんでした
よろしくお願いします
2021/02/06(土) 15:07:35.62ID:bKRJeVsu
(?<!\[)\[hoge\](?!\])
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況