今回は、文字列中の特定の文字を別の文字に置き換える(置き換え先を”や””にすると、その文字を削除)処理について扱います。
置き換え対象の文字を正規表現にすることで、アルファベット以外を置き換え(削除)、数字以外を置き換え(削除)といったことも可能になります。
文字列「123ABC123ABC」から、最初に該当したAを削除、文字列中のAを全て削除、数字以外を全て文字列から削除する処理について、C#、Java、JavaScript、PHP、Python3、Rubyの6言語で書いてみました。
C#
using System;
using System.Text.RegularExpressions;
public class Sample{
public static void Main(){
string line = "123ABC123ABC";
//文字列から最初に該当した特定文字を削除
var rg1 = new Regex("A");
string str1 = rg1.Replace(line, "",1);
Console.WriteLine(str1);
//文字列から特定文字を全て削除
string str2 = line.Replace("A", "");
Console.WriteLine(str2);
//文字列から数字以外を取り除く
string str3a = Regex.Replace(line,"[^0-9]", "");
Console.WriteLine(str3a);
var rg2 = new Regex("[^0-9]");
string str3b = rg2.Replace(line, "");
Console.WriteLine(str3b);
}
}
最初に該当したAだけを削除する場合は、Regexを使います。Regexの使用は、「using System.Text.RegularExpressions;」でモジュールを読み込む必要があります。
new Regex(“A”)を変数に入れ、(Regexを入れた変数).Replace(文字列, “”,1)とすることで、最初に該当したAだけを削除できます。なお、第3引数は、該当した文字を置き換え(削除)する回数であり、1回だけなので1を入れます。
.Replace(“A”, “”)で、文字列中のAを全て削除できます。
正規表現を使う場合もRegexを使用。Regex.Replace(line,”[^0-9]”, “”)とすることで、数字以外を全て削除できます。new Regex(“[^0-9]”)を変数に入れ、(Regexを入れた変数).Replace(文字列, “”)の形でもOK。
Java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
String line = "123ABC123ABC";
//文字列から最初に該当した特定文字を削除
String str1 = line.replaceFirst("A", "");
System.out.println(str1);
//文字列から特定文字を全て削除
String str2 = line.replace("A", "");
System.out.println(str2);
//文字列から数字以外を取り除く
String str3 = line.replaceAll("[^0-9]", "");
System.out.println(str3);
}
}
最初に該当したAだけを削除する場合は、.replaceFirst(“A”, “”)。
文字列内のAを全て削除する場合は、.replace(“A”, “”)。
正規表現を使って数字以外を全て削除する場合は、.replaceAll(“[^0-9]”, “”)。
JavaScript
var line = "123ABC123ABC";
//文字列から最初に該当した特定文字を削除
var str1 = line.replace(/A/, '');
console.log(str1);
//文字列から特定文字を全て削除
var str2 = line.replace(/A/g, '');
console.log(str2);
//文字列から数字以外を取り除く
var str3 = line.replace(/[^0-9]/g, '');
console.log(str3);
最初に該当したAだけを削除する場合は、.replace(/A/, ”)。
文字列内のAを全て削除する場合は、/A/の後にgオプションを追加して、.replace(/A/g, ”)。
正規表現を使って数字以外を全て削除する場合は、.replace(/[^0-9]/g, ”)。
PHP
<?php
$line = "123ABC123ABC";
//文字列から最初に該当した特定文字を削除
$str1 = preg_replace('/A/', '', $line, 1);
echo $str1."\n";
//文字列から特定文字を全て削除
$str2 = str_replace('A', '', $line);
echo $str2."\n";
//文字列から数字以外を取り除く
$str3 = preg_replace('/[^0-9]/', '', $line);
echo $str3."\n";
?>
最初に該当したAだけを削除する場合は、preg_replace(‘/A/’, ”, 文字列, 1)。第4引数は、該当した文字を置き換え(削除)する回数で、1回だけなので1を入れます。
文字列内の全てのAを削除する場合は、str_replace(‘A’, ”, 文字列)。
正規表現を使って数字以外を全て削除する場合は、preg_replace(‘/[^0-9]/’, ”, 文字列)。
Python3
import re
line = "123ABC123ABC"
#文字列から最初に該当した特定文字を削除
print(line.replace('A', '', 1))
#文字列から特定文字を全て削除
print(line.replace('A', ''))
#文字列から数字以外を取り除く
print(re.sub('[^0-9]', '', line))
.replace(‘A’, ”, 1)で、最初に該当したAだけを削除できます。第3引数は、該当した文字を置き換え(削除)する回数であり、1回だけなので1を入れます。
第3引数に何も指定せず、.replace(‘A’, ”)とすることで、文字列内のAを全て削除できます。
正規表現を使う場合は、re.subメソッドを使用。「import re」でモジュールを読み込んでおきます。re.sub(‘[^0-9]’, ”, 文字列)とすることで、数字以外を全て削除できます。
Ruby
line = "123ABC123ABC"
#文字列から最初に該当した特定文字を削除
puts line.sub('A', '')
#文字列から特定文字を全て削除
puts line.gsub('A', '')
#文字列から数字以外を取り除く
puts line.gsub(/[^0-9]/, '')
最初に該当したAだけを削除する場合は、.sub(‘A’, ”)。
文字列内のAを全て削除する場合は、.gsub(‘A’, ”)。
正規表現で数字以外を全て削除する場合は、.gsub(/[^0-9]/, ”)。
文字列内の特定の文字を置き換え(削除)する処理は、ネット上にコンテンツを置くようになると頻繁に使うことになります。
演習問題であれば、入力されるデータは設問の条件に合ったものだけに限定されますが、ネット上にコンテンツを置くとなればそのような制限がなくなります。当然のことながら、想定していないデータがフォームを通して入力されることが普通に発生します。数値処理目的のコンテンツにもかかわらず、文字がフォームに入力されるなど。
ここで、そのような不正なデータ入力をそのまま受け付けたらエラーが発生して正常に動作しなくなります。特にデータベースを使うコンテンツの場合は、フォームから不正なSQL文を入力されて、データベースを不正操作されるリスクも発生します。
このような場合に、フォームから入力された文字列中の特定の文字を置き換え(削除)する処理を使うことで、データから不正な部分を取り除いて、コンテンツが正常に動作するようにします。