Regular Expression(正規表現) Part16at TECH
Regular Expression(正規表現) Part16 - 暇つぶし2ch1002:デフォルトの名無しさん
23/11/29 17:53:32.44 AoutXZD6.net
>>980
その理屈で言えば1回目で対象を消費しきってるから2回目が失敗するべき
1回目で消費しきっているにも関わらず2回目のゼロ幅マッチが成功するなら3回目のゼロ幅マッチだって成功するはず
そうならないのは対象を消費しきってるかどうかを確認せずにマッチを実施しており最終的には2回連続同一箇所でのゼロ幅マッチという失敗条件に合致してはじかれているから

1003:デフォルトの名無しさん
23/11/29 18:01:27.70 lw8jVmFR.net
確かにその通りやな、1度目で消費しきっとるはずや

1004:デフォルトの名無しさん
23/11/29 18:06:42.76 lw8jVmFR.net
分かったつもりになってるだけで全然分かってへんのがおるから
ちゃんと本か何かで学習したほうがええで、今までそういう学習をしてへんやろ

1005:デフォルトの名無しさん
23/11/29 20:04:08.42 x7bR/xfi.net
/(.*)$(.*)$((.*)$){999}/

1006:デフォルトの名無しさん
23/11/29 22:25:25.39 yvH2v9xT.net
>>985
えーと、つまり
・ゼロ幅は消費されない。パーマネントにゼロであり続ける。なので無限にマッチ可能
・無限にマッチ可能→同じゼロ幅に2回連続マッチしたからといってposを進めたり終了するわけではない
てことかな?
2回目以降が発生するかどうかは、、どうなんだろう
前回と完全に同じマッチになるときは試行せず終わる、っぽいけど

1007:デフォルトの名無しさん
23/12/01 02:37:28.94 07OBAnmr.net
sedの基本正規表現と拡張正規表現だとゼロ幅にマッチしないね
元はPerlのバグだったのが仕様ってことになったのでは?
$ printf 'abc' | sed 's/\(.*\)/[\1]/g'
[abc]
$ printf 'abc' | sed -E 's/(.*)/[\1]/g'
[abc]

1008:デフォルトの名無しさん
23/12/01 08:09:57.11 RWimeGTM.net
/^\w+|$/[$&]/
これが[abc][]になるのはおかしいと感じないよね?
前半が末尾まで食い尽くすから$はマッチしないはずだと思う?

1009:デフォルトの名無しさん
23/12/02 00:36:44.31 /f7jnFb0.net
挙動を仕様書で厳密に定義しているJavaScriptではこうなってた
URLリンク(tc39.es)

・1回目のマッチが "abc" すべてを消費する
・2回目のマッチは文字列末尾から始まるけど正規表現が.*なのでマッチングに成功する
 ただし空文字にマッチした場合、先へ進まなくなることを回避するために
 次回開始位置を一つ後ろへずらす処理が入る (12.c.iii.2以下)
 これにより3回目のマッチは文字列の終端+1という範囲外の位置から始まることになり失敗に終わる

1010:デフォルトの名無しさん
23/12/07 23:24:41.69 Ug9Hn2aN.net
KEEPのKはあるのにPが無い、何故?

1011:デフォルトの名無しさん
23/12/07 23:31:35.71 Ug9Hn2aN.net
(?<=uma)musu(?=me) 柿憎い
uma\Kmusu\Pme 柿安い

1012:デフォルトの名無しさん
23/12/10 09:57:52.47 8JqB6SG/.net
>>988
思うよ
+の後に$を置けば余計にそう思う

1013:デフォルトの名無しさん
23/12/10 13:04:54.79 t3u5G9tC.net
$は「後ろが終端である位置」の指定であって「最後まで全部」という意味ではない
なので.+$で文字列を末尾まで消費した後でも再度末尾のゼロ幅にマッチできることはバグでもなんでもない

1014:デフォルトの名無しさん
23/12/10 14:15:57.63 ayXeZXuA.net
実装上のバグではなく仕様バグだろって話をしてるのがわからないのか?

1015:デフォルトの名無しさん
23/12/10 15:43:26.80 e6Tz3fj/.net
.*と$でマッチするものが異なるのに.*と.*|$でマッチするものが変わらないのは明らかにバクってるな
正規表現のパターンを変えるだけでperlでは[abc][]にも[abc]にもできるのにsedではこのバグのせいで[abc][]には絶対にできなくなってる
$ printf 'abc' | sed -E 's/.*|$/[&]/g'
[abc]

1016:デフォルトの名無しさん
23/12/10 15:44:52.66 e6Tz3fj/.net
s/バク/バグ/

1017:デフォルトの名無しさん
23/12/13 11:48:29.08 wzNHEkEB.net
ただの仕様だよ、あほらし

次スレよろ

1018:デフォルトの名無しさん
23/12/16 09:00:59.04 KMxF6SWS.net
次スレ
スレリンク(tech板)

1019:デフォルトの名無しさん
23/12/16 09:36:31.90 pgUnJUCg.net
天地無用

1020:デフォルトの名無しさん
23/12/16 10:49:04.16 faoSWywL.net
>>998
ほめてつかわす

1021:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 772日 14時間 59分 3秒

1022:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch