HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0402
こいる正規表現で特定文字以降の文字列を消去してみたけどうまくいかない7解決


こいる

リンク

2020/4/2(Thu) 17:12:51|NO.89916

コードからコメント文を消去したくて、
正規表現を使ってみたのですが、

#include "mod_regexp.as" code = {" mes "1" mes "2" ; t mes "3" ; t mes "4" // t mes "5" // t "} ; コメント文を消去 code = replace(code,";.*", "") // セミコロン code = replace(code,"//.*", "") // スラッシュx2 mesbox code,ginfo_winx,ginfo_winy,5
なぜか改行もなくなってしまい、うまくいきません。

なにが原因なのでしょうか?
また、どうすればうまくいくのでしょうか?



この記事に返信する


kanamaru

リンク

2020/4/2(Thu) 17:57:06|NO.89919

なんかモジュールのバグっぽい感じがします。
(本当にバグかはわかりません)
試しに行末を表す正規表現を後ろにつけてみましたが改行は消えるようです。
ちょっと強引ですが以下のようにすると想定していると思われる結果となりました。

#include "mod_regexp.as" code = {" mes "1" mes "2" ; t mes "3" ; t mes "4" // t mes "5" // t "} ; コメント文を消去 code = replace(code,";.*", "\n") // セミコロン code = replace(code,"//.*", "\n") // スラッシュx2 mesbox code,ginfo_winx,ginfo_winy,5
改行が消えるなら空文字列じゃなく改行に置き換えてしまえという発想です。



とあるプログラマ

リンク

2020/4/2(Thu) 18:11:55|NO.89921

恐らく改行コードが\nでなくて\r\nなのが原因なような気がしますが詳しいことは微妙ですね…
kanamaruさんの方法でも結果はほとんど同じになりますが、こちらのほうがより無難かと思います。(kanamaruさんのものは改行が無くとも強制的に改行をいれてしまうので…)


#include "mod_regexp.as" code = {" mes "1" mes "2" ; t mes "3" ; t mes "4" // t mes "5" // t"} ; コメント文を消去 code = replace(code,"(;|//)[^\\r\\n]*$", "") // セミコロンとWスラッシュ mesbox code,ginfo_winx,ginfo_winy,5



kanamaru

リンク

2020/4/2(Thu) 18:39:13|NO.89924

javascript,phpで同じ置き換えをやってみたら改行が消えませんでした。
一応モジュールのぞいてみたけどバグが発生するような箇所が無い
このモジュールってvbscriptの正規表現の機能呼び出しているのですが、
vbscriptの正規表現の仕様かもしれません。
気になるとすれば、replace関数には実はオプションがあるのですが、
このプログラムだとオプション全部反転しているような?
まあオプション総当たりしたけど駄目だったんですけどね。



kanamaru

リンク

2020/4/2(Thu) 18:42:49|NO.89925

とあるプログラマさんのを見てませんでした。
確かにその方がいいかもしれません。



kanamaru

リンク

2020/4/2(Thu) 19:02:03|NO.89928

調べてみたのですが、
今回の原因って
http://mofuken.blogspot.com/2014/10/vba-regexpreplace.html
かもしれません。
ということでとあるプログラマさんのプログラムは

#include "mod_regexp.as" code = {" mes "1" mes "2" ; t mes "3" ; t mes "4" // t mes "5" // t"} ; コメント文を消去 code = replace(code,"(;|//)[^\\r]*$", "") // セミコロンとWスラッシュ mesbox code,ginfo_winx,ginfo_winy,5
でいいことがわかりました。
わかりにくいですが、正規表現が変わっています。



こいる

リンク

2020/4/2(Thu) 19:19:27|NO.89929

改行以外の繰り返しをすることで、改行を巻き込まないようにしてるのですか。
助かりました!
お二人ともありがとうございました!



rim

リンク

2020/4/3(Fri) 09:26:52|NO.89932

ヘルプのmatchの項目に
>HSPでの改行 "\n" は\r\nの2文字であることに注意してください
また.(ドット)の説明で
>>\n 以外の任意の1文字に一致します。\r とは一致する事に注意してください。
とのことなので"."を使わずに"[^\\r\\n]"を使うべきでしょう。



ONION software Copyright 1997-2023(c) All rights reserved.