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]"を使うべきでしょう。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.89916への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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