プログラミング言語の比較 > 基本的な処理

複数行の文字列リテラル

Java

  1. String s = "1行目\n"
  2.          + "2行目\n"
  3.          + "3行目";

Groovy

  1. def s = '''1行目
  2. 2行目
  3. 3行目'''
  1. def s = /1行目\
  2. 2行目\
  3. 3行目/

Scala

  1. val s = """1行目
  2. 2行目
  3. 3行目"""
  1. val s = """|1行目
  2.            |2行目
  3.            |3行目""".stripMargin              // 各行の先頭の余白を削る

Erlang

  1. S = "1行目
  2. 2行目
  3. 3行目".

Haskell

  1. let s = unlines ["1行目",
  2.                  "2行目",
  3.                  "3行目"]

PowerShell

  1. $s = @'
  2. 1行目
  3. 2行目
  4. 3行目
  5. '@

F#

  1. let s = "1行目
  2. 2行目
  3. 3行目"

C#

  1. string s = @"1行目
  2. 2行目
  3. 3行目";

C++

  1. string s = "";
  2. s += "1行目\n";
  3. s += "2行目\n";
  4. s += "3行目";

Go

  1. s := `1行目
  2. 2行目
  3. 3行目`

Dart

  1. String s = '''1行目
  2. 2行目
  3. 3行目''';
  1. String s = @'1行目
  2. 2行目
  3. 3行目';

ActionScript

  1. var s:String = '1行目\
  2. 2行目\
  3. 3行目';

JavaScript

  1. var s = '1行目\n'
  2.       + '2行目\n'
  3.       + '3行目';

CoffeeScript

  1. s = '''
  2.     1行目
  3.     2行目
  4.     3行目
  5.     '''

Lua

  1. s = [[1行目
  2. 2行目
  3. 3行目]]

Ruby

  1. s = '1行目
  2. 2行目
  3. 3行目'
  1. s = <<'END'
  2. 1行目
  3. 2行目
  4. 3行目
  5. END

Python

  1. s = '''1行目
  2. 2行目
  3. 3行目'''

PHP

  1. $s = '1行目
  2. 2行目
  3. 3行目';
  1. $s = <<<'END'
  2. 1行目
  3. 2行目
  4. 3行目
  5. END;

Perl

  1. my $s = '1行目
  2. 2行目
  3. 3行目';
  1. my $s = <<'END';
  2. 1行目
  3. 2行目
  4. 3行目
  5. END

文字列中に変数の値を埋め込む(printf など)

Java

printf 方式
  1. String name = "Taro";
  2. int age = 20;
  3. String s = String.format("He is %s. %s is %d years old.", name, name, age);
  1. String name = "Taro";
  2. int age = 20;
  3. String s = String.format("He is %1$s. %1$s is %2$d years old.", name, age);             // 1:name  2:age
インデックス指定方式
  1. String name = "Taro";
  2. int age = 20;
  3. String s = MessageFormat.format("He is {0}. {0} is {1} years old.", name, age);         // 0:name  1:age
Commons Lang 3.0以降を使った場合
キー指定方式
  1. // import org.apache.commons.lang3.text.StrSubstitutor;
  2. Map<String, Object> map = new HashMap<String, Object>();
  3. map.put("name""Taro");
  4. map.put("age"20);
  5. String s = new StrSubstitutor(map).replace("He is ${name}. ${name} is ${age} years old.");

Groovy

式展開方式
  1. def name = 'Taro'
  2. def age = 20
  3. def s = "He is $name. $name is $age years old."
  1. def map = [name: 'Taro', age: 20]
  2. def s = "He is ${map.name}. ${map.name} is ${map.age} years old."
printf 方式
  1. def name = 'Taro'
  2. def age = 20
  3. def s = String.format('He is %s. %s is %d years old.', name, name, age)
  1. def name = 'Taro'
  2. def age = 20
  3. def s = String.format('He is %1$s. %1$s is %2$d years old.', name, age)             // 1:name  2:age
インデックス指定方式
  1. def name = 'Taro'
  2. def age = 20
  3. def s = MessageFormat.format("He is {0}. {0} is {1} years old.", name, age)         // 0:name  1:age
キー指定方式
  1. def map = [name: 'Taro', age: 20]
  2. def s = map.with { "He is ${name}. ${name} is ${age} years old." }

Scala

printf 方式
  1. val name = "Taro"
  2. val age = 20
  3. val s = "He is %s. %s is %d years old.".format(name, name, age)
  1. val name = "Taro"
  2. val age = 20
  3. val s = format("He is %s. %s is %d years old.", name, name, age)
  1. val name = "Taro"
  2. val age = 20
  3. val s = "He is %1$s. %1$s is %2$d years old.".format(name, age)                     // 1:name  2:age
  1. val name = "Taro"
  2. val age = 20
  3. val s = format("He is %1$s. %1$s is %2$d years old.", name, age)                    // 1:name  2:age
インデックス指定方式
  1. val name = "Taro"
  2. val age = 20
  3. val s = MessageFormat.format("He is {0}. {0} is {1} years old.", name, age)         // 0:name  1:age
式展開方式風
  1. val name = "Taro"
  2. val age = 20
  3. val s = <x>He is {name}. {name} is {age} years old.</x>.text
Scala 2.10以降
式展開方式
  1. val name = "Taro"
  2. val age = 20
  3. val s = s"He is ${name}. ${name} is ${age} years old."
  1. val name = "Taro"
  2. val age = 20
  3. val s = f"He is ${name}%s. ${name}%s is ${age}%d years old."

Erlang

printf 方式
  1. S = io:format("He is ~s. ~s is ~p years old.", ["Taro""Taro"20]).

Haskell

printf 方式
  1. -- import Text.Printf
  2. let name = "Taro"
  3. let age = 20
  4. let s = printf "He is %s. %s is %d years old." name name (age :: Int) :: String

PowerShell

インデックス指定方式
  1. $name = 'Taro'
  2. $age = 20
  3. $s = 'He is {0}. {0} is {1} years old.' -f $name$age          # 0:name  1:age

F#

printf 方式
  1. let name = "Taro"
  2. let age = 20
  3. let s = sprintf "He is %s. %s is %d years old." name name age
インデックス指定方式
  1. let name = "Taro"
  2. let age = 20
  3. let s = System.String.Format("He is {0}. {0} is {1} years old.", name, age)         // 0:name  1:age
キー指定方式風
  1. // open System.Collections.Generic
  2. // open System.Text.RegularExpressions
  3. let format pattern (dict : IDictionary<_, _>) =
  4.     Regex.Replace(pattern, @"\$(\w+)"fun (m : Match) -> string dict.[m.Groups.[1].Value])
  5. let d = dict [("name", box "Taro"); ("age", box 20)]            // d の型は IDictionary<string, obj>
  6. let s = format "He is $name. $name is $age years old." d

C#

インデックス指定方式
  1. string name = "Taro";
  2. int age = 20;
  3. string s = string.Format("He is {0}. {0} is {1} years old.", name, age);            // 0:name  1:age
C# 3.0以降
キー指定方式風
  1. // using System.Text.RegularExpressions;
  2. public static string Format<T>(string pattern, IDictionary<string, T> dict) {
  3.     return Regex.Replace(pattern, @"\$(\w+)", m => dict[m.Groups[1].Value].ToString());
  4. }
  1. var dict = new Dictionary<stringobject> { { "name""Taro" }, { "age"20 } };
  2. var s = Format("He is $name. $name is $age years old.", dict);

C++

printf 方式
  1. #include <cstdio>
  2. char* name = "Taro";
  3. int age = 20;
  4. const int N = 256;          // 十分なサイズを見積もっておく
  5. char buf[N];
  6. snprintf(buf, N, "He is %s. %s is %d years old.", name, name, age);
  7. string s(buf);
Boost を使った場合
printf 方式
  1. #include <boost/format.hpp>
  2. string name = "Taro";
  3. int age = 20;
  4. string s = (boost::format("He is %s. %s is %d years old.") % name % name % age).str();
  1. #include <boost/format.hpp>
  2. string name = "Taro";
  3. int age = 20;
  4. string s = (boost::format("He is %1$s. %1$s is %2$d years old.") % name % age).str();       // 1:name  2:age
インデックス指定方式
  1. #include <boost/format.hpp>
  2. string name = "Taro";
  3. int age = 20;
  4. string s = (boost::format("He is %1%. %1% is %2% years old.") % name % age).str();          // 1:name  2:age

Go

printf 方式
  1. name := "Taro"
  2. age := 20
  3. s := fmt.Sprintf("He is %s. %s is %d years old.", name, name, age)

Dart

式展開方式
  1. String name = 'Taro';
  2. int age = 20;
  3. String s = 'He is $name. $name is $age years old.';

ActionScript

インデックス指定方式
  1. var name:String = 'Taro';
  2. var age:int = 20;
  3. var s:String = StringUtil.substitute('He is {0}. {0} is {1} years old.', name, age);        // 0:name  1:age

JavaScript

MochiKit を使った場合
インデックス指定方式
  1. var name = 'Taro';
  2. var age = 20;
  3. var s = format('He is {0}. {0} is {1} years old.', name, age);
  1. var name = 'Taro';
  2. var age = 20;
  3. var f = formatter('He is {0}. {0} is {1} years old.');
  4. var s = f(name, age);

CoffeeScript

式展開方式
  1. name = 'Taro'
  2. age = 20
  3. s = "He is #{name}. #{name} is #{age} years old."
MochiKit を使った場合
インデックス指定方式
  1. name = 'Taro'
  2. age = 20
  3. s = format 'He is {0}. {0} is {1} years old.', name, age
  1. name = 'Taro'
  2. age = 20
  3. f = formatter 'He is {0}. {0} is {1} years old.'
  4. s = f name, age

Lua

printf 方式
  1. name = 'Taro'
  2. age = 20
  3. s = string.format('He is %s. %s is %d years old.', name, name, age)

Ruby

式展開方式
  1. name = 'Taro'
  2. age = 20
  3. s = "He is #{name}. #{name} is #{age} years old."
  1. hash = {'name' => 'Taro''age' => 20}
  2. s = "He is #{hash['name']}. #{hash['name']} is #{hash['age']} years old."
printf 方式
  1. name = 'Taro'
  2. age = 20
  3. s = 'He is %s. %s is %d years old.' % [name, name, age]
  1. name = 'Taro'
  2. age = 20
  3. s = 'He is %1$s. %1$s is %2$d years old.' % [name, age]                 # 1:name  2:age
  1. name = 'Taro'
  2. age = 20
  3. s = sprintf 'He is %s. %s is %d years old.', name, name, age
  1. name = 'Taro'
  2. age = 20
  3. s = sprintf 'He is %1$s. %1$s is %2$d years old.', name, age            # 1:name  2:age
インデックス指定方式風
  1. def format pattern, *args
  2.   pattern.gsub(/\{(\d+)\}/) { args[$1.to_i] }
  3. end
  1. name = 'Taro'
  2. age = 20
  3. s = format 'He is {0}. {0} is {1} years old.', name, age                # 0:name  1:age
Ruby 1.9 以降
キー指定方式
  1. 'He is %{name}. %{name} is %{age} years old.' % {name: 'Taro', age: 20}
  1. sprintf 'He is %{name}. %{name} is %{age} years old.', name: 'Taro', age: 20

Python

printf 方式
  1. name = 'Taro'
  2. age = 20
  3. s = 'He is %s. %s is %d years old.' % (name, name, age)
printf+キー指定方式
  1. d = {'name''Taro''age'20}
  2. s = 'He is %(name)s. %(name)s is %(age)d years old.' % d
インデックス指定方式
  1. name = 'Taro'
  2. age = 20
  3. s = 'He is {0}. {0} is {1} years old.'.format(name, age)            # 0:name  1:age
キー指定方式
  1. s = 'He is {name}. {name} is {age} years old.'.format(name = 'Taro', age = 20)
  1. # import string
  2. d = {'name''Taro''age'20}
  3. s = string.Template('He is $name. $name is $age years old.').substitute(d)
  1. # import string
  2. s = string.Template('He is $name. $name is $age years old.').substitute(name = 'Taro', age = 20)

PHP

式展開方式
  1. $name = 'Taro';
  2. $age = 20;
  3. $s = "He is $name. $name is $age years old.";
  1. $array = array('name' => 'Taro''age' => 20);
  2. $s = "He is {$array[name]}. {$array[name]} is {$array[age]} years old.";
printf 方式
  1. $name = 'Taro';
  2. $age = 20;
  3. $s = sprintf('He is %s. %s is %d years old.'$name$name$age);

Perl

式展開方式
  1. my $name = 'Taro';
  2. my $age = 20;
  3. my $s = "He is $name. $name is $age years old.";
  1. my %hash = (name => 'Taro', age => 20);
  2. my $s = "He is $hash{name}. $hash{name} is $hash{age} years old.";
printf 方式
  1. my $name = 'Taro';
  2. my $age = 20;
  3. my $s = sprintf 'He is %s. %s is %d years old.'$name$name$age;
  1. my $name = 'Taro';
  2. my $age = 20;
  3. my $s = sprintf 'He is %1$s. %1$s is %2$d years old.'$name$age;         # 1:name  2:age
CPAN の String::Formatter を使った場合
キー指定方式
  1. # use String::Formatter;
  2. my $fmt = String::Formatter->new({
  3.     input_processor => 'require_named_input',
  4.     string_replacer => 'named_replace',
  5.     codes => {s => sub { $_ }}
  6. });
  7. my %hash = (name => 'Taro', age => 20);
  8. my $s = $fmt->format('He is %{name}s. %{name}s is %{age}s years old.'\%hash);

同じ文字列を繰り返す

「Yes!Yes!Yes!」という文字列を作る。

Java

  1. StringBuilder sb = new StringBuilder();
  2. for (int i = 0; i < 3; i++) {
  3.     sb.append("Yes!");
  4. }
  5. String s = sb.toString();
Commons Lang 3.0以降を使った場合
  1. // import org.apache.commons.lang3.StringUtils;
  2. String s = StringUtils.join(new String[3 + 1], "Yes!");         // 4つの空文字列を "Yes!" で連結する
Guava を使った場合
  1. // import com.google.common.base.Strings;
  2. String s = Strings.repeat("Yes!"3);

Groovy

  1. def s = 'Yes!' * 3

Scala

  1. val s = "Yes!" * 3

Erlang

  1. S = lists:flatten(lists:duplicate(3"Yes!")).

Haskell

  1. let s = concat $ take 3 $ repeat "Yes!"
  1. let s = concatMap (const "Yes!") [1..3]

PowerShell

  1. $s = 'Yes!' * 3

F#

  1. let s = String.replicate 3 "Yes!"

C#

  1. string s = string.Join("Yes!"new string[3 + 1]);          // 4つの空文字列を "Yes!" で連結する

C++

  1. #include <sstream>
  2. stringstream ss;
  3. for (int i = 0; i < 3; i++) {
  4.     ss << "Yes!";
  5. }
  6. string s = ss.str();

Go

  1. // import "strings"
  2. s := strings.Repeat("Yes!"3)

Dart

  1. var sb = new StringBuffer();
  2. for (int i = 0; i < 3; i++) {
  3.     sb.add('Yes!');
  4. }
  5. String s = sb.toString();

ActionScript

Flex 4.1以降
  1. var s:String = StringUtil.repeat('Yes!'3);

JavaScript

  1. var s = '';
  2. for (var i = 0; i < 3; i++) {
  3.     s += 'Yes!';
  4. }
MochiKit を使った場合
  1. var s = list(repeat('Yes!'3)).join('');
  1. var s = reduce(operator.add, repeat('Yes!'3));

CoffeeScript

  1. s = ('Yes!' for _ in [1..3]).join ''
MochiKit を使った場合
  1. s = list(repeat 'Yes!'3).join ''
  1. s = reduce operator.add, (repeat 'Yes!'3)

Lua

  1. s = ('Yes!'):rep(3)

Ruby

  1. s = 'Yes!' * 3

Python

  1. s = 'Yes!' * 3

PHP

  1. $s = str_repeat('Yes!'3);

Perl

  1. my $s = 'Yes!' x 3;

文字列中の文字の並びを逆にする

Java

Commons Lang 3.0以降を使った場合
  1. // import org.apache.commons.lang3.StringUtils;
  2. String s = StringUtils.reverse("ABCDE");

Groovy

  1. def s = 'ABCDE'.reverse()
  1. def s = 'ABCDE'[-1..0]          // 0 は文字列の先頭、-1 は末尾を表す

Scala

  1. var s = "ABCDE".toCharArray.reverse.mkString

Erlang

  1. S = lists:reverse("ABCDE").

Haskell

  1. let s = reverse "ABCDE"

PowerShell

  1. $chars = 'ABCDE'.ToCharArray()
  2. [Array]::Reverse($chars)
  3. $s = New-Object string (,$chars)

F#

  1. let s = new string("ABCDE".ToCharArray() |> Array.rev)

C#

C# 3.0以降
  1. string s = new string("ABCDE".Reverse().ToArray());

C++

  1. string s = "ABCDE";
  2. reverse(s.begin(), s.end());            // s の内容が変わる

Go

  1. // import "bytes"
  2. // import "strings"
  3. chars := strings.Split("ABCDE""")
  4. buf := bytes.NewBufferString("")
  5. for i := len(chars) - 1; i >= 0; i-- {
  6.     buf.WriteString(chars[i])
  7. }
  8. s := buf.String()

Dart

  1. List chars = 'ABCDE'.splitChars();
  2. var sb = new StringBuffer();
  3. for (int i = chars.length; i > 0; ) {
  4.     i--;
  5.     sb.add(chars[i]);
  6. }
  7. String s = sb.toString();

ActionScript

  1. var s:String = 'ABCDE'.split('').reverse().join('');

JavaScript

  1. var s = 'ABCDE'.split('').reverse().join('');

CoffeeScript

  1. s = 'ABCDE'.split('').reverse().join ''

Lua

  1. s = ('ABCDE'):reverse()

Ruby

  1. s = 'ABCDE'.reverse

Python

  1. s = ''.join(reversed('ABCDE'))

PHP

  1. $s = strrev('ABCDE');

