LoginSignup
0
0

More than 3 years have passed since last update.

PHPの標準関数をRubyで書く(文字列操作編)

Posted at

はじめに

PHPの標準関数をRubyで書いてみました。
簡単に書けそうなものだけパズル感覚で書いてます。

文字列操作編です。

引数と返り値の型はテーブルで記載しました。

str_contains($haystack, $needle)

PHP: str_contains - Manual

haystack String
needle String
return TrueClass | FalseClass
Ruby
haystack.include?(needle)

str_ends_with($haystack, $needle)

PHP: str_ends_with - Manual

haystack String
needle String
return TrueClass | FalseClass
Ruby
haystack.end_with?(needle)

str_getcsv ($string, $separator, $enclosure, $escape)

PHP: str_getcsv - Manual

string String
separator String
enclosure String
escape 標準CSVライブラリでは指定不可
(2回続けて入力してエスケープ)
return Array<String>
Ruby
require "csv"
CSV.parse_line(string, col_sep: separator, quote_char: enclosure)

str_ireplace($search, $replace, $subject, &$count)

PHP: str_ireplace - Manual

search String
replace String
subject String
count Integer
return String
Ruby
count = 0
subject.gsub(Regexp.new(Regexp.escape(search), Regexp::IGNORECASE)) {count += 1; replace}

str_pad($string, $length, $pad_string, $pad_type)

PHP: str_pad - Manual

string String
length Integer
pad_string String
pad_type STR_PAD_RIGHT
return String
Ruby
string.ljust(length, pad_string)
string String
length Integer
pad_string String
pad_type STR_PAD_LEFT
return String
Ruby
string.rjust(length, pad_string)
string String
length Integer
pad_string String
pad_type STR_PAD_BOTH
return String
Ruby
string.center(length, pad_string)

str_repeat($string, $times)

PHP: str_repeat - Manual

string String
times Integer
return String
Ruby
string * times

str_replace($search, $replace, $subject, &$count)

PHP: str_replace - Manual

search String
replace String
subject String
count Integer
return String
Ruby
count = 0
subject.gsub(Regexp.new(Regexp.escape(search))) {count += 1; replace}

str_rot13($string)

PHP: str_rot13 - Manual

string String
return String
Ruby
string.tr("a-zA-Z", "n-za-mN-ZA-M")

str_shuffle($string)

PHP: str_shuffle - Manual

string String
return String
Ruby
string.chars.shuffle.join

str_split($string, $length)

PHP: str_split - Manual

string String
length Integer ※1以上
return String
Ruby
string.each_char.each_slice(length).map(&:join)

str_starts_with($haystack, $needle)

PHP: str_starts_with - Manual

haystack String
needle String
return TrueClass | FalseClass
Ruby
haystack.start_with?(needle)

str_word_count($string, $format, $characters)

PHP: str_word_count - Manual

string String
format 0
characters String
return Integer
Ruby
string.match(/^[-']*(.*?)-*$/)[1].scan(/[-'a-zA-Z]+/).count
string String
format 1
characters String
return Array<String>
Ruby
string.match(/^[-']*(.*?)-*$/)[1].scan(/[-'a-zA-Z]+/)

strcasecmp($str1, $str2)

PHP: strcasecmp - Manual

str1 String
str2 String
return Integer
Ruby
str1.casecmp(str2)

※返却値は-1, 0, 1のいずれかなので注意

strcmp($str1, $str2)

PHP: strcmp - Manual

str1 String
str2 String
return Integer
Ruby
str1 <=> str2

※返却値は-1, 0, 1のいずれかなので注意

strcspn($string, $characters, $offset, $length)

PHP: strcspn - Manual

string String
characters String
offset Integer
length Integer ※0以上
return Integer
Ruby
string = string[offset, length]
string.chars.each_with_index.find { |c, _| characters.include?(c) }&.at(1) || string.length

stripos($haystack, $needle, $offset)

PHP: stripos - Manual

haystack String
needle String
offset Integer
return String | FalseClass
Ruby
haystack.downcase.index(needle.downcase, offset)

stristr($haystack, $needle, $before_needle)

PHP: stristr - Manual

haystack String
needle String
before_needle FalseClass
return String | FalseClass
Ruby
haystack.chars.each_with_index.find { |c, _| c.casecmp?(needle) }.then { |_, i| i ? haystack[i..] : false }
haystack String
needle String
before_needle TrueClass
return String | FalseClass
Ruby
haystack.chars.each_with_index.find { |c, _| c.casecmp?(needle) }.then { |_, i| i ? haystack[0, i] : false }

strlen($string)

PHP: strlen - Manual

string String
return Integer
Ruby
string.length

strncasecmp($str1, $str2, $length)

PHP: strncasecmp - Manual

str1 String
str2 String
length Integer
return Integer
Ruby
str1[0, length].casecmp(str2[0, length])

※返却値は-1, 0, 1のいずれかなので注意

strncmp($str1, $str2, $length)

PHP: strncmp - Manual

str1 String
str2 String
length Integer
return Integer
Ruby
str1[0, length] <=> str2[0, length]

※返却値は-1, 0, 1のいずれかなので注意

strpbrk($string, $characters)

PHP: strpbrk - Manual

string String
characters String
return String | FalseClass
Ruby
string.chars.each_with_index.find { |c, _| characters.include?(c) }.then { |_, i| i ? string[i..] : false }

strpos($haystack, $needle, $offset)

PHP: strpos - Manual

haystack String
needle String
offset Integer
return String | FalseClass
Ruby
haystack.index(needle, offset)

strrchr($haystack, $needle)

PHP: strrchr - Manual

haystack String
needle String
return String | FalseClass
Ruby
haystack.chars.reverse.each_with_index.find { |c, _| c == needle.chr }.then { |_, i| i ? haystack[-i-1..] : false }

strrev($string)

PHP: strrev - Manual

string String
return String
Ruby
string.reverse

strripos($haystack, $needle, $offset)

PHP: strripos - Manual

haystack String
needle String
offset Integer ※0以上
return String | FalseClass
Ruby
haystack[offset..].downcase.rindex(needle.downcase)&.+(offset) || false
haystack String
needle String
offset Integer ※0未満
return String | FalseClass
Ruby
haystack.downcase.rindex(needle.downcase, offset) || false

strrpos($haystack, $needle, $offset)

PHP: strrpos - Manual

haystack String
needle String
offset Integer ※0以上
return String | FalseClass
Ruby
haystack[offset..].rindex(needle)&.+(offset) || false
haystack String
needle String
offset Integer ※0未満
return String | FalseClass
Ruby
haystack.rindex(needle, offset) || false

strspn($string, $characters, $offset, $length)

PHP: strspn - Manual

string String
characters String
offset Integer
length Integer ※0以上
return Integer
Ruby
string = string[offset, length]
string.chars.each_with_index.find { |c, _| !characters.include?(c) }&.at(1) || string.length

strstr($haystack, $needle, $before_needle)

PHP: strstr - Manual

haystack String
needle String
before_needle FalseClass
return String | FalseClass
Ruby
haystack.chars.each_with_index.find { |c, _| c == needle }.then { |_, i| i ? haystack[i..] : false }
haystack String
needle String
before_needle TrueClass
return String | FalseClass
Ruby
haystack.chars.each_with_index.find { |c, _| c == needle }.then { |_, i| i ? haystack[0, i] : false }

strtolower($string)

PHP: strtolower - Manual

string String
return String
Ruby
string.downcase

strtoupper($string)

PHP: strtoupper - Manual

string String
return String
Ruby
string.upcase

strtr($string, $from, $to)

PHP: strtr - Manual

string String
from String
to String
return String
Ruby
limit = [from, to].map(&:length).min
string.tr(from[0, limit], to[0, limit])

strtr($string, $replace_pairs)

PHP: strtr - Manual

string String
replace_pairs Hash<String, String>
return String
Ruby
string.gsub(Regexp.new(replace_pairs.keys.map { |s| Regexp.escape(s) }.join('|'))) { |m| replace_pairs[m] }

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0