正規表現を用いた置換時のタグについてNo.34476
ktyu さん 15/09/22 22:52
 
文字列: abcdefg
正規表現: (abcd(efg))
置換文字: \2

で置換を実行した場合
期待している結果は
efg
となる事ですが実際には文字列が全て消えてしまいます

秀丸エディタではタグの中のタグというのは指定できないのでしょうか?

[ ]
RE:34476 正規表現を用いた置換時のタグにNo.34477
h-tom さん 15/09/22 23:53
 

h-tom です。

>秀丸エディタではタグの中のタグというのは指定できないのでしょうか?
秀丸エディタというか、正規表現処理を行っている「hmjre.dll」の制限(仕様)
になります。(秀丸エディタ独自のタグ付き正規表現との互換性)

秀丸のヘルプに解説があるので参照してください。
「検索系コマンド」− 「正規表現」」−「一般的正規表現互換のタグ付き正規表現」

「タグの対象となるのはあくまで一番ネストの浅いカッコだけなので」
の辺りから説明があります。

「hmjre.dll」の制限(仕様)なので、正規表現用DLLを変更すれば、期待している
結果にはなりますが、hmjre.dllと使用できる正規表現や制限の違いなどがあり
ます。

正規表現の書き方で回避できるなら、検索パターンを変更するのがいいと思い
ますよ。

[ ]
RE:34477 正規表現を用いた置換時のタグにNo.34482
秀丸担当 さん 15/09/24 13:10
 

HmJreの場合、\1・\2の対象としないグループの書き方があり、それで可能でし
た。
(?:〜)の中に書くと対象ではなくなります。
例の場合、(?:abcd(efg))と書くと、efgが\1として解釈されました。

[ ]
RE:34482 正規表現を用いた置換時のタグにNo.34484
ktyu さん 15/09/24 16:49
 
h-tomさんありがとうございます
たしかにヘルプに記載されていました
自分はjavascript等の正規表現のテストとしてよく使用しているので
てっきり同じ様な表記方法が使えると思い込んでいました

正規表現のDLLを変更した場合
強調表示の動作にまで影響を及ぼしてしまい
ライブラリで公開されている物の多くが正常に使用できなくなってしまうので
この方法では解決は難しそうです

>HmJreの場合、\1・\2の対象としないグループの書き方があり、それで可能でし
>た。
>(?:〜)の中に書くと対象ではなくなります。
>例の場合、(?:abcd(efg))と書くと、efgが\1として解釈されました。

テストで使用したいのと両方のグループを取得したいので
正規表現自体を変更してしまうやり方は避けたいです

面倒ですがテストの時だけDLLを変更するか
他のエディタを使用することにします


[ ]