ASP(VBScript)で正規表現を使って文字列置換する方法

このQ&Aのポイント
  • ASP(VBScript)環境での文字列置換についてアドバイスをいただきたいです。特に、長音符を半角ハイフンに置換する方法について教えてください。
  • 対象の文字列は住所を想定しており、数字の間の長音符のみをハイフンに置換したいです。例えば、「ワンダービル1ー2ー3」を「ワンダービル1-2-3」に置換したいです。
  • 現在、以下のコードを試していますが、「1ー1」が数字もろとも「-」になってしまいます。問題点を教えていただけますか? Set ObjRegExp = Server.CreateObject("VBScript.RegExp") ObjRegExp.Pattern = "[0-9]ー[0-9]" StrHalf = ObjRegExp.Replace(StrHalf, "-")
回答を見る
  • ベストアンサー

正規表現を使っての文字列置換。

ASP(VBScript)環境です。 長音符を半角ハイフンに置換したいのですが、うまくいかないので アドバイスいただけないでしょうか。 対象の文字列が住所を想定しているので、数字の間の長音符のみ ハイフンに置換したいと思っています。 例:ワンダービル1ー2ー3 → ワンダービル1-2-3 予め英数字は半角英数字にしてあります。 こんな感じで変換をしようとしてみましたが ----- '長音符の変換 Set ObjRegExp = Server.CreateObject("VBScript.RegExp") ObjRegExp.Pattern = "[0-9]ー[0-9]" StrHalf = ObjRegExp.Replace(StrHalf, "-") ----- これをかけてみると、「1ー1」が数字もろとも「-」になってしまいます。 問題点を教えていただけないでしょうか。

  • ginfix
  • お礼率34% (330/962)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 後方参照を使わないといけません・・・。 構文はわかりませんが、 ObjRegExp.Pattern = "([0-9])ー([0-9])" StrHalf = ObjRegExp.Replace(StrHalf, "$1-$2") のような感じですね。

ginfix
質問者

お礼

出来ました。 大変助かりました、ありがとうございます。

関連するQ&A

  • 正規表現を用いての置換。

    お世話になっております。 VBScriptで、正規表現を用いての置換がうまくいかないので、ご教授ください。 半角数字に挟まれている、全角の「ー」(長音符)を、半角ハイフンに変換したいと 思っています。 先日ご教授いただいて、以下のように作りました。 --- Set ObjRegExp = Server.CreateObject("VBScript.RegExp") ObjRegExp.Pattern = "([0-9])ー([0-9])" StrHalf = ObjRegExp.Replace(StrHalf, "$1-$2") --- しかし、たとえば 1ー2であれば、1-2となるのですが、 1ー2ー3の時に、1-2ー3(後方が長音符のまま)となってしまいます。 修正すべき点をご教授いただけないでしょうか。

  • ハイフンだけ置換したい。

    全角ハイフンと、全角の「ー」(長音符)を、半角ハイフンに 置換したいと思っています。 対象の文字列は、住所を想定しているので、 たとえばですが 「ワンダービル1ー2ー3」だったら、「ワンダービル」は長音符の ままで、数字の間だけハイフン変換したいのです。 (英数については事前に半角への変換をかけています) 単純にreplaceではワンダービルがワンダービルになるので、 困っています。 何か良い案がありましたら、ご教授ください。

  • 改行を含んだ文字列を正規表現で置換するには?

    正規表現で、改行を含んだ文字列を置換しようと思っています。 例えば下の「infile.txt」にある aaa bbb という(2行にわたる)文字列を zzz という文字列に変換させたい訳です。 試しに「test.vbs」のようなコードを書いてみましたが、これでは上手く行きませんでした。 上手く変換されるようにするには、どうしたら良いでしょうか? ----------------------------------------------------- ○「test.vbs」の内容 Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("C:\infile.txt") Set outFile = fso.CreateTextFile("C:\outfile.txt") Set regEx = New RegExp regEx.pattern = "aaa\nbbb" repStr = "zzz" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close ----------------------------------------------------- ○「C:\infile.txt」の内容 aaa bbb ccc

  • 正規表現で置換したい

    ブログのシステムを変更して、 記事中にある内部リンクの書き換えが必要となりました。 現在、記事中に post-001.html post-005.html  ・  ・  ・ post-853.html という文字列があります。 数字は飛び飛びでそれぞれ異なり500個ほどあります。 WordPressのプラグインの「Search Regex」を使って置換をしたいのですが、 正規表現で置換して、 ハイフンをアンダーバーに置換し、お尻の「.html」は削除して post_001 post_005  ・  ・  ・ post_853 としたいのですが、正規表現で置換する場合、 どのようにすればいいのでしょうか。 「post-」を ( ) でくくればいいのでしょうか。 「.html」削除するにはどうすればいいのでしょうか。 Search Regex に Search pattern(置換前の文字列)と Replace pattern (置換後も文字列)を入力する欄があります。 上のような文字列を置換したい場合は、 それぞれどのような記号を入力すればよいのでしょうか。 アドバイスをよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 正規表現 英数字を1つ以上含む文字列

    ASP.NET(VB)での入力チェックのために、 半角英数字「0~9」「a~z」「A~Z」と、ハイフン「-」からなる文字列 (ただし、半角英数字「0~9」「a~z」「A~Z」はそれぞれ少なくとも1個ずつ含む) の正規表現での表し方が知りたいです。  How To: ASP.NET への入力を制約するために正規表現を使用する方法  http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000001.aspx  (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$  8から10文字で、最低1文字の数字と1文字の英字を使用し、特殊文字を使用してはいけません。 上記を参考に、 (?!^[0-9]*$)(?!^[a-z]*$)(?!^[A-Z]*$)^([a-zA-Z0-9])$ こんな感じかなぁと試してみたのですが、ダメでした。 そもそも「!」の意味が分かりません。否定でしょうか??

  • ユニークな文字列を作りたい。

    C♯、.NET FrameWordk2.0環境です。 戻り値として32~35桁のユニークな文字列(半角英数字のみ)を返すメソッドを 作りたいと思っています。 GUIDを発行してやれば良いかと思ったんですが、ハイフンが入っていたり、 アルファベットが大文字小文字混じっていたり(小文字のみにしたい)で、そのままでは 使えません。 発行したGUIDを、サクッと半角英数字(英字は小文字に置換)できるような方法は ないでしょうか? または、もっと簡単にユニークな文字列を発行できる方法がありましたら、ご教授 いただけるとありがたいです。 宜しくお願いします。

  • VBAで正規表現を使った置き換え

    ”KFEGYKLNI"のような長い文字列の文字の間に".*"を入れて"K.*F.*E.*G.*Y.*K.*L.*N.*I”のような検索パターンを作りたいのですが".*"を簡単に入れる方法を教えてください。 excel2003を使っています。 Set re = CreateObject("VBScript.RegExp") re.replace("s//\.\*/g","KFEGYKLNI") としてみましたがうまくいきません。 またhelpをどのような語句で検索したよいのでしょうか

  • 正規表現での置換えについて

    正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • エクセルで、半角に置換すると日付に

    使用機種はxp、エクセル2003で作業をしています。 住所録の番地部分のみのセルなのですが、 「1ー2ー1」←このように、全角「長音」でつないである部分を「半角ハイフン」にしたいため、検索&置換しています。 セルの書式設定は「文字列」になっているのに、どうしても年月日に変換されてしまうセルがでてきてしまいます。 どうしたら文字列のままで置換できるでしょうか。 よろしくお願いいたします。

  • 「?」の入った文字列置換を、RegEx.Replaceで行いたい

    WSHを使い、あるhtmファイルの中にある特定の文字列を、RegEx.Replaceを使って置換しようとしています。通常の文字列置換についてはなんとか成功しているのですが、下記のケースで壁に当たっています。前に進める為にはどうしたらよいか、ヒントをご存知の方がいれば大変有り難く思います。 今回作業の特徴としては 1)置換前の文字列の中にメタキャラ「?」が含まれており、 2)置換前の文字列は、DBから読み込んできた文字列である の2点です。(ちなみに1だけでは成功しているのですが、1と2が組み合わさると上手くいきません) 具体的には、下記のサンプルで置換前の文字列を url_before = "test.asp\?param=999" (?についてはエスケープ文字付与) のように明示的に書いてやると置換に成功しました。ところがDBから取得してきた文字列で置換をしようとしても失敗となります。 たとえばrs.fields("item")の中身が"test.asp?param=999"だったとして、先ほどの箇所を url_before = replace(rs.fields("item"), "?", "\?") とすると、置換されないのです。 '----- サンプル ----- Set fso = CreateObject("Scripting.FileSystemObject") Set regEx = New RegExp Set inFile = fso.OpenTextFile("c:\hoge\test1.htm") Set outFile = fso.CreateTextFile("c:\hoge\test1_wk.htm") ◆動くケース:url_before = "test.asp\?param=999" ◆動かないケース:url_before = replace(rs.fields("item"), "?", "\?") url_after = "test_999.htm" regEx.pattern = url_before repStr = url_after Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close

専門家に質問してみよう