Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part16
https://mevius.5ch.net/test/read.cgi/tech/1635936601/
次スレは>>980宜しく
テンプレ>>2以降
Regular Expression(正規表現) Part17
1デフォルトの名無しさん
2023/12/16(土) 08:59:20.50ID:uVHZ7e2j208デフォルトの名無しさん
2024/10/08(火) 22:03:57.17ID:XPh9YV+I >>207
1. まず日本語を整理する能力を身につけましょう
2. 次にテストケースを整理する能力を身につけましょう
3. そして1.と2.で身につけた能力を使ってChatGPTに問い合わせましょう
さすれば望む答えが楽に得られます
1. まず日本語を整理する能力を身につけましょう
2. 次にテストケースを整理する能力を身につけましょう
3. そして1.と2.で身につけた能力を使ってChatGPTに問い合わせましょう
さすれば望む答えが楽に得られます
209デフォルトの名無しさん
2024/10/09(水) 01:44:24.09ID:WkCTujRI ここは野良猫理論を数学的に証明するスレになりました
210デフォルトの名無しさん
2024/10/09(水) 02:26:53.03ID:LpRCWPua すごく読み難いし目的も読み取れない
終わってる
終わってる
211デフォルトの名無しさん
2024/10/09(水) 03:04:13.75ID:w53uZCE9 頑張って2回読んだけど何のアドバイスもできそうにない
212デフォルトの名無しさん
2024/10/09(水) 05:04:10.76ID:z5soGBkc Excel VBA 質問スレ Part81
とやらにいる障害者みたいだね
とやらにいる障害者みたいだね
213デフォルトの名無しさん
2024/10/09(水) 09:59:45.33ID:nVMNMgni214デフォルトの名無しさん
2024/10/09(水) 12:56:32.38ID:WkCTujRI とりあえずxenoをあぼーん登録しといた
215デフォルトの名無しさん
2024/10/10(木) 13:27:21.21ID:WHQFPCFe216デフォルトの名無しさん
2024/10/12(土) 15:23:11.12ID:gMUOKJHq ●Regular Expressionの使用環境
VS Code 1.94.2 の検索バー
●検索か置換か?
置換
●説明
htmlファイルを開いている。
href属性が .css で終わらない場合に属性値を空文字列へ置換したい。
href="[^"]+(?!\.css)"を検索したが .css で終わっていてもマッチしてしまう。
●対象データ
<a href="URL.css">link</a>
<a href="a.html">link</a>
<link rel="stylesheet" href="a.css">
<link rel="stylesheet" href="b">
●希望する結果
<a href="URL.css">link</a>
<a href="">link</a>
<link rel="stylesheet" href="a.css">
<link rel="stylesheet" href="">
VS Code 1.94.2 の検索バー
●検索か置換か?
置換
●説明
htmlファイルを開いている。
href属性が .css で終わらない場合に属性値を空文字列へ置換したい。
href="[^"]+(?!\.css)"を検索したが .css で終わっていてもマッチしてしまう。
●対象データ
<a href="URL.css">link</a>
<a href="a.html">link</a>
<link rel="stylesheet" href="a.css">
<link rel="stylesheet" href="b">
●希望する結果
<a href="URL.css">link</a>
<a href="">link</a>
<link rel="stylesheet" href="a.css">
<link rel="stylesheet" href="">
217>>216
2024/10/12(土) 15:33:12.91ID:gMUOKJHq 原理はよくわかりませんが自己解決しました
href="[^"]+(?<!\.css)"
href="[^"]+(?<!\.css)"
218デフォルトの名無しさん
2024/10/12(土) 16:13:01.24ID:qxhXc26A href="[^"]+(?!\.css)"
<a href="URL.css">link</a>で"[^"]+の最後の文字はs
つまりsの位置では.cssではないのでマッチする
<a href="URL.css">link</a>で"[^"]+の最後の文字はs
つまりsの位置では.cssではないのでマッチする
219デフォルトの名無しさん
2024/10/12(土) 16:15:48.04ID:qxhXc26A sの後ろ(つまり")の位置に訂正
220デフォルトの名無しさん
2024/10/12(土) 17:58:39.21ID:hwVWGPYm 正規表現関係ないけどhtmlタグ周りの操作は
できるだけDOM経由でやっておいたほうが楽で安全だと思う
htmlの書き方がみんな揃ってるとは限らないし
<div>href="foo"</div>とかlocation.href=“bar”にはマッチしないようにするとか
いろいろ考慮ポイントが増えてミスするリスクも高くなる
DOM経由でやっておけばその辺は安心
document.querySelectorAll("[href]:not([href$='.css'])").forEach(x=>x.setAttribute("href", ""))
できるだけDOM経由でやっておいたほうが楽で安全だと思う
htmlの書き方がみんな揃ってるとは限らないし
<div>href="foo"</div>とかlocation.href=“bar”にはマッチしないようにするとか
いろいろ考慮ポイントが増えてミスするリスクも高くなる
DOM経由でやっておけばその辺は安心
document.querySelectorAll("[href]:not([href$='.css'])").forEach(x=>x.setAttribute("href", ""))
221デフォルトの名無しさん
2024/10/13(日) 15:34:10.31ID:josLIOo8222デフォルトの名無しさん
2024/11/02(土) 23:35:42.52ID:5ILrPZJU 正規表現のオペレータの分類についての質問です
assertionにアンカーやバウンダリを含める分類はあまり見かけませんが何故でしょう?(例dotnet文書)
以下(多分regex界で著名な)参考サイトより引用
Assertions. The traditional regular expression metacharacters ^ and $ can be viewed as assertions about the text around them: ^ asserts that the previous character is a newline (or the beginning of the string), while $ asserts that the next character is a newline (or the end of the string). Perl added more assertions, like the word boundary \b, which asserts that the previous character is alphanumeric but the next is not, or vice versa.
https://swtch.com/%7Ersc/regexp/regexp1.html
確かにマッチに含まれないという意味ではよくassertionであると言われるlookback/aheadと同様です
何か含めないことで利点があるのでしょうか?
assertionにアンカーやバウンダリを含める分類はあまり見かけませんが何故でしょう?(例dotnet文書)
以下(多分regex界で著名な)参考サイトより引用
Assertions. The traditional regular expression metacharacters ^ and $ can be viewed as assertions about the text around them: ^ asserts that the previous character is a newline (or the beginning of the string), while $ asserts that the next character is a newline (or the end of the string). Perl added more assertions, like the word boundary \b, which asserts that the previous character is alphanumeric but the next is not, or vice versa.
https://swtch.com/%7Ersc/regexp/regexp1.html
確かにマッチに含まれないという意味ではよくassertionであると言われるlookback/aheadと同様です
何か含めないことで利点があるのでしょうか?
223デフォルトの名無しさん
2024/11/09(土) 12:53:50.15ID:k7Zpjetb これに答えられる人はここに数人いるかどうかなのでは
(私はもちろん答えられません)
勘で答えるなら先読み、後読みは後から出てきたものなので元からあった
^ $ \b とは別物扱いになった、とかですかね?すみません、分かりません
(私はもちろん答えられません)
勘で答えるなら先読み、後読みは後から出てきたものなので元からあった
^ $ \b とは別物扱いになった、とかですかね?すみません、分かりません
224デフォルトの名無しさん
2024/11/09(土) 21:56:49.21ID:f+X68XQj (ゼロ幅)アサーションには含まれる、(ルックアラウンド)アサーションには含まれない
でもルックアラウンドアサーションだけを指して単にアサーションと呼ぶなんてことがあるかな、大体何か修飾語がついてるよね?
単にアサーションと呼ばれるのはゼロ幅アサーションの方だと思う
実際参考サイトもそんな感じだろう知らんけど
でもルックアラウンドアサーションだけを指して単にアサーションと呼ぶなんてことがあるかな、大体何か修飾語がついてるよね?
単にアサーションと呼ばれるのはゼロ幅アサーションの方だと思う
実際参考サイトもそんな感じだろう知らんけど
225デフォルトの名無しさん
2024/11/19(火) 12:37:58.18ID:UdPT9kjC Google spreadsheetでREGEXREPLACE関数で置換するやり方を教えていただけないでしょうか
実行したい内容は以下の通りです。
●Regular Expressionの使用環境
Google spreadsheet
●検索か置換か?
置換
●説明
英文の各単語の先頭1文字以外をアスタリスクに置換したい
カンマとピリオドとハテナは置換しない
アポストロフィは置換する
●対象データ
Oh, it’s sunny today.
Do you understand?
●希望する結果
O*, i*** s**** t****.
D* y** u*********?
実行したい内容は以下の通りです。
●Regular Expressionの使用環境
Google spreadsheet
●検索か置換か?
置換
●説明
英文の各単語の先頭1文字以外をアスタリスクに置換したい
カンマとピリオドとハテナは置換しない
アポストロフィは置換する
●対象データ
Oh, it’s sunny today.
Do you understand?
●希望する結果
O*, i*** s**** t****.
D* y** u*********?
226デフォルトの名無しさん
2024/11/19(火) 13:15:50.46ID:qWVXBGcO 俺の知識の範囲では正規表現だけでは不可能
227デフォルトの名無しさん
2024/11/19(火) 13:28:40.67ID:TpNNC8ku その環境がわからんので一般的な場合として
/(?<=[^ ,.?\n\r])[^ ,.?\n\r]/*/g
/(?<=[a-z’'])[a-z’']/*/ig
/(?<=[^ ,.?\n\r])[^ ,.?\n\r]/*/g
/(?<=[a-z’'])[a-z’']/*/ig
228デフォルトの名無しさん
2024/11/19(火) 13:45:50.24ID:qWVXBGcO なるほど。後読を使えばいいのか
229デフォルトの名無しさん
2024/11/19(火) 14:33:47.46ID:UdPT9kjC 後読はこの関数では使えないようなのですが、関数ではなくて置換機能なら使えるようなので試してみます!
ありがとうございました!!
ありがとうございました!!
230デフォルトの名無しさん
2024/11/19(火) 15:02:42.11ID:TpNNC8ku The problem is the ’XXX’.
こういうのはあるのかな?
こういうのはあるのかな?
231デフォルトの名無しさん
2024/11/19(火) 15:19:15.00ID:TpNNC8ku >>228
正規表現のどの文法を使うかじゃなくて、どういう論理にするかを思いつくかどうかだから
(とんちクイズと一緒で発想力の問題)
なお230のようなケースがあるのならおそらく再起を使う必要がでてくると思う
正規表現のどの文法を使うかじゃなくて、どういう論理にするかを思いつくかどうかだから
(とんちクイズと一緒で発想力の問題)
なお230のようなケースがあるのならおそらく再起を使う必要がでてくると思う
232デフォルトの名無しさん
2024/11/19(火) 15:56:13.16ID:UdPT9kjC >>230
これは想定していなかったですが今回はなさそうです
これは想定していなかったですが今回はなさそうです
233デフォルトの名無しさん
2024/11/19(火) 17:34:15.15ID:G+8Uvgpo Apps Script使うのがシンプルなこともある
234デフォルトの名無しさん
2024/11/19(火) 23:06:51.29ID:TpNNC8ku /(?<=[a-z]|[a-z]')[a-z]|(?<=[a-z])'(?=[a-z])/*/ig
(アポストロフィは半角のみにしてる)
This is the 'Tom's Home'.
→ T*** i* t** 'T**** H***'.
無理ーー
'Rock'n'Roll' is "Rock 'n' Roll". → 'R**********' i* "R*** 'n' R***".
'' is NULL strings. → '' is NULL strings.
(アポストロフィは半角のみにしてる)
This is the 'Tom's Home'.
→ T*** i* t** 'T**** H***'.
無理ーー
'Rock'n'Roll' is "Rock 'n' Roll". → 'R**********' i* "R*** 'n' R***".
'' is NULL strings. → '' is NULL strings.
235デフォルトの名無しさん
2024/11/20(水) 17:07:45.94ID:vf/ffllo regexpは数学(キリっ
236デフォルトの名無しさん
2024/11/20(水) 17:38:18.40ID:ibyj9elY ウザっ
237デフォルトの名無しさん
2024/12/12(木) 23:55:43.32ID:9bmybcd/ 暫く使わないとすぐ忘れてしまう
低スキルだから使う頻度が少なくて記憶が定着しない
低スキルだから使う頻度が少なくて記憶が定着しない
238デフォルトの名無しさん
2024/12/13(金) 00:12:32.38ID:EgfV0Bor わかる
特に(?!これ系一切覚えてない)
特に(?!これ系一切覚えてない)
239デフォルトの名無しさん
2024/12/13(金) 13:01:50.92ID:hybzdr+3 =^^= こんな演算子をどこかの記事で見た記憶はあるけど意味は忘れた
240デフォルトの名無しさん
2024/12/13(金) 13:19:30.73ID:Zywldz4i ∧,,∧
(=^v^) にょほほー
/ l
(OuuO
(=^v^) にょほほー
/ l
(OuuO
241デフォルトの名無しさん
2024/12/19(木) 16:02:37.82ID:1szj+7uv ●Regular Expressionの使用環境
テキストエディタのMeryや、テキストエディタのgPadの置換
●検索か置換か?
検索
●説明
英文中のスペース以外の、他のスペースを削除したいです。
●対象データ
平和 戦争
AA XVA ZZ
昭和 平成 令和
NIHON BUNKA
経済 学部
Ishiba Naikaku
●希望する結果
平和戦争
AA XVA ZZ
昭和平成令和
NIHON BUNKA
経済学部
Ishiba Naikaku
※いま現在はネットを探してやっと見つけた
(?<![a-zA-Z])\s|\s(?![a-zA-Z])
を使ってます。これは連続スペースやTabにも対応してるのが良い点と思います。
ただ、全角スペースは削除出来ませんし、改行まで削除されて1行テキスト文に
なるという短所があり、また手動で改行しなくてはならず非常に手間です。
全角スペースはまだ良いとして改行削除がされないように改善できませんでしょうか?
よろしくお願いします。
テキストエディタのMeryや、テキストエディタのgPadの置換
●検索か置換か?
検索
●説明
英文中のスペース以外の、他のスペースを削除したいです。
●対象データ
平和 戦争
AA XVA ZZ
昭和 平成 令和
NIHON BUNKA
経済 学部
Ishiba Naikaku
●希望する結果
平和戦争
AA XVA ZZ
昭和平成令和
NIHON BUNKA
経済学部
Ishiba Naikaku
※いま現在はネットを探してやっと見つけた
(?<![a-zA-Z])\s|\s(?![a-zA-Z])
を使ってます。これは連続スペースやTabにも対応してるのが良い点と思います。
ただ、全角スペースは削除出来ませんし、改行まで削除されて1行テキスト文に
なるという短所があり、また手動で改行しなくてはならず非常に手間です。
全角スペースはまだ良いとして改行削除がされないように改善できませんでしょうか?
よろしくお願いします。
242デフォルトの名無しさん
2024/12/19(木) 16:06:40.57ID:wZwgXxbf なかなかの丸投げだな
¥sを[ \t ]
¥sを[ \t ]
243デフォルトの名無しさん
2024/12/19(木) 17:08:28.91ID:1szj+7uv244デフォルトの名無しさん
2024/12/20(金) 20:07:37.02ID:7538eGNC すげー半年がかりの疑問を瞬殺か
やっぱ詳しい人に聞いておくものだな
やっぱ詳しい人に聞いておくものだな
245デフォルトの名無しさん
2024/12/21(土) 01:36:35.41ID:lQ0nYrFo 半年同じ問題に取り組める根気は素晴らしいが初心者は効率が悪いね
Googleとかは20分だか30分だか手が止まったら質問しろって企業文化らしい
Googleとかは20分だか30分だか手が止まったら質問しろって企業文化らしい
246デフォルトの名無しさん
2024/12/22(日) 15:36:39.77ID:8OMG/th9 メモ
Meryで\sを全角スペースにマッチさせるには(?u)\sかFindOnig=1
Meryで\sを全角スペースにマッチさせるには(?u)\sかFindOnig=1
247デフォルトの名無しさん
2024/12/23(月) 12:51:43.05ID:hOdCdrxj 半年あったら正規表現覚えたほうが早いな、Meryクリスマス
248デフォルトの名無しさん
2024/12/23(月) 12:59:50.83ID:hOdCdrxj I have a pen. I have an apple.
249デフォルトの名無しさん
2024/12/31(火) 20:44:10.06ID:Thw2Z7nN (?<=This year)(?=Next year)
250デフォルトの名無しさん
2025/01/04(土) 18:21:54.49ID:YsNNcli5 <title> を
\<title\> って書かないとエラーになるケースってあるの?
\<title\> って書かないとエラーになるケースってあるの?
251デフォルトの名無しさん
2025/01/04(土) 19:03:21.90ID:0KLOcGyc GnuRegexとGrepでは\<と\>は特別な意味を持つ、それぞれ単語の先頭、単語の末尾にマッチする
だから<title>にマッチさせたいのではなくtitleにマッチさせたいのかも
\<と\>で囲えばbigtitleやtitleholderにはマッチしなくなる
だから<title>にマッチさせたいのではなくtitleにマッチさせたいのかも
\<と\>で囲えばbigtitleやtitleholderにはマッチしなくなる
252デフォルトの名無しさん
2025/01/04(土) 20:47:05.52ID:a+K50MRq Gnuって書いたらヌーになるがな
253デフォルトの名無しさん
2025/01/04(土) 21:43:10.75ID:12P97q6K メタ文字 \b が使えない環境ってことなんだろうか?
254デフォルトの名無しさん
2025/01/04(土) 21:56:58.81ID:0KLOcGyc255デフォルトの名無しさん
2025/01/04(土) 22:07:44.40ID:0KLOcGyc256デフォルトの名無しさん
2025/04/05(土) 13:05:55.46ID:/X2GFnPw GeminiにChatでやりたいこと入力したらずばりの正規表現回答してくれんのすごすぎて草
そんで最強のGrep検索・置換ツールのVScodeにその正規表現をコピペするだけの簡単なお仕事
マジで更新もされず陳腐化したクソ使い難い正規表現アプリやサービスがすべて駆逐されんの納得でクソワロタ
そんで最強のGrep検索・置換ツールのVScodeにその正規表現をコピペするだけの簡単なお仕事
マジで更新もされず陳腐化したクソ使い難い正規表現アプリやサービスがすべて駆逐されんの納得でクソワロタ
257デフォルトの名無しさん
2025/04/05(土) 14:35:59.22ID:dD+UMa0w VSCodeやのにCopilotつかわんのなんでなんw
置換はperl -i -peが手軽にコードも介在できて未だに最強
置換はperl -i -peが手軽にコードも介在できて未だに最強
258デフォルトの名無しさん
2025/04/05(土) 17:01:54.69ID:yzm+sG/V 文章でミジンコだとわかるだろほっといてやれ
259デフォルトの名無しさん
2025/04/07(月) 00:01:48.06ID:HqNk85Dr 一方、ロシアは秀丸エディタを使った
260デフォルトの名無しさん
2025/04/07(月) 18:30:32.29ID:+glSnyRi 米国がEmEditorを使うところから物語は始まるのか
261デフォルトの名無しさん
2025/05/07(水) 13:34:42.62ID:VK/GbxYn 後方参照を初めて使ってみた
なるほど便利
後方を参照するのかと思っていたが後方で参照すると言う意味だった
なるほど便利
後方を参照するのかと思っていたが後方で参照すると言う意味だった
262デフォルトの名無しさん
2025/05/08(木) 20:10:04.49ID:a95yfZhU ぎょぎょぎょ?参照うお
263デフォルトの名無しさん
2025/05/08(木) 20:37:02.88ID:NyjQsc8w ぎょえーー
264デフォルトの名無しさん
2025/06/10(火) 10:10:19.59ID:JUI3rKzN 置換……指定した文字を置換します。
@AA@A@.TXTの"@"を"Q"に置換(場所の指定無し)
QAAQAQ.TXT - すべて置換される
@AA@A@.TXTの"@"を"Q"に置換(場所を指定)
前から1文字目 : QAA@A@.TXT - 前から1文字目のみ置換
前から4文字目 : @AAQA@.TXT - 前から4文字目のみ置換
後から1文字目 : @AA@AQ.TXT - 後から1文字目のみ置換
削除……指定した場所にある文字を削除します。
ABBAA.TXT、ACCAA.TXTの前から2文字目から右に2文字を削除
ABBAAB.TXT → AAAB.TXT
ACCAAC.TXT → AAAC.TXT
@AA@A@.TXTの"@"を"Q"に置換(場所の指定無し)
QAAQAQ.TXT - すべて置換される
@AA@A@.TXTの"@"を"Q"に置換(場所を指定)
前から1文字目 : QAA@A@.TXT - 前から1文字目のみ置換
前から4文字目 : @AAQA@.TXT - 前から4文字目のみ置換
後から1文字目 : @AA@AQ.TXT - 後から1文字目のみ置換
削除……指定した場所にある文字を削除します。
ABBAA.TXT、ACCAA.TXTの前から2文字目から右に2文字を削除
ABBAAB.TXT → AAAB.TXT
ACCAAC.TXT → AAAC.TXT
265デフォルトの名無しさん
2025/07/13(日) 21:04:57.49ID:Dpndt2SK iOSです
このスレで訊いて良いのかわかりませんが
Instagramの画像はその投稿のURL、例えばこれ↓
https://www.instagram.com/p/DL6O8f3zfb-/
の末尾に「media/?size=l&.jpg」を加えると投稿の一枚目の画像URLになります
↓
https://www.instagram.com/p/DL6O8f3zfb-/media/?size=l&.jpg
しかし、2枚目以降の画像URLがわかりません
「media/?size=l&.jpg」をいじって2枚目以降の画像URLが作れませんでしょうか
ご教授お願いします
このスレで訊いて良いのかわかりませんが
Instagramの画像はその投稿のURL、例えばこれ↓
https://www.instagram.com/p/DL6O8f3zfb-/
の末尾に「media/?size=l&.jpg」を加えると投稿の一枚目の画像URLになります
↓
https://www.instagram.com/p/DL6O8f3zfb-/media/?size=l&.jpg
しかし、2枚目以降の画像URLがわかりません
「media/?size=l&.jpg」をいじって2枚目以降の画像URLが作れませんでしょうか
ご教授お願いします
266デフォルトの名無しさん
2025/07/13(日) 21:12:41.07ID:SOWPf8Mn 正規表現関係ねーw
267デフォルトの名無しさん
2025/07/13(日) 21:19:50.98ID:Dpndt2SK どこで訊いたら良いのかわからず、パソコン詳しい人が多そうなここで質問させて頂きました
268デフォルトの名無しさん
2025/07/14(月) 01:14:36.64ID:KR/EmCR1 和んだ
269デフォルトの名無しさん
2025/07/14(月) 02:28:52.50ID:yh4CMksV PC詳しい人が多そうなスレでそういう質問を受け付けていると
馬鹿が多そうなスレに成り下がると気が付かないものかね
馬鹿が多そうなスレに成り下がると気が付かないものかね
270デフォルトの名無しさん
2025/07/25(金) 05:51:04.25ID:3r8TzWYu >>264
sed の出番か?
sed の出番か?
271デフォルトの名無しさん
2025/08/09(土) 13:09:26.08ID:AY2Xi2Yg SNSやWeb検索もたいてい正規表現対応してるからプログラミング以外で活用できる場面が増えてなんか嬉しい
272デフォルトの名無しさん
2025/08/14(木) 17:46:16.07ID:ll+c+ksk そんなに対応してるのある?
273デフォルトの名無しさん
2025/09/29(月) 18:28:57.47ID:omFFHDum ^[^:]+://+([^:/]+\.)?
これの//+部分って//だけで問題ありますか?
これの//+部分って//だけで問題ありますか?
274デフォルトの名無しさん
2025/09/29(月) 19:15:27.09ID:QGaGSVZY >>273
その正規表現の目的は理解できてるの?
その正規表現の目的は理解できてるの?
275デフォルトの名無しさん
2025/09/29(月) 21:45:19.64ID:SNsW5d6C276デフォルトの名無しさん
2025/09/29(月) 22:25:44.67ID:RjmgsX7I277デフォルトの名無しさん
2025/09/29(月) 22:54:22.13ID:FkLCZ8/e 何にマッチさせたいかによるわな
278デフォルトの名無しさん
2025/10/25(土) 12:46:17.09ID:BjPJz/dc 【悲報】4/24に鬼車がgithubで開発終了したのに続いて
鬼雲(bregonig.dll)の公式サイトが9/30で閉鎖
http://k-takata.o.oo7.jp/
https://x.com/k_takata/status/1970461557374230654
鬼雲(bregonig.dll)の公式サイトが9/30で閉鎖
http://k-takata.o.oo7.jp/
https://x.com/k_takata/status/1970461557374230654
279デフォルトの名無しさん
2025/10/28(火) 01:47:57.16ID:WdB2Psfo 鬼車はJavaScriptの仕様に寄せろと細かいことまで言われて
嫌気がさしたのかなという印象だけど真相は作者のみぞ知るか
ただ最近はDFAキャッシュを使うエンジンの台頭で
これとかboost.regexが速いとされた時代はとうに終わってるんで
マルチバイト対応を必要とする人以外はあまり影響ない気もする
嫌気がさしたのかなという印象だけど真相は作者のみぞ知るか
ただ最近はDFAキャッシュを使うエンジンの台頭で
これとかboost.regexが速いとされた時代はとうに終わってるんで
マルチバイト対応を必要とする人以外はあまり影響ない気もする
280デフォルトの名無しさん
2025/11/02(日) 19:07:30.81ID:vGsY1NrW 「正規表現技術入門」を読むと、GNU grep ではマッチング途中で必要になった部分だけ
オンデマンドで DFA を構成していく On-the-Fly 構成法を使っている、と書かれてるけど
どのレベルから On-the-Fly してるんでしょ ?
部分集合構成法で NFA を DFA に変換する所からなのか、もっと前のε-遷移除去からなのか
あるいはさらに前の正規表現をパースして NFA を作る所も On-the-Fly なんですかね ?
GNU grep のソース見ろと言われそうだけど
オンデマンドで DFA を構成していく On-the-Fly 構成法を使っている、と書かれてるけど
どのレベルから On-the-Fly してるんでしょ ?
部分集合構成法で NFA を DFA に変換する所からなのか、もっと前のε-遷移除去からなのか
あるいはさらに前の正規表現をパースして NFA を作る所も On-the-Fly なんですかね ?
GNU grep のソース見ろと言われそうだけど
281デフォルトの名無しさん
2025/11/02(日) 20:01:30.27ID:JoUIYtII 正規表現の枠を超える後方参照(\1)とかで使ってそう
あれが絡むと事前にDFA作れない
あれが絡むと事前にDFA作れない
282デフォルトの名無しさん
2025/11/02(日) 20:13:48.87ID:JoUIYtII 正則言語の枠か
用語がちょっと怪しい
用語がちょっと怪しい
283デフォルトの名無しさん
2025/11/03(月) 19:15:39.49ID:6hs01YZr >>280
自己レス。AI に聞いたら
| GNU grepでは、DFA の生成に On-the-Fly(実行時逐次的)な手法を採用していますが、
| それは基本的に部分集合構成法を逐次的に行うことを意味します。
| ε遷移の除去も、このプロセスの中で実質的に On-the-Fly で行われます。
とのことでした。やっぱε-除去も On-the-Fly なのか、ムズいなー
>>281
GNU grep の On-the-Fly 法は、到達しない状態ノードを作らないようにすることで
省メモリ化と高速化が目的なので、DFA の構造自体が動的に変わるものではないと思ってました。
で、言われるように後方参照は正規言語のクラスを超えてるので、DFA 型エンジンでは
普通は実現出来ないのだけど、「正規表現技術入門」では
| GNU grep は基本的に DFA 型ですが、部分的(後方参照への対応のためなど)に一部
| VM 型のアプローチもとっています。
とかさらっと書いてあるだけで、具体的な記述はないんすよね (やっぱ入門書だな)。
でも言われてみれば、On-the-Fly 的に動的に DFA を構成して行けば、それで後方参照も
実現出来そうな気がしてきた。バックトラックとか面倒そうだけど一考の価値はあるかも
GNU grep もそうやって実装してる ? かどうかは分からないけど
自己レス。AI に聞いたら
| GNU grepでは、DFA の生成に On-the-Fly(実行時逐次的)な手法を採用していますが、
| それは基本的に部分集合構成法を逐次的に行うことを意味します。
| ε遷移の除去も、このプロセスの中で実質的に On-the-Fly で行われます。
とのことでした。やっぱε-除去も On-the-Fly なのか、ムズいなー
>>281
GNU grep の On-the-Fly 法は、到達しない状態ノードを作らないようにすることで
省メモリ化と高速化が目的なので、DFA の構造自体が動的に変わるものではないと思ってました。
で、言われるように後方参照は正規言語のクラスを超えてるので、DFA 型エンジンでは
普通は実現出来ないのだけど、「正規表現技術入門」では
| GNU grep は基本的に DFA 型ですが、部分的(後方参照への対応のためなど)に一部
| VM 型のアプローチもとっています。
とかさらっと書いてあるだけで、具体的な記述はないんすよね (やっぱ入門書だな)。
でも言われてみれば、On-the-Fly 的に動的に DFA を構成して行けば、それで後方参照も
実現出来そうな気がしてきた。バックトラックとか面倒そうだけど一考の価値はあるかも
GNU grep もそうやって実装してる ? かどうかは分からないけど
284デフォルトの名無しさん
2025/11/05(水) 01:01:25.63ID:hq1L/1I1 それわかったらなんか良いことあるの(クルクルパー
285デフォルトの名無しさん
2025/11/07(金) 00:31:17.29ID:Ua2fzQVD NFA使わずに正規表現から直接DFAを構成する方法がDragon Bookに書いてあるけど
この書籍は今もDragon Bookで通じるのかな
もう古文書扱いされてそう
この書籍は今もDragon Bookで通じるのかな
もう古文書扱いされてそう
286デフォルトの名無しさん
2025/11/07(金) 17:38:51.77ID:2v77MqUc287デフォルトの名無しさん
2025/11/07(金) 18:36:08.56ID:Ua2fzQVD Dragon Bookでpdf検索すると大学のサイトとかで英語版が引っ掛かるけど旧版はセーフなのかな
DFAの構成法は第2版だと3.9節
少なくとも3章は最初から読んだ方がいいと思う
コンパイラに興味ないなら全部読む必要はない
DFAの構成法は第2版だと3.9節
少なくとも3章は最初から読んだ方がいいと思う
コンパイラに興味ないなら全部読む必要はない
288デフォルトの名無しさん
2025/11/07(金) 19:00:36.04ID:Ua2fzQVD そういえば正規表現自体の解析で4章前半のTop-Down Parsingくらいまでは役に立つかも
289デフォルトの名無しさん
2025/11/07(金) 20:27:12.90ID:2v77MqUc >>287
ありがとうございます。旧版 (日本語訳) はT、U共にさっき中古をポチりました
届くのは来週末だけど、図書館に第二版があるようなので明日行ってきます
コンパイラに興味ない、とまでは言わないけど、果たしてそこまで手を広げられるものなのか心許ないす
ありがとうございます。旧版 (日本語訳) はT、U共にさっき中古をポチりました
届くのは来週末だけど、図書館に第二版があるようなので明日行ってきます
コンパイラに興味ない、とまでは言わないけど、果たしてそこまで手を広げられるものなのか心許ないす
290デフォルトの名無しさん
2025/11/11(火) 08:03:53.83ID:TgiPYl91 こういう方に最新版をポンと出す制度にならんもんかな
291デフォルトの名無しさん
2025/11/11(火) 14:34:01.30ID:XyI6oP+4 複数の正規表現を使い分けられる記法があるといい
292デフォルトの名無しさん
2025/11/20(木) 00:34:25.20ID:mbRrNt6G DragonBook (第2版) の第3章まで読んだら、>>280 に書いた ε-遷移についての最初の疑問も氷解してしまったので、
一応伏線回収しておきます
「正規表現技術入門」では、ε-遷移を除去した後で部分集合構成法を行う、という流れで記述されていたので、
部分集合構成法を行うには前もって ε-遷移を除去しなければならない、と思い込んでいたのだけど、
その必要は全くなかったのでした
部分集合構成法の処理の中で一つ部分集合が得られたら、その集合の ε-閉包を取って
(その集合に そこから ε-遷移する状態を全て加えて)、それを DFA の 1 状態とすればよいだけなのでした
>>283 に書いた AI の回答が何となく歯切れが悪かった理由もこれで納得出来たわけで、
何でこんな簡単なことを思い付かなかったのか、我ながらアホでしたね
「正規表現技術入門」は章ごとに執筆者が違っていて、VM 型エンジンの章は鬼雲の作者が直々に書いていて説得力があるのですが、
DFA 型エンジンの章、とくにこの ε-遷移あたりの記述は今一つな感じです (エラそうに言ってますが)
--
ところで DragonBook 3.9 節の「正規表現から直接 DFA を導くやり方」も読みました
シンプソン構成法を経由せず、構文木から DFA を導くのはスゲーと思ったのですが
followpos() の張るダイアグラムは一種の NFA 的なものなので、それを DFA に変換する時には
やはり部分集合構成法と同じ手法を使うわけですね
とは言え ε-遷移が存在しないので扱う状態数もずっと少なくて済むはずなので、
これを使って On-the-Fly 法を実装して行きたいと思ってます
何にせよ、DragonBook を読めと言ってくれた >>285 さんには感謝しかないです
ありがとうございました
一応伏線回収しておきます
「正規表現技術入門」では、ε-遷移を除去した後で部分集合構成法を行う、という流れで記述されていたので、
部分集合構成法を行うには前もって ε-遷移を除去しなければならない、と思い込んでいたのだけど、
その必要は全くなかったのでした
部分集合構成法の処理の中で一つ部分集合が得られたら、その集合の ε-閉包を取って
(その集合に そこから ε-遷移する状態を全て加えて)、それを DFA の 1 状態とすればよいだけなのでした
>>283 に書いた AI の回答が何となく歯切れが悪かった理由もこれで納得出来たわけで、
何でこんな簡単なことを思い付かなかったのか、我ながらアホでしたね
「正規表現技術入門」は章ごとに執筆者が違っていて、VM 型エンジンの章は鬼雲の作者が直々に書いていて説得力があるのですが、
DFA 型エンジンの章、とくにこの ε-遷移あたりの記述は今一つな感じです (エラそうに言ってますが)
--
ところで DragonBook 3.9 節の「正規表現から直接 DFA を導くやり方」も読みました
シンプソン構成法を経由せず、構文木から DFA を導くのはスゲーと思ったのですが
followpos() の張るダイアグラムは一種の NFA 的なものなので、それを DFA に変換する時には
やはり部分集合構成法と同じ手法を使うわけですね
とは言え ε-遷移が存在しないので扱う状態数もずっと少なくて済むはずなので、
これを使って On-the-Fly 法を実装して行きたいと思ってます
何にせよ、DragonBook を読めと言ってくれた >>285 さんには感謝しかないです
ありがとうございました
293デフォルトの名無しさん
2025/11/20(木) 01:53:23.80ID:MRBYucy1 ●Regular Expressionの使用環境
Java1.5
●検索か置換か?
検索
●説明
http://とhttps://があるもしくはない場合のドメインとサブドメインを検索したい
自分で考えた以下の正規表現だと、.から始まる不正なURLまで一致してしまいダメでした
^(https?://)?(.*\.)?doubleclick.net
●対象データ
#一致させたいものは以下
http://doubleclick.net/pagead/
https://doubleclick.net/pagead/
http://g.doubleclick.net/pagead/
https://g.doubleclick.net/pagead/
http://googleads.g.doubleclick.net/pagead/
https://googleads.g.doubleclick.net/pagead/
doubleclick.net/pagead/
g.doubleclick.net/pagead/
googleads.g.doubleclick.net/pagead/
#一致させたくないものは以下
http://.doubleclick.net/pagead/
https://.doubleclick.net/pagead/
http://.g.doubleclick.net/pagead/
https://.g.doubleclick.net/pagead/
http://.a.g.doubleclick.net/pagead/
https://.a.g.doubleclick.net/pagead/
.doubleclick.net/pagead/
.g.doubleclick.net/pagead/
0doubleclick.net/pagead/
http://0doubleclick.net/pagead/
https://0doubleclick.net/pagead/
Java1.5
●検索か置換か?
検索
●説明
http://とhttps://があるもしくはない場合のドメインとサブドメインを検索したい
自分で考えた以下の正規表現だと、.から始まる不正なURLまで一致してしまいダメでした
^(https?://)?(.*\.)?doubleclick.net
●対象データ
#一致させたいものは以下
http://doubleclick.net/pagead/
https://doubleclick.net/pagead/
http://g.doubleclick.net/pagead/
https://g.doubleclick.net/pagead/
http://googleads.g.doubleclick.net/pagead/
https://googleads.g.doubleclick.net/pagead/
doubleclick.net/pagead/
g.doubleclick.net/pagead/
googleads.g.doubleclick.net/pagead/
#一致させたくないものは以下
http://.doubleclick.net/pagead/
https://.doubleclick.net/pagead/
http://.g.doubleclick.net/pagead/
https://.g.doubleclick.net/pagead/
http://.a.g.doubleclick.net/pagead/
https://.a.g.doubleclick.net/pagead/
.doubleclick.net/pagead/
.g.doubleclick.net/pagead/
0doubleclick.net/pagead/
http://0doubleclick.net/pagead/
https://0doubleclick.net/pagead/
294デフォルトの名無しさん
2025/11/20(木) 09:40:15.39ID:Mz3QCXK6 その処理系で文字クラスが使えるなら (.*\.)? を ([^.0].*\.)? とすればイケるハズ
295293
2025/11/20(木) 15:17:38.43ID:MRBYucy1 >>294
レスありがとうございます
以下の2行は一致しなくなりましたが、
.doubleclick.net/pagead/
.g.doubleclick.net/pagead/
以下の6行は一致してしまいました
http://.doubleclick.net/pagead/
https://.doubleclick.net/pagead/
http://.g.doubleclick.net/pagead/
https://.g.doubleclick.net/pagead/
http://.a.g.doubleclick.net/pagead/
https://.a.g.doubleclick.net/pagead/
レスありがとうございます
以下の2行は一致しなくなりましたが、
.doubleclick.net/pagead/
.g.doubleclick.net/pagead/
以下の6行は一致してしまいました
http://.doubleclick.net/pagead/
https://.doubleclick.net/pagead/
http://.g.doubleclick.net/pagead/
https://.g.doubleclick.net/pagead/
http://.a.g.doubleclick.net/pagead/
https://.a.g.doubleclick.net/pagead/
296デフォルトの名無しさん
2025/11/20(木) 16:30:51.92ID:0pUMlwmF "doubleclick.net"は決め打ちでいいのかな
Pattern p = Pattern.compile("^(?:https?://)?((?:[^./?#]+\\.)*doubleclick\\.net)(?=[:/]|$)");
マッチした後の処理は分からんけど動作例
https://ideone.com/3WFyH6
Pattern p = Pattern.compile("^(?:https?://)?((?:[^./?#]+\\.)*doubleclick\\.net)(?=[:/]|$)");
マッチした後の処理は分からんけど動作例
https://ideone.com/3WFyH6
297293
2025/11/20(木) 21:15:50.67ID:MRBYucy1 >>296
レスありがとうございます
せっかく教えていただいたのにすみません、JavaではなくてJavaScriptでしたので動作しませんでした
チェッカー
https://www-creators.com/tool/regex-checker
レスありがとうございます
せっかく教えていただいたのにすみません、JavaではなくてJavaScriptでしたので動作しませんでした
チェッカー
https://www-creators.com/tool/regex-checker
298デフォルトの名無しさん
2025/11/20(木) 21:32:25.61ID:0pUMlwmF 今時分にJava1.5でおかしいと思ったけどスルーしてしまった
文字列でエスケープしてる\\を\に直せば使えるはず
ついでに?と#を先読みに追加した(多分いらない)
^(?:https?://)?((?:[^./?#]+\.)*doubleclick\.net)(?=[:/?#]|$)
文字列でエスケープしてる\\を\に直せば使えるはず
ついでに?と#を先読みに追加した(多分いらない)
^(?:https?://)?((?:[^./?#]+\.)*doubleclick\.net)(?=[:/?#]|$)
299293
2025/11/20(木) 21:52:35.87ID:MRBYucy1300デフォルトの名無しさん
2025/11/20(木) 23:34:16.70ID:mbRrNt6Gレスを投稿する