Perl

  1. my $s = join '', reverse(split //, 'ABCDE');

正規表現を使って、日付を表す文字列から年・月・日を取り出す

Java

  1. // import java.util.regex.*;
  2. Pattern p = Pattern.compile("^(\\d{4})-(\\d{1,2})-(\\d{1,2})$");
  3. Matcher m = p.matcher("2010-01-03");
  4. if (m.matches()) {
  5.     String year  = m.group(1);
  6.     String month = m.group(2);
  7.     String day   = m.group(3);
  8.     ...
  9. }
グループ名を付ける
Java 7以降
  1. // import java.util.regex.*;
  2. Pattern p = Pattern.compile("^(?<year>\\d{4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})$");
  3. Matcher m = p.matcher("2010-01-03");
  4. if (m.matches()) {
  5.     String year  = m.group("year");
  6.     String month = m.group("month");
  7.     String day   = m.group("day");
  8.     ...
  9. }

Groovy

  1. def m = '2010-01-03' =~ /^(\d{4})-(\d{1,2})-(\d{1,2})$/
  2. if (m.matches()) {
  3.     def (_, year, month, day) = m[0]
  4.     ...
  5. }
  1. def p = ~ /^(\d{4})-(\d{1,2})-(\d{1,2})$/               // p の型は java.util.regex.Pattern
  2. '2010-01-03'.find(p) { _, year, month, day ->
  3.     ...
  4. }
グループ名を付ける
Java 7以降
  1. def m = '2010-01-03' =~ /^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$/
  2. if (m.matches()) {
  3.     def year  = m.group('year')
  4.     def month = m.group('month')
  5.     def day   = m.group('day')
  6.     ...
  7. }

Scala

  1. val re = """^(\d{4})-(\d{1,2})-(\d{1,2})$""".r          // re の型は scala.util.matching.Regex
  2. val re(year, month, day) = "2010-01-03"                 // パターンマッチ。マッチしなかった場合は例外が起きる
  1. val re = """^(\d{4})-(\d{1,2})-(\d{1,2})$""".r          // re の型は scala.util.matching.Regex
  2. "2010-01-03" match {
  3.     case re(year, month, day) => ...                    // マッチした場合
  4.     case _ =>                                           // マッチしなかった場合は何もしない
  5. }
グループ名を付ける
Java 7以降
  1. // import java.util.regex.Pattern
  2. val p = Pattern.compile("""^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$""")
  3. val m = p.matcher("2010-01-03")
  4. if (m.matches) {
  5.     val year  = m.group("year")
  6.     val month = m.group("month")
  7.     val day   = m.group("day")
  8.     ...
  9. }

Erlang

  1. RE = "^(\\d{4})-(\\d{1,2})-(\\d{1,2})$",
  2. %% パターンマッチ。マッチしなかった場合は例外が起きる
  3. {match, [_, Year, Month, Day]} = re:run("2010-01-03", RE, [{capture, all, list}]).
グループ名を付ける
  1. RE = "^(?<year>\\d{4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})$",
  2. %% パターンマッチ。マッチしなかった場合は例外が起きる
  3. {match, [Year, Month, Day]} = re:run("2010-01-03", RE, [{capture, [year, month, day], list}]).

Haskell

  1. -- import Text.Regex
  2. let regex = mkRegex "^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$"
  3. -- パターンマッチ。マッチしなかった場合は例外が起きる
  4. let Just [year, month, day] = matchRegex regex "2010-01-03"
  1. -- import Text.Regex
  2. -- import Text.Regex.Posix
  3. let pattern = "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})"
  4. -- パターンマッチ。マッチしなかった場合は例外が起きる
  5. let ("", _, "", [year, month, day]) = "2010-01-03" =~ pattern :: (String, String, String, [String])

PowerShell

  1. if ('2010-01-03' -match '^(\d{4})-(\d{1,2})-(\d{1,2})$') {
  2.     $year$month$day = $Matches[1], $Matches[2], $Matches[3]
  3.     ...
  4. }
  1. if ('2010-01-03' -match '^(\d{4})-(\d{1,2})-(\d{1,2})$') {
  2.     $year$month$day = @(1..3) | foreach { $Matches[$_] }
  3.     ...
  4. }
グループ名を付ける
  1. if ('2010-01-03' -match '^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$') {
  2.     $year$month$day = $Matches.year, $Matches.month, $Matches.day
  3.     ...
  4. }
  1. if ('2010-01-03' -match '^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$') {
  2.     $year$month$day = echo year month day | foreach { $Matches[$_] }            # echo は配列を作るコマンド
  3.     ...
  4. }

F#

  1. // open System.Text.RegularExpressions
  2. let m = Regex.Match("2010-01-03"@"^(\d{4})-(\d{1,2})-(\d{1,2})$")
  3. match [for g in m.Groups -> g.Value] with
  4. | [_; year; month; day] -> ...                      // マッチした場合
  5. | _ ->                                              // マッチしなかった場合は何もしない
  1. // open System.Text.RegularExpressions
  2. let (|Groups|_|) (m : Match) =
  3.     if m.Success then Some [for g in m.Groups -> g.Value] else None
  4. match Regex.Match("2010-01-03"@"^(\d{4})-(\d{1,2})-(\d{1,2})$"with
  5. | Groups [_; year; month; day] -> ...               // マッチした場合
  6. | _ ->                                              // マッチしなかった場合は何もしない
  1. // open System.Text.RegularExpressions
  2. let (|RE|_|) pattern input =
  3.     let m = Regex.Match(input, pattern)
  4.     if m.Success then Some [for g in m.Groups -> g.Value] else None
  5. match "2010-01-03" with
  6. | RE @"^(\d{4})-(\d{1,2})-(\d{1,2})$" [_; year; month; day] -> ...          // マッチした場合
  7. | _ ->                                                                      // マッチしなかった場合は何もしない
グループ名を付ける
  1. // open System.Text.RegularExpressions
  2. let m = Regex.Match("2010-01-03"@"^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$")
  3. match [for name in ["year""month""day"] -> m.Groups.[name].Value] with
  4. | [year; month; day] -> ...                         // マッチした場合
  5. | _ ->                                              // マッチしなかった場合は何もしない
  1. // open System.Text.RegularExpressions
  2. let (|Groups|_|) (m : Match, names : seq<string>) =
  3.     if m.Success then Some [for name in names -> m.Groups.[name].Value] else None
  4. let m = Regex.Match("2010-01-03"@"^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$")
  5. match m, ["year""month""day"with
  6. | Groups [year; month; day] -> ...                  // マッチした場合
  7. | _ -> ()                                           // マッチしなかった場合は何もしない

C#

  1. // using System.Text.RegularExpressions;
  2. Match m = Regex.Match("2010-01-03"@"^(\d{4})-(\d{1,2})-(\d{1,2})$");
  3. if (m.Success) {
  4.     string year  = m.Groups[1].Value;
  5.     string month = m.Groups[2].Value;
  6.     string day   = m.Groups[3].Value;
  7.     ...
  8. }
グループ名を付ける
  1. // using System.Text.RegularExpressions;
  2. Match m = Regex.Match("2010-01-03"@"^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$");
  3. if (m.Success) {
  4.     string year  = m.Groups["year"].Value;
  5.     string month = m.Groups["month"].Value;
  6.     string day   = m.Groups["day"].Value;
  7.     ...
  8. }

C++

Boost を使った場合
  1. #include <boost/regex.hpp>
  2. boost::regex r("^(\\d{4})-(\\d{1,2})-(\\d{1,2})$");
  3. boost::smatch m;
  4. if (boost::regex_search(string("2010-01-03"), m, r)) {
  5.     string year  = m.str(1);
  6.     string month = m.str(2);
  7.     string day   = m.str(3);
  8.     ...
  9. }

Go

  1. // import "os"
  2. // import "regexp"
  3. r, err := regexp.Compile("^([0-9][0-9][0-9][0-9])-([0-1]?[0-9])-([0-3]?[0-9])$")           // 「\d」「{4}」といった表記はできない
  4. if err != nil { goto onError }
  5. result := r.MatchStrings("2010-01-03")
  6. if len(result) > 0 {
  7.     year, month, day := result[1], result[2], result[3]
  8.     ...
  9. }
  10. return
  11. onError:
  12. fmt.Fprintf(os.Stderr, "%v\n", err)

Dart

  1. Match m = new RegExp(@'^(\d{4})-(\d{1,2})-(\d{1,2})$').firstMatch('2010-01-03');
  2. if (m != null) {
  3.     String year  = m[1];
  4.     String month = m[2];
  5.     String day   = m[3];
  6.     ...
  7. }

ActionScript

  1. var m:Array = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec('2010-01-03');
  2. if (m !== null) {
  3.     var year:String  = m[1];
  4.     var month:String = m[2];
  5.     var day:String   = m[3];
  6.     ...
  7. }

JavaScript

  1. var array = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec('2010-01-03');
  2. if (array) {
  3.     var year  = array[1];
  4.     var month = array[2];
  5.     var day   = array[3];
  6.     ...
  7. }
JavaScript 1.7(Firefox 2.0)以降
  1. var array = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec('2010-01-03');
  2. if (array) {
  3.     var [, year, month, day] = array
  4.     ...
  5. }

CoffeeScript

  1. array = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec '2010-01-03'
  2. if array
  3.     [_, year, month, day] = array
  4.     ...

Lua

  1. s = '2010-01-03'
  2. startIndex, endIndex, year, month, day = s:find('(%d%d%d%d)%-(%d%d?)%-(%d%d?)')
  3. if startIndex == 1 and endIndex == s:len() then
  4.     ...
  5. end

Ruby

  1. if '2010-01-03' =~ /^(\d{4})-(\d{1,2})-(\d{1,2})$/                  # String =~ Regexp
  2.   year, month, day = $1$2$3
  3.   ...
  4. end
  1. if /^(\d{4})-(\d{1,2})-(\d{1,2})$/ =~ '2010-01-03'                  # Regexp =~ String
  2.   year, month, day = $~[1..3]
  3.   ...
  4. end
  1. if /^(\d{4})-(\d{1,2})-(\d{1,2})$/ === '2010-01-03'                 # Regexp === String
  2.   year, month, day = Regexp.last_match[1..3]
  3.   ...
  4. end
  1. if '2010-01-03'[/^(\d{4})-(\d{1,2})-(\d{1,2})$/]                    # String[Regexp]
  2.   year, month, day = $~.captures
  3.   ...
  4. end
  1. if m = '2010-01-03'.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/)          # String.match(Regexp)
  2.   year, month, day = m[1..3]
  3.   ...
  4. end
  1. if m = '2010-01-03'.match('^(\d{4})-(\d{1,2})-(\d{1,2})$')          # String.match(String)
  2.   year, month, day = m.captures
  3.   ...
  4. end
  1. if m = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.match('2010-01-03')          # Regexp.match(String)
  2.   year, month, day = m.values_at 123
  3.   ...
  4. end
Ruby 1.9以降でグループ名を付ける
  1. if '2010-01-03' =~ /^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$/                 # String =~ Regexp
  2.   year, month, day = $~[:year], $~[:month], $~[:day]
  3.   ...
  4. end
  1. if m = '2010-01-03'.match(/^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$/)         # String.match(Regexp)
  2.   year, month, day = m[:year], m[:month], m[:day]
  3.   ...
  4. end

Python

  1. # import re
  2. m = re.compile(r'^(\d{4})-(\d{1,2})-(\d{1,2})$').search('2010-01-03')
  3. if m:
  4.     year, month, day = m.groups()
グループ名を付ける
  1. # import re
  2. m = re.compile(r'^(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})$').search('2010-01-03')
  3. if m:
  4.     year  = m.group('year')
  5.     month = m.group('month')
  6.     day   = m.group('day')
  1. # import re
  2. m = re.compile(r'^(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})$').search('2010-01-03')
  3. if m:
  4.     year, month, day = map(m.group, ('year''month''day'))

PHP

  1. $regs = array();
  2. if (mb_ereg('^(\d{4})-(\d{1,2})-(\d{1,2})$''2010-01-03'$regs)) {
  3.     list(, $year$month$day) = $regs;
  4.     ...
  5. }

Perl

  1. if ('2010-01-03' =~ /^(\d{4})-(\d{1,2})-(\d{1,2})$/) {
  2.     my ($year$month$day) = ($1$2$3);
  3.     ...
  4. }
  1. my ($year$month$day) = ('2010-01-03' =~ /^(\d{4})-(\d{1,2})-(\d{1,2})$/);
  2. if (defined $year) {
  3.     ...
  4. }

正規表現を使って、日付を表す文字列を全て抜き出す

Java

  1. // import java.util.regex.*;
  2. String s = "2010-1-3 から 2010-12-31 まで";
  3. List<String> dates = new ArrayList<String>();
  4. Matcher matcher = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}").matcher(s);
  5. while (matcher.find()) {
  6.     dates.add(matcher.group());
  7. }

Groovy

  1. def s = '2010-1-3 から 2010-12-31 まで'
  2. def dates = s.findAll(/\d{4}-\d{1,2}-\d{1,2}/)

Scala

  1. var s = "2010-1-3 から 2010-12-31 まで"
  2. val re = """\d{4}-\d{1,2}-\d{1,2}""".r              // r の型は scala.util.matching.Regex
  3. val dates = re.findAllIn(s)                         // dates の型は scala.util.matching.Regex.MatchIterator

Erlang

  1. S = "2010-1-3 から 2010-12-31 まで",
  2. {match, Captured} = re:run(S, "\\d{4}-\\d{1,2}-\\d{1,2}", [global, {capture, first, list}]),
  3. Dates = [Date || [Date] <- Captured].               %% Captured は“文字列のリストのリスト”なので、“文字列のリスト”に変換する

Haskell

  1. -- import Text.Regex
  2. findAll regex s =
  3.     case matchRegexAll regex s of
  4.         Just (_, matched, suffix, _) -> matched : findAll regex suffix
  5.         otherwise -> []
  1. -- import List
  2. -- import Text.Regex
  3. findAll regex = unfoldr $ \ s ->
  4.     case matchRegexAll regex s of
  5.         Just (_, matched, suffix, _) -> Just (matched, suffix)
  6.         otherwise -> Nothing
  1. let s = "2010-1-3 から 2010-12-31 まで"
  2. let regex = mkRegex "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"
  3. let dates = findAll regex s

PowerShell

  1. $s = '2010-1-3 から 2010-12-31 まで'
  2. $dates = ([Regex] '\d{4}-\d{1,2}-\d{1,2}').Matches($s) | foreach { $_.Value }

F#

  1. // open System.Text.RegularExpressions
  2. let s = "2010-1-3 から 2010-12-31 まで"
  3. let r = new Regex @"\d{4}-\d{1,2}-\d{1,2}"
  4. let dates = [for m in r.Matches s -> m.Value]

C#

C# 3.0以降
  1. // using System.Linq;
  2. // using System.Text.RegularExpressions;
  3. var s = "2010-1-3 から 2010-12-31 まで";
  4. var r = new Regex(@"\d{4}-\d{1,2}-\d{1,2}");
  5. var dates = r.Matches(s).Cast<Match>().Select(m => m.Value);                // dates の型は IEnumerable<string>

C++

  1. #include <vector>
  2. #include <boost/regex.hpp>
  3. struct push_to_vector {
  4.     vector<string>& v;
  5.     push_to_vector(vector<string>& v) : v(v) { }
  6.     bool operator()(const boost::match_results<string::const_iterator>& m) {
  7.         v.push_back(m.str(0));
  8.         return true;
  9.     }
  10. };
  1. string s = "2010-1-3 から 2010-12-31 まで";
  2. boost::regex r("\\d{4}-\\d{1,2}-\\d{1,2}");
  3. vector<string> dates;
  4. boost::regex_grep(push_to_vector(dates), s, r);

Go

  1. // import "os"
  2. // import "regexp"
  3. r, err := regexp.Compile("[0-9][0-9][0-9][0-9]-[0-1]?[0-9]-[0-3]?[0-9]")
  4. if err != nil { goto onError }
  5. dates := r.FindAllString("2010-1-3 から 2010-12-31 まで"0)                // dates の型は []string
  6. ...
  7. return
  8. onError:
  9. fmt.Fprintf(os.Stderr, "%v\n", err)

Dart

  1. String s = '2010-1-3 から 2010-12-31 まで';
  2. Iterable matches = new RegExp(@'\d{4}-\d{1,2}-\d{1,2}').allMatches(s);
  3. List dates = [];
  4. for (Match m in matches) {
  5.     dates.add(m[0]);
  6. }

ActionScript

  1. var s:String = '2010-1-3 から 2010-12-31 まで';
  2. var r:RegExp = /\d{4}-\d{1,2}-\d{1,2}/g;
  3. var dates:Array = [];
  4. var result:Object;
  5. while ((result = r.exec(s)) != null) {
  6.     dates.push(result[0]);
  7. }

JavaScript

  1. var s = '2010-1-3 から 2010-12-31 まで';
  2. var dates = s.match(/\d{4}-\d{1,2}-\d{1,2}/g);

CoffeeScript

  1. s = '2010-1-3 から 2010-12-31 まで'
  2. dates = s.match /\d{4}-\d{1,2}-\d{1,2}/g

Lua

  1. s = '2010-1-3 から 2010-12-31 まで'
  2. dates = {}
  3. for date in s:gmatch('%d%d%d%d%-%d%d?%-%d%d?'do
  4.     table.insert(dates, date)
  5. end

Ruby

  1. s = '2010-1-3 から 2010-12-31 まで'
  2. dates = s.scan /\d{4}-\d{1,2}-\d{1,2}/

Python

  1. # import re
  2. s = '2010-1-3 から 2010-12-31 まで'
  3. dates = re.compile(r'\d{4}-\d{1,2}-\d{1,2}').findall(s)
  1. # import re
  2. s = '2010-1-3 から 2010-12-31 まで'
  3. dates = re.findall(r'\d{4}-\d{1,2}-\d{1,2}', s)

PHP

  1. $s = '2010-1-3 から 2010-12-31 まで';
  2. $dates = array();
  3. mb_ereg_search_init($s'\d{4}-\d{1,2}-\d{1,2}');
  4. while ($regs = mb_ereg_search_regs()) {
  5.     array_push($dates$regs[0]);
  6. }

Perl

  1. my $s = '2010-1-3 から 2010-12-31 まで';
  2. my @dates = $s =~ /\d{4}-\d{1,2}-\d{1,2}/g;

正規表現を使って、日付を表す文字列の区切りを全てハイフンからスラッシュに置き換える

Java

  1. String s = "2010-1-3 から 2010-12-31 まで";
  2. s = s.replaceAll("(\\d{4})-(\\d{1,2})-(\\d{1,2})""$1/$2/$3");
  1. // import java.util.regex.Pattern;
  2. String s = "2010-1-3 から 2010-12-31 まで";
  3. Pattern p = Pattern.compile("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
  4. s = p.matcher(s).replaceAll("$1/$2/$3");
式を使って置換する
  1. // import java.util.regex.*;
  2. String s = "2010-1-3 から 2010-12-31 まで";
  3. StringBuffer sb = new StringBuffer();
  4. Matcher m = Pattern.compile("(\\d{4})-(\\d{1,2})-(\\d{1,2})").matcher(s);
  5. while (m.find()) {
  6.     String replacement = m.group(1) + "/" + m.group(2) + "/" + m.group(3);
  7.     m.appendReplacement(sb, replacement);
  8. }
  9. m.appendTail(sb);
  10. s = sb.toString();
グループ名を付ける
Java 7以降
  1. String s = "2010-1-3 から 2010-12-31 まで";
  2. s = s.replaceAll("(?<year>\\d{4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})""${year}/${month}/${day}");
  1. // import java.util.regex.Pattern;
  2. String s = "2010-1-3 から 2010-12-31 まで";
  3. Pattern p = Pattern.compile("(?<year>\\d{4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})");
  4. s = p.matcher(s).replaceAll("${year}/${month}/${day}");
グループ名を付け、式を使って置換する
Java 7以降
  1. // import java.util.regex.*;
  2. String s = "2010-1-3 から 2010-12-31 まで";
  3. StringBuffer sb = new StringBuffer();
  4. Matcher m = Pattern.compile("(?<year>\\d{4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})").matcher(s);
  5. while (m.find()) {
  6.     String replacement = m.group("year") + "/" + m.group("month") + "/" + m.group("day");
  7.     m.appendReplacement(sb, replacement);
  8. }
  9. m.appendTail(sb);
  10. s = sb.toString();

Groovy

  1. def s = '2010-1-3 から 2010-12-31 まで'
  2. s = s.replaceAll(/(\d{4})-(\d{1,2})-(\d{1,2})/'$1/$2/$3')
  1. def s = '2010-1-3 から 2010-12-31 まで'
  2. s = (~ /(\d{4})-(\d{1,2})-(\d{1,2})/).matcher(s).replaceAll('$1/$2/$3')
式を使って置換する
  1. def s = '2010-1-3 から 2010-12-31 まで'
  2. s = s.replaceAll(/(\d{4})-(\d{1,2})-(\d{1,2})/) { _, year, month, day -> "$year/$month/$day" }
グループ名を付ける
Java 7以降
  1. def s = '2010-1-3 から 2010-12-31 まで'
  2. s = s.replaceAll(/(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})/'${year}/${month}/${day}')
グループ名を付け、式を使って置換する
Java 7以降
  1. def s = '2010-1-3 から 2010-12-31 まで'
  2. def sb = new StringBuffer()
  3. def m = (~ /(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})/).matcher(s)
  4. while (m.find()) {
  5.     def replacement = "${m.group('year')}/${m.group('month')}/${m.group('day')}"
  6.     m.appendReplacement(sb, replacement)
  7. }
  8. m.appendTail(sb)
  9. s = sb.toString()

Scala

  1. var s = "2010-1-3 から 2010-12-31 まで"
  2. s = """(\d{4})-(\d{1,2})-(\d{1,2})""".r.replaceAllIn(s, "$1/$2/$3")
式を使って置換する
  1. var s = "2010-1-3 から 2010-12-31 まで"
  2. s = """(\d{4})-(\d{1,2})-(\d{1,2})""".r.replaceAllIn(s, m => "%s/%s/%s".format(m.subgroups: _*))
  1. // import scala.util.matching.Regex.Groups
  2. var s = "2010-1-3 から 2010-12-31 まで"
  3. s = """(\d{4})-(\d{1,2})-(\d{1,2})""".r.replaceAllIn(s,
  4.     _ match { case Groups(year, month, day) => "%s/%s/%s".format(year, month, day) })
グループ名を付ける
Java 7以降
  1. var s = "2010-1-3 から 2010-12-31 まで"
  2. s = """(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})""".r.replaceAllIn(s, "${year}/${month}/${day}")
グループ名を付け、式を使って置換する
Java 7以降
  1. // import java.util.regex.Pattern
  2. var s = "2010-1-3 から 2010-12-31 まで"
  3. val sb = new StringBuffer
  4. val m = Pattern.compile("""(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})""").matcher(s)
  5. while (m.find) {
  6.     val replacement = "%s/%s/%s".format(m.group("year"), m.group("month"), m.group("day"))
  7.     m.appendReplacement(sb, replacement)
  8. }
  9. m.appendTail(sb)
  10. s = sb.toString

Erlang

  1. S = "2010-1-3 から 2010-12-31 まで",
  2. Result = re:replace(S, "(\\d{4})-(\\d{1,2})-(\\d{1,2})""\\1/\\2/\\3", [global, {return, list}]).

Haskell

式を使って置換する
  1. -- import Text.Regex
  2. replaceAll regex s f =
  3.     case matchRegexAll regex s of
  4.         Just (prefix, _, suffix, groups) -> prefix ++ f groups ++ replaceAll regex suffix f
  5.         otherwise -> s
  1. let s = "2010-1-3 から 2010-12-31 まで"
  2. let regex = mkRegex "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})"
  3. let result = replaceAll regex s $ \ [year, month, day] -> year ++ "/" ++ month ++ "/" ++ day

PowerShell

  1. $s = '2010-1-3 から 2010-12-31 まで'
  2. $s = $s -replace '(\d{4})-(\d{1,2})-(\d{1,2})''$1/$2/$3'
  1. $s = '2010-1-3 から 2010-12-31 まで'
  2. $s = ([Regex] '(\d{4})-(\d{1,2})-(\d{1,2})').Replace($s'$1/$2/$3')
式を使って置換する
  1. $s = '2010-1-3 から 2010-12-31 まで'
  2. $s = ([Regex] '(\d{4})-(\d{1,2})-(\d{1,2})').Replace($s, { '{1}/{2}/{3}' -f ([string[]] $args[0].Groups) })
グループ名を付ける
  1. $s = '2010-1-3 から 2010-12-31 まで'
  2. $s = ([Regex] '(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})').Replace($s'${year}/${month}/${day}')
グループ名を付け、式を使って置換する
  1. $s = '2010-1-3 から 2010-12-31 まで'
  2. $s = ([Regex] '(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})').Replace($s, {
  3.     param($m)
  4.     '{0}/{1}/{2}' -f (echo year month day | foreach { $m.Groups[$_] })          # echo は配列を作るコマンド
  5. })

F#

  1. // open System.Text.RegularExpressions
  2. let mutable s = "2010-1-3 から 2010-12-31 まで"
  3. s <- (new Regex @"(\d{4})-(\d{1,2})-(\d{1,2})").Replace(s, "$1/$2/$3")
式を使って置換する
  1. // open System.Text.RegularExpressions
  2. let format pattern (m : Match) = System.String.Format(pattern, [| for g in m.Groups -> box g |])
  3. let mutable s = "2010-1-3 から 2010-12-31 まで"
  4. s <- (new Regex @"(\d{4})-(\d{1,2})-(\d{1,2})").Replace(s, format "{1}/{2}/{3}")
グループ名を付ける
  1. // open System.Text.RegularExpressions
  2. let mutable s = "2010-1-3 から 2010-12-31 まで"
  3. s <- (new Regex @"(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})").Replace(s, "${year}/${month}/${day}")
グループ名を付け、式を使って置換する
  1. // open System.Text.RegularExpressions
  2. let format pattern (m : Match) =
  3.     let f (n : Match) = m.Groups.[n.Groups.[1].Value].Value
  4.     (new Regex @"\{(\w+)}").Replace(pattern, f)
  5. let mutable s = "2010-1-3 から 2010-12-31 まで"
  6. s <- (new Regex @"(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})").Replace(s, format "{year}/{month}/{day}")

C#

  1. // using System.Text.RegularExpressions;
  2. string s = "2010-1-3 から 2010-12-31 まで";
  3. s = new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})").Replace(s, "$1/$2/$3");
式を使って置換する
C# 3.0以降
  1. // using System.Text.RegularExpressions;
  2. public static string Format(Match match, string format) {
  3.     return string.Format(format, match.Groups.Cast<Group>().ToArray());
  4. }
  1. var s = "2010-1-3 から 2010-12-31 まで";
  2. s = new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})").Replace(s, m => Format(m, "{1}/{2}/{3}"));
グループ名を付ける
  1. // using System.Text.RegularExpressions;
  2. string s = "2010-1-3 から 2010-12-31 まで";
  3. s = new Regex(@"(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})").Replace(s, "${year}/${month}/${day}");
グループ名を付け、式を使って置換する
C# 3.0以降
  1. // using System.Text.RegularExpressions;
  2. public static string Format(Match match, string format) {
  3.     return new Regex(@"\{(\w+)}").Replace(format, m => match.Groups[m.Groups[1].Value].Value);
  4. }
  1. var s = "2010-1-3 から 2010-12-31 まで";
  2. s = new Regex(@"(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})").Replace(s, m => Format(m, "{year}/{month}/{day}"));

C++

Boost を使った場合
  1. #include <boost/regex.hpp>
  2. boost::regex r("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
  3. string s = "2010-1-3 から 2010-12-31 まで";
  4. s = boost::regex_replace(s, r, "$1/$2/$3", boost::format_all);

Go

式を使って置換する
  1. // import "os"
  2. // import "regexp"
  3. // import "strings"
  4. s := "2010-1-3 から 2010-12-31 まで"
  5. r, err := regexp.Compile("[0-9][0-9][0-9][0-9]-[0-1]?[0-9]-[0-3]?[0-9]")
  6. if err != nil { goto onError }
  7. s = r.ReplaceAllStringFunc(s, func(matched stringstring {
  8.     return strings.Replace(matched, "-""/", -1)                       // matched には "2010-1-3" などが渡される
  9. })
  10. ...
  11. return
  12. onError:
  13. fmt.Fprintf(os.Stderr, "%v\n", err)
グループを使い、式を使って置換する
(「$1」などが使えないので、それに代わる関数を用意する)
  1. // import "os"
  2. // import "regexp"
  3. func ReplaceAllStringSubmatchFunc(re *regexp.Regexp, src string, repl func([]stringstringstring {
  4.     result := ""
  5.     for {
  6.         indexes := re.FindStringSubmatchIndex(src)
  7.         if len(indexes) == 0 {
  8.             result += src
  9.             break
  10.         }
  11.         groupCount := len(indexes) / 2
  12.         groups := make([]string, groupCount)
  13.         for i := 0; i < groupCount; i++ {
  14.             groups[i] = src[indexes[i * 2]:indexes[i * 2 + 1]]
  15.         }
  16.         result += src[:indexes[0]] + repl(groups)
  17.         src = src[indexes[1]:]
  18.     }
  19.     return result
  20. }
  1. s := "2010-1-3 から 2010-12-31 まで"
  2. r, err := regexp.Compile("([0-9][0-9][0-9][0-9])-([0-1]?[0-9])-([0-3]?[0-9])")
  3. if err != nil { goto onError }
  4. s := ReplaceAllStringSubmatchFunc(r, s, func(groups []stringstring {
  5.     return groups[1] + "/" + groups[2] + "/" + groups[3]                    // groups には {"2010-1-3", "2010", "1", "3"} などが渡される
  6. })
  7. ...
  8. return
  9. onError:
  10. fmt.Fprintf(os.Stderr, "%v\n", err)

Dart

式を使って置換する
  1. String replaceAll(RegExp re, String str, Function replace) {
  2.     var sb = new StringBuffer();
  3.     int index = 0;
  4.     for (Match m in re.allMatches(str)) {
  5.         sb.add(str.substring(index, m.start()));
  6.         sb.add(replace(m));
  7.         index = m.end();
  8.     }
  9.     sb.add(str.substring(index));
  10.     return sb.toString();
  11. }
  1. String s = '2010-1-3 から 2010-12-31 まで';
  2. s = replaceAll(new RegExp(@'(\d{4})-(\d{1,2})-(\d{1,2})'), s, (m) => '${m[1]}/${m[2]}/${m[3]}');

ActionScript

  1. var s:String = '2010-1-3 から 2010-12-31 まで';
  2. s = s.replace(/(\d{4})-(\d{1,2})-(\d{1,2})/g'$1/$2/$3');
式を使って置換する
  1. var s:String = '2010-1-3 から 2010-12-31 まで';
  2. s = s.replace(/(\d{4})-(\d{1,2})-(\d{1,2})/gfunction():String {
  3.     return StringUtil.substitute('{1}/{2}/{3}', arguments);
  4. });

JavaScript

  1. var s = '2010-1-3 から 2010-12-31 まで';
  2. s = s.replace(/(\d{4})-(\d{1,2})-(\d{1,2})/g'$1/$2/$3');
式を使って置換する
  1. var s = '2010-1-3 から 2010-12-31 まで';
  2. s = s.replace(/(\d{4})-(\d{1,2})-(\d{1,2})/gfunction(_, year, month, day) {
  3.     return year + '/' + month + '/' + day;
  4. });

CoffeeScript

  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s = s.replace /(\d{4})-(\d{1,2})-(\d{1,2})/g'$1/$2/$3'
式を使って置換する
  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s = s.replace /(\d{4})-(\d{1,2})-(\d{1,2})/g, (_, year, month, day) -> "#{year}/#{month}/#{day}"

Lua

  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s = s:gsub('(%d%d%d%d)%-(%d%d?)%-(%d%d?)''%1/%2/%3')
式を使って置換する
  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s = s:gsub('(%d%d%d%d)%-(%d%d?)%-(%d%d?)'function(...) return string.format('%s/%s/%s', unpack(arg)) end)

Ruby

  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s.gsub! /(\d{4})-(\d{1,2})-(\d{1,2})/'\1/\2/\3'
式を使って置換する
  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s.gsub!(/(\d{4})-(\d{1,2})-(\d{1,2})/) { "#{$1}/#{$2}/#{$3}" }
  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s.gsub!(/(\d{4})-(\d{1,2})-(\d{1,2})/) { '%s/%s/%s' % $~.captures }
Ruby 1.9以降で、グループ名を付け、式を使って置換する
  1. s = '2010-1-3 から 2010-12-31 まで'
  2. s.gsub!(/(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})/) { "#{$~[:year]}/#{$~[:month]}/#{$~[:day]}" }
  1. class MatchData
  2.   def format pattern
  3.     pattern.gsub(/\$(\w+)/) { self[$1] }
  4.   end
  5. end
  6. s = '2010-1-3 から 2010-12-31 まで'
  7. s.gsub!(/(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})/) { $~.format '$year/$month/$day' }
  1. # $~.foo の形で $~[:foo] を取り出せるようにする
  2. class MatchData
  3.   def method_missing name, *args
  4.     self[name]
  5.   end
  6. end
  7. s = '2010-1-3 から 2010-12-31 まで'
  8. s.gsub!(/(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})/) { $~.instance_eval { "#{year}/#{month}/#{day}" } }

Python

  1. # import re
  2. s = '2010-1-3 から 2010-12-31 まで'
  3. r = re.compile(r'(\d{4})-(\d{1,2})-(\d{1,2})')
  4. s = r.sub(r'\1/\2/\3', s)
式を使って置換する
  1. # import re
  2. s = '2010-1-3 から 2010-12-31 まで'
  3. r = re.compile(r'(\d{4})-(\d{1,2})-(\d{1,2})')
  4. s = r.sub(lambda m: '%s/%s/%s' % m.groups(), s)
グループ名を付ける
  1. # import re
  2. s = '2010-1-3 から 2010-12-31 まで'
  3. r = re.compile(r'(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})')
  4. s = r.sub(r'\g<year>/\g<month>/\g<day>', s)
グループ名を付け、式を使って置換する
  1. # import re
  2. s = '2010-1-3 から 2010-12-31 まで'
  3. r = re.compile(r'(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})')
  4. def format(template):
  5.     return lambda match: template.format(**match.groupdict())
  6. s = r.sub(format('{year}/{month}/{day}'), s)
  1. # import re
  2. # import string
  3. s = '2010-1-3 から 2010-12-31 まで'
  4. r = re.compile(r'(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})')
  5. def format(template):
  6.     return lambda match: string.Template(template).substitute(match.groupdict())
  7. s = r.sub(format('$year/$month/$day'), s)

PHP

  1. $s = '2010-1-3 から 2010-12-31 まで';
  2. $s = mb_ereg_replace('(\d{4})-(\d{1,2})-(\d{1,2})''\1/\2/\3'$s);
式を使って置換する
  1. $s = '2010-1-3 から 2010-12-31 まで';
  2. $s = mb_ereg_replace('(\d{4})-(\d{1,2})-(\d{1,2})''sprintf("%s/%s/%s", \1, \2, \3)'$s'e');

Perl

  1. my $s = '2010-1-3 から 2010-12-31 まで';
  2. $s =~ s|(\d{4})-(\d{1,2})-(\d{1,2})|\1/\2/\3|g;
式を使って置換する
  1. my $s = '2010-1-3 から 2010-12-31 まで';
  2. $s =~ s|(\d{4})-(\d{1,2})-(\d{1,2})|sprintf '%s/%s/%s', $1, $2, $3|eg;

文字列の値に応じた数値を変数に代入する(多分岐)

Java

Java 7以降
  1. String s = "zero";
  2. int x;
  3. switch (s) {
  4. case "Positive":
  5. case "positive":
  6.     x = 1;
  7.     break;
  8. case "Negative":
  9. case "negative":
  10.     x = -1;
  11.     break;
  12. default:
  13.     x = 0;
  14. }
Java 6まで
  1. String s = "zero";
  2. int x = s.equals("Positive") || s.equals("positive") ?  1 :
  3.         s.equals("Negative") || s.equals("negative") ? -1 : 0;
  1. String s = "zero";
  2. int x;
  3. if (s.equals("Positive") || s.equals("positive")) {
  4.     x = 1;
  5. else if (s.equals("Negative") || s.equals("negative")) {
  6.     x = -1;
  7. else {
  8.     x = 0;
  9. }

Groovy

  1. def s = 'zero'
  2. def x = s == 'Positive' || s == 'positive' ?  1 :
  3.         s == 'Negative' || s == 'negative' ? -1 : 0
  1. def s = 'zero'
  2. def x
  3. switch (s) {
  4. case ['Positive''positive']:
  5.     x = 1
  6.     break
  7. case ['Negative''negative']:
  8.     x = -1
  9.     break
  10. default:
  11.     x = 0
  12. }

Scala

  1. val s = "zero"
  2. val x = if (s == "Positive" || s == "positive")  1 else
  3.         if (s == "Negative" || s == "negative") -1 else 0
  1. val s = "zero"
  2. val x = s match {
  3.     case "Positive" | "positive" =>  1
  4.     case "Negative" | "negative" => -1
  5.     case _                       =>  0
  6. }

Erlang

  1. S = "zero",
  2. X = if
  3.         (S =:= "Positive"orelse (S =:= "positive") ->  1;
  4.         (S =:= "Negative"orelse (S =:= "negative") -> -1;
  5.         true                                         ->  0
  6.     end.
  1. S = "zero",
  2. X = case S of
  3.         "Positive" ->  1;
  4.         "positive" ->  1;
  5.         "Negative" -> -1;
  6.         "negative" -> -1;
  7.         _          ->  0
  8.     end.

Haskell

  1. let s = "zero"
  2. let x = case s of
  3.             "Positive" ->  1
  4.             "positive" ->  1
  5.             "Negative" -> -1
  6.             "negative" -> -1
  7.             _          ->  0

PowerShell

  1. $s = 'zero'
  2. $x = switch -c ($s) {           # -c は大文字・小文字を区別するオプション
  3.     'Positive' {  1 }
  4.     'positive' {  1 }
  5.     'Negative' { -1 }
  6.     'negative' { -1 }
  7.     default    {  0 }
  8. }

F#

  1. let s = "zero"
  2. let x = match s with
  3.         | "Positive" | "positive" ->  1
  4.         | "Negative" | "negative" -> -1
  5.         | _                       ->  0
  1. let s = "zero"
  2. let x = s |> function
  3.     | "Positive" | "positive" ->  1
  4.     | "Negative" | "negative" -> -1
  5.     | _                       ->  0

C#

  1. string s = "zero";
  2. int x = s == "Positive" || s == "positive" ?  1 :
  3.         s == "Negative" || s == "negative" ? -1 : 0;
  1. string s = "zero";
  2. int x;
  3. switch (s) {
  4. case "Positive":
  5. case "positive":
  6.     x = 1;
  7.     break;
  8. case "Negative":
  9. case "negative":
  10.     x = -1;
  11.     break;
  12. default:
  13.     x = 0;
  14. }

C++

  1. string s = "zero";
  2. int x = s == "Positive" || s == "positive" ?  1 :
  3.         s == "Negative" || s == "negative" ? -1 : 0;

Go

  1. s := "zero"
  2. var x int
  3. switch s {
  4. case "Positive""positive": x =  1
  5. case "Negative""negative": x = -1
  6. default:                     x =  0
  7. }

Dart

  1. String s = 'zero';
  2. int x;
  3. switch (s) {
  4. case 'Positive':
  5. case 'positive':
  6.     x = 1;
  7.     break;
  8. case 'Negative':
  9. case 'negative':
  10.     x = -1;
  11.     break;
  12. default:
  13.     x = 0;
  14. }

ActionScript

  1. var s:String = 'zero';
  2. var x:int = s == 'Positive' || s == 'positive' ?  1 :
  3.             s == 'Negative' || s == 'negative' ? -1 : 0;
  1. var s:String = 'zero';
  2. var x:int;
  3. switch (s) {
  4. case 'Positive':
  5. case 'positive':
  6.     x = 1;
  7.     break;
  8. case 'Negative':
  9. case 'negative':
  10.     x = -1;
  11.     break;
  12. default:
  13.     x = 0;
  14. }

JavaScript

  1. var s = 'zero';
  2. var x = s == 'Positive' || s == 'positive' ?  1 :
  3.         s == 'Negative' || s == 'negative' ? -1 : 0;
  1. var s = 'zero';
  2. var x;
  3. switch (s) {
  4. case 'Positive':
  5. case 'positive':
  6.     x = 1;
  7.     break;
  8. case 'Negative':
  9. case 'negative':
  10.     x = -1;
  11.     break;
  12. default:
  13.     x = 0;
  14. }

CoffeeScript

  1. s = 'zero'
  2. x = if s == 'Positive' || s == 'positive' then  1 else
  3.     if s == 'Negative' || s == 'negative' then -1 else 0
  1. s = 'zero'
  2. x = switch s
  3.     when 'Positive''positive' then  1
  4.     when 'Negative''negative' then -1
  5.     else                              0

Lua

  1. s = 'zero'
  2. x = (s == 'Positive' or s == 'positive'and  1 or
  3.     (s == 'Negative' or s == 'negative'and -1 or 0

Ruby

  1. s = 'zero'
  2. x = s == 'Positive' || s == 'positive' ?  1 :
  3.     s == 'Negative' || s == 'negative' ? -1 : 0
  1. s = 'zero'
  2. x = case s
  3.     when 'Positive''positive' then  1
  4.     when 'Negative''negative' then -1
  5.     else                              0
  6.     end

Python

  1. s = 'zero'
  2. x = ( 1 if s == 'Positive' || s == 'positive' else
  3.      -1 if s == 'Negative' || s == 'negative' else 0)
  1. s = 'zero'
  2. if   s == 'Positive' || s == 'positive':  x =  1
  3. elif s == 'Negative' || s == 'negative':  x = -1
  4. else:                                     x =  0

PHP

  1. $s = 'zero';
  2. $x = $s === 'Positive' || $s === 'positive' ?  1 :
  3.     ($s === 'Negative' || $s === 'negative' ? -1 : 0);          // 括弧が必須
  1. $s = 'zero';
  2. switch ($s) {
  3. case 'Positive':
  4. case 'positive':
  5.     $x = 1;
  6.     break;
  7. case 'Negative':
  8. case 'negative':
  9.     $x = -1;
  10.     break;
  11. default:
  12.     $x = 0;
  13. }

Perl

  1. my $s = 'zero';
  2. my $x = $s eq 'Positive' || $s eq 'positive' ?  1 :
  3.         $s eq 'Negative' || $s eq 'negative' ? -1 : 0;
  1. # use Switch;
  2. my $s = 'zero';
  3. my $x;
  4. switch ($s) {
  5. case 'Positive' { $x =  1; }
  6. case 'positive' { $x =  1; }
  7. case 'Negative' { $x = -1; }
  8. case 'negative' { $x = -1; }
  9. else            { $x =  0; }
  10. }

型に応じた文字列を変数に代入する

Java

  1. Object obj = ...;
  2. String s;
  3. if (obj instanceof String) {                                    // 文字列の場合は2つ並べる
  4.     s = (String)obj + obj;
  5. else if (obj instanceof Integer) {                            // 整数の場合は2倍する
  6.     s = Integer.toString(((Integer)obj).intValue() * 2);
  7. else {                                                        // それ以外の場合は型名
  8.     s = obj.getClass().getName();
  9. }

Groovy

  1. def obj = ...
  2. def s
  3. switch (obj) {
  4. case String:                        // 文字列の場合は2つ並べる
  5.     s = obj * 2
  6.     break
  7. case Number:                        // 数値の場合は2倍する
  8.     s = (obj * 2).toString()
  9.     break
  10. default:                            // それ以外の場合は型名
  11.     s = obj.class.name
  12. }

Scala

  1. val any: Any = ...
  2. val s = any match {
  3.     case s: String => s * 2                         // 文字列の場合は2つ並べる
  4.     case i: Int    => (i * 2).toString              // 整数の場合は2倍する
  5.     case a: AnyRef => a.getClass.getName            // それ以外の場合は型名
  6. }

Erlang

  1. Obj = ...,
  2. S = if
  3.         is_list(Obj) -> Obj ++ Obj;                 %% 文字列(文字のリスト)の場合は2つ並べる
  4.         is_integer(Obj) -> Obj * 2;                 %% 整数の場合は2倍する
  5.         true -> io:format("~p", [Obj])              %% それ以外の場合は文字列表現
  6.     end.

PowerShell

  1. $obj = ...
  2. $s = switch ($obj) {
  3.     { $_ -is [string] } { $_ * 2 }                  # 文字列の場合は2つ並べる
  4.     { $_ -is [int] } { ($_ * 2).ToString() }        # 整数の場合は2倍する
  5.     default { $_.GetType().FullName }               # それ以外の場合は型名
  6. }

F#

  1. let obj = ...
  2. let s = match obj with
  3.     | :? string as s -> s + s                       // 文字列の場合は2つ並べる
  4.     | :? int as i    -> (i * 2).ToString()          // 整数の場合は2倍する
  5.     | _              -> obj.GetType().FullName      // それ以外の場合は型名

C#

  1. object obj = ...;
  2. string s;
  3. if (obj is string) {                    // 文字列の場合は2つ並べる
  4.     s = (string)obj + obj;
  5. else if (obj is int) {                // 整数の場合は2倍する
  6.     s = ((int)obj * 2).ToString();
  7. else {                                // それ以外の場合は型名
  8.     s = obj.GetType().FullName;
  9. }

Go

  1. obj := ...
  2. var s string
  3. switch t := obj.(type) {
  4. case string:                            // 文字列の場合は2つ並べる
  5.     s = t + t
  6. case int:                               // 整数の場合は2倍する
  7.     s = fmt.Sprintf("%d", t * 2)
  8. default:                                // それ以外の場合は型名
  9.     s = fmt.Sprintf("%T", t)
  10. }

Dart

  1. var obj = ...;
  2. String s;
  3. switch (true) {
  4. case obj is String:
  5.     s = obj + obj;              // 文字列の場合は2つ並べる
  6.     break;
  7. case obj is num:
  8.     s = '${obj * 2}';           // 数値の場合は2倍する
  9.     break;
  10. default:
  11.     s = '$obj';                 // それ以外の場合は文字列表現
  12. }

ActionScript

  1. var obj:Object = ...;
  2. var t:String = typeof obj;
  3. var s:String;
  4. switch (t) {
  5. case 'string':
  6.     s = obj + obj;              // 文字列の場合は2つ並べる
  7.     break;
  8. case 'number':
  9.     s = ((obj as Number) * 2).toString();       // 数値の場合は2倍する
  10.     break;
  11. default:
  12.     s = t;                      // それ以外の場合は型名
  13. }

JavaScript

  1. var obj = ...;
  2. var t = typeof(obj);
  3. var s;
  4. switch (t) {
  5. case 'string':                  // 文字列の場合は2つ並べる
  6.     s = obj + obj;
  7.     break;
  8. case 'number':                  // 数値の場合は2倍する
  9.     s = String(obj * 2);
  10.     break;
  11. default:                        // それ以外の場合は型名
  12.     s = t;
  13. }

CoffeeScript

  1. obj = ...
  2. t = typeof obj
  3. s = switch t
  4.     when 'string' then obj + obj                # 文字列の場合は2つ並べる
  5.     when 'number' then String obj * 2           # 数値の場合は2倍する
  6.     else               t                        # それ以外の場合は型名

Lua

  1. obj = ...
  2. s = type(obj) == 'string' and obj .. obj or     -- 文字列の場合は2つ並べる
  3.     type(obj) == 'number' and obj * 2    or     -- 数値の場合は2倍する
  4.                               type(obj)         -- それ以外の場合は型名

Ruby

  1. obj = ...
  2. s = case obj
  3.     when String then obj * 2                    # 文字列の場合は2つ並べる
  4.     when Numeric then (obj * 2).to_s            # 数値の場合は2倍する
  5.     else obj.class.name                         # それ以外の場合は型名
  6.     end

Python

  1. obj = ...
  2. s = (obj * 2            if isinstance(obj, str) else        # 文字列の場合は2つ並べる
  3.      str(obj * 2)       if isinstance(obj, int) else        # 整数の場合は2倍する
  4.      type(obj).__name__)                                    # それ以外の場合は型名

PHP

  1. $obj = ...
  2. $type = gettype($obj);
  3. switch ($type) {
  4. case 'string':                      // 文字列の場合は2つ並べる
  5.     $s = $obj . $obj;
  6.     break;
  7. case 'integer':                     // 数値の場合は2倍する
  8.     $s = (string)($obj * 2);
  9.     break;
  10. case 'object':                      // オブジェクトの場合はクラス名
  11.     $s = get_class($obj);
  12.     break;
  13. default:                            // それ以外(配列など)は型名
  14.     $s = $type;
  15. }

指定された年が閏年かどうかを判定する関数

Java

  1. public static boolean isLeapYear(int year) {
  2.     if (year % 400 == 0return true;           // 400で割り切れる年は、閏年である
  3.     if (year % 100 == 0return false;          // 400で割り切れず100で割り切れる年は、閏年でない
  4.     if (year %   4 == 0return true;           // 100で割り切れず4で割り切れる年は、閏年である
  5.     return false;                               // 4で割り切れない年は、閏年でない
  6. }

Groovy

  1. def isLeapYear(year) {
  2.     if      (year % 400 == 0true;             // 400で割り切れる年は、閏年である
  3.     else if (year % 100 == 0false;            // 400で割り切れず100で割り切れる年は、閏年でない
  4.     else if (year %   4 == 0true;             // 100で割り切れず4で割り切れる年は、閏年である
  5.     else                      false             // 4で割り切れない年は、閏年でない
  6. }

Scala

  1. def isLeapYear(year: Int) =
  2.     (year % 4, year % 100, year % 400match {
  3.         case (000) => true                  // 400で割り切れる年は、閏年である
  4.         case (00, _) => false                 // 400で割り切れず100で割り切れる年は、閏年でない
  5.         case (0, _, _) => true                  // 100で割り切れず4で割り切れる年は、閏年である
  6.         case (_, _, _) => false                 // 4で割り切れない年は、閏年でない
  7.     }

Erlang

  1. is_leap_year(Year) -> is_leap_year(Year rem 4, Year rem 100, Year rem 400).
  2. is_leap_year(000) -> true;                  %% 400で割り切れる年は、閏年である
  3. is_leap_year(00, _) -> false;                 %% 400で割り切れず100で割り切れる年は、閏年でない
  4. is_leap_year(0, _, _) -> true;                  %% 100で割り切れず4で割り切れる年は、閏年である
  5. is_leap_year(_, _, _) -> false.                 %% 4で割り切れない年は、閏年でない

Haskell

  1. isLeapYear year =
  2.     case (year `mod` 4, year `mod` 100, year `mod` 400of
  3.         (000) -> True                       -- 400で割り切れる年は、閏年である
  4.         (00, _) -> False                      -- 400で割り切れず100で割り切れる年は、閏年でない
  5.         (0, _, _) -> True                       -- 100で割り切れず4で割り切れる年は、閏年である
  6.         (_, _, _) -> False                      -- 4で割り切れない年は、閏年でない

PowerShell

  1. function isLeapYear($year) {
  2.     switch ($year) {
  3.     { $_ % 400 -eq 0 } { return $True  }        # 400で割り切れる年は、閏年である
  4.     { $_ % 100 -eq 0 } { return $False }        # 400で割り切れず100で割り切れる年は、閏年でない
  5.     { $_ %   4 -eq 0 } { return $True  }        # 100で割り切れず4で割り切れる年は、閏年である
  6.     default            { return $False }        # 4で割り切れない年は、閏年でない
  7.     }
  8. }

F#

  1. let isLeapYear year =
  2.     match year % 4, year % 100, year % 400 with
  3.     | 000 -> true                           // 400で割り切れる年は、閏年である
  4.     | 00, _ -> false                          // 400で割り切れず100で割り切れる年は、閏年でない
  5.     | 0, _, _ -> true                           // 100で割り切れず4で割り切れる年は、閏年である
  6.     | _, _, _ -> false                          // 4で割り切れない年は、閏年でない
  1. let (|DivisibleBy|_|) divider dividee =
  2.     if dividee % divider = 0 then Some() else None
  3. let isLeapYear year =
  4.     match year with
  5.     | DivisibleBy 400 -> true                   // 400で割り切れる年は、閏年である
  6.     | DivisibleBy 100 -> false                  // 400で割り切れず100で割り切れる年は、閏年でない
  7.     | DivisibleBy   4 -> true                   // 100で割り切れず4で割り切れる年は、閏年である
  8.     | _               -> false                  // 4で割り切れない年は、閏年でない

C#

  1. public static bool IsLeapYear(int year) {
  2.     if (year % 400 == 0return true;           // 400で割り切れる年は、閏年である
  3.     if (year % 100 == 0return false;          // 400で割り切れず100で割り切れる年は、閏年でない
  4.     if (year %   4 == 0return true;           // 100で割り切れず4で割り切れる年は、閏年である
  5.     return false;                               // 4で割り切れない年は、閏年でない
  6. }

C++

  1. bool is_leap_year(const int year) {
  2.     if (year % 400 == 0return true;           // 400で割り切れる年は、閏年である
  3.     if (year % 100 == 0return false;          // 400で割り切れず100で割り切れる年は、閏年でない
  4.     if (year %   4 == 0return true;           // 100で割り切れず4で割り切れる年は、閏年である
  5.     return false;                               // 4で割り切れない年は、閏年でない
  6. }

Go

  1. func IsLeapYear(year intbool {
  2.     switch 0 {
  3.     case year % 400return true                // 400で割り切れる年は、閏年である
  4.     case year % 100return false               // 400で割り切れず100で割り切れる年は、閏年でない
  5.     case year %   4return true                // 100で割り切れず4で割り切れる年は、閏年である
  6.     }
  7.     return false                                // 4で割り切れない年は、閏年でない
  8. }

Dart

  1. bool isLeapYear(int year) {
  2.     switch (0) {
  3.     case year % 400return true;               // 400で割り切れる年は、閏年である
  4.     case year % 100return false;              // 400で割り切れず100で割り切れる年は、閏年でない
  5.     case year %   4return true;               // 100で割り切れず4で割り切れる年は、閏年である
  6.     }
  7.     return false;                               // 4で割り切れない年は、閏年でない
  8. }

ActionScript

  1. function isLeapYear(year:int):Boolean {
  2.     switch (0) {
  3.     case year % 400return true;               // 400で割り切れる年は、閏年である
  4.     case year % 100return false;              // 400で割り切れず100で割り切れる年は、閏年でない
  5.     case year %   4return true;               // 100で割り切れず4で割り切れる年は、閏年である
  6.     }
  7.     return false;                               // 4で割り切れない年は、閏年でない
  8. }

JavaScript

  1. function isLeapYear(year) {
  2.     switch (0) {
  3.     case year % 400return true;               // 400で割り切れる年は、閏年である
  4.     case year % 100return false;              // 400で割り切れず100で割り切れる年は、閏年でない
  5.     case year %   4return true;               // 100で割り切れず4で割り切れる年は、閏年である
  6.     }
  7.     return false;                               // 4で割り切れない年は、閏年でない
  8. }

CoffeeScript

  1. isLeapYear = (year) ->
  2.     _ = switch 0
  3.         when year % 400 then true               # 400で割り切れる年は、閏年である
  4.         when year % 100 then false              # 400で割り切れず100で割り切れる年は、閏年でない
  5.         when year %   4 then true               # 100で割り切れず4で割り切れる年は、閏年である
  6.         else                 false              # 4で割り切れない年は、閏年でない

Lua

  1. function isleapyear(year)
  2.     if year % 400 == 0 then return true  end        -- 400で割り切れる年は、閏年である
  3.     if year % 100 == 0 then return false end        -- 400で割り切れず100で割り切れる年は、閏年でない
  4.     if year %   4 == 0 then return true  end        -- 100で割り切れず4で割り切れる年は、閏年である
  5.     return false                                    -- 4で割り切れない年は、閏年でない
  6. end

Ruby

  1. def is_leap_year year
  2.   case 0
  3.   when year % 400true                 # 400で割り切れる年は、閏年である
  4.   when year % 100false                # 400で割り切れず100で割り切れる年は、閏年でない
  5.   when year %   4true                 # 100で割り切れず4で割り切れる年は、閏年である
  6.   else           ; false                # 4で割り切れない年は、閏年でない
  7.   end
  8. end
Ruby 1.9以降
  1. def divisible_by divider
  2.   lambda {|dividee| dividee % divider == 0 }
  3. end
  4. def is_leap_year year
  5.   case year
  6.   when divisible_by(400); true          # 400で割り切れる年は、閏年である
  7.   when divisible_by(100); false         # 400で割り切れず100で割り切れる年は、閏年でない
  8.   when divisible_by(  4); true          # 100で割り切れず4で割り切れる年は、閏年である
  9.   else                  ; false         # 4で割り切れない年は、閏年でない
  10.   end
  11. end

Python

  1. def is_leap_year(year):
  2.     return (True  if year % 400 == 0            # 400で割り切れる年は、閏年である
  3.        else False if year % 100 == 0            # 400で割り切れず100で割り切れる年は、閏年でない
  4.        else True  if year %   4 == 0            # 100で割り切れず4で割り切れる年は、閏年である
  5.        else False)                              # 4で割り切れない年は、閏年でない

PHP

  1. function isLeapYear($year) {
  2.     if ($year % 400 === 0return true;         // 400で割り切れる年は、閏年である
  3.     if ($year % 100 === 0return false;        // 400で割り切れず100で割り切れる年は、閏年でない
  4.     if ($year %   4 === 0return true;         // 100で割り切れず4で割り切れる年は、閏年である
  5.     return false;                               // 4で割り切れない年は、閏年でない
  6. }

Perl

  1. sub is_leap_year {
  2.     my $year = shift;
  3.     $year % 400 or return 1;            # 400で割り切れる年は、閏年である
  4.     $year % 100 or return 0;            # 400で割り切れず100で割り切れる年は、閏年でない
  5.     $year %   4 or return 1;            # 100で割り切れず4で割り切れる年は、閏年である
  6.     return 0;                           # 4で割り切れない年は、閏年でない
  7. }
  1. sub is_leap_year {
  2.     my $year = shift;
  3.     return 1 unless $year % 400;        # 400で割り切れる年は、閏年である
  4.     return 0 unless $year % 100;        # 400で割り切れず100で割り切れる年は、閏年でない
  5.     return 1 unless $year %   4;        # 100で割り切れず4で割り切れる年は、閏年である
  6.     return 0;                           # 4で割り切れない年は、閏年でない
  7. }

戻る

目次

複数行の文字列リテラル Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
文字列中に変数の値を埋め込む(printf など) Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
同じ文字列を繰り返す Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
文字列中の文字の並びを逆にする Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
正規表現を使って、日付を表す文字列から年・月・日を取り出す Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
正規表現を使って、日付を表す文字列を全て抜き出す Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
正規表現を使って、日付を表す文字列の区切りを全てハイフンからスラッシュに置き換える Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
文字列の値に応じた数値を変数に代入する(多分岐) Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
型に応じた文字列を変数に代入する Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl
指定された年が閏年かどうかを判定する関数 Java Groovy Scala Erlang Haskell PowerShell F# C# C++ Go Dart ActionScript JavaScript CoffeeScript Lua Ruby Python PHP Perl