Forums: 一般話題(質疑・要望等) (Thread #40754)

無欲の正規表現について (2019-05-13 13:49 by miso #82985)

例えば
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident
, sunt in culpa qui officia deserunt mollit anim id est laborum.
という文字列があって
^.*?e
でマッチさせると1行目の場合Loreまでがマッチされます。
ところが置換をさせると
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
が置換対象になります。

これは既知の問題でしょうか?

Reply to #82985×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 無欲の正規表現について (2019-05-15 00:49 by berryzplus #82991)

Reply To Message #82985
> 例えば
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
> et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
> nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
> esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident
> , sunt in culpa qui officia deserunt mollit anim id est laborum.
> という文字列があって
> ^.*?e
> でマッチさせると1行目の場合Loreまでがマッチされます。
> ところが置換をさせると
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
> が置換対象になります。
>
> これは既知の問題でしょうか?

少なくともぼくは知らない事象です。
手元にあったバージョンでやってみたところ、再現しませんでした。

置換パターン
s/^.*?e/_/g

正規表現置換後のテキスト
_m ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
_t dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
_x ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
_sse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident
_serunt mollit anim id est laborum.

テストしたバージョン
サクラエディタ v2.4.0.1558 32bit dev
(GitHash 18b5ad07436adf44f831cb21ce543f8bd8e4b9c9)
(GitURL https://github.com/sakura-editor/sakura.git)
bregonig.dll Ver.4.12 with onigumo 6.1.2

Reply to #82985

Reply to #82991×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 無欲の正規表現について (2019-05-16 02:53 by AC #83002)

「「すべて置換」は置換の繰返し」のチェックを入れて空文字列に置換するとそうなりますが、その場合は想定通りの結果です。いかがでしょうか。
Reply to #82985

Reply to #83002×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 無欲の正規表現について (2019-05-17 09:04 by miso #83006)

メッセージ #83002 への返信
> 「「すべて置換」は置換の繰返し」のチェックを入れて空文字列に置換するとそうなりますが、その場合は想定通りの結果です。いかがでしょうか。

おっしゃる通りでした。
「「すべて置換」は置換の繰返し」のチェックを外して置換すると狙った結果が出力されました。
本当にありがとうございます。
Reply to #83002

Reply to #83006×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 無欲の正規表現について (2019-05-17 16:07 by AC #83010)

必要ないかもしれませんが解説をします。

「すべて置換」は置換の繰返しがオフの場合を先に説明しますと、これは行全体のマッチを一度に検索して、一度に置換します。それに対して「すべて置換」は置換の繰返しがオンの場合は、文字通り「1つ検索」「1つ置換」を繰り返すことで行全体、ドキュメント全体を処理します。

もうおわかりかと思いますが、1つ目の置換が終わった後の2回目の検索でも ^ が文字列の先頭にマッチすることで、もともとは行頭でなかった部分までが置換の対象になっていました。
Reply to #83002

Reply to #83010×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login