Ruby-正規表現

正規表現は、あなたが一致するかのパターンで開催された専門の構文を使用して文字列の他の文字列またはセットを見つけることができます文字の特別なシーケンスです。

正規表現リテラルは、スラッシュの間、または次のように%のR、続いて任意の区切り文字の間のパターンであります-

構文

/pattern/
/pattern/im    # option can be specified
%r!/usr/local! # general delimited regular expression

#!/usr/bin/ruby

line1 = "Cats are smarter than dogs";
line2 = "Dogs also like meat";

if ( line1 =~ /Cats(.*)/ )
   puts "Line1 contains Cats"
end
if ( line2 =~ /Cats(.*)/ )
   puts "Line2 contains  Dogs"
end

これにより、次の結果が生成されます-

Line1 contains Cats

正規表現修飾子

正規表現リテラルには、マッチングのさまざまな側面を制御するためのオプションの修飾子が含まれる場合があります。前に示したように、修飾子は2番目のスラッシュ文字の後に指定され、これらの文字の1つで表すことができます-

シニア番号 修飾子と説明
1

i

テキストを照合するときに大文字と小文字を区別しません。

2

o

#{}補間は、regexpリテラルが最初に評価されるときに1回だけ実行されます。

3

x

空白を無視し、正規表現でのコメントを許可します。

4

m

複数の行に一致し、改行を通常の文字として認識します。

5

u,e,s,n

正規表現をUnicode(UTF-8)、EUC、SJIS、またはASCIIとして解釈します。これらの修飾子のいずれも指定されていない場合、正規表現はソースエンコーディングを使用すると見なされます。

%Qで区切られた文字列リテラルと同様に、Rubyでは、正規表現を%rで開始し、その後に任意の区切り文字を続けることができます。これは、説明しているパターンに、エスケープしたくないスラッシュ文字が多数含まれている場合に役立ちます。

# Following matches a single slash character, no escape required
%r|/|

# Flag characters are allowed with this syntax, too
%r[</(.*)>]i

正規表現パターン

制御文字を除いて、 (+ ? . * ^ $ ( ) [ ] { } | \)、すべての文字が一致します。制御文字の前に円記号を付けると、制御文字をエスケープできます。

シニア番号 パターンと説明
1

^

行頭に一致します。

2

$

行末に一致します。

3

.

改行以外の任意の1文字に一致します。mオプションを使用すると、改行にも一致させることができます。

4

[...]

角かっこ内の任意の1文字に一致します。

5

[^...]

角かっこで囲まれていない任意の1文字に一致します

6

re*

先行する式の0回以上の出現に一致します。

7

re+

前の式の1つ以上のオカレンスに一致します。

8

re?

前の式の0または1回の出現に一致します。

9

re{ n}

先行する式のn回の出現に正確に一致します。

10

re{ n,}

先行する式のn回以上の出現に一致します。

11

re{ n, m}

先行する式の少なくともn回および最大m回の出現に一致します。

12

a| b

aまたはbのいずれかに一致します。

13

(re)

正規表現をグループ化し、一致したテキストを記憶します。

14

(?imx)

正規表現内のi、m、またはxオプションを一時的にオンに切り替えます。括弧内の場合、その領域のみが影響を受けます。

15

(?-imx)

正規表現内のi、m、またはxオプションを一時的にオフに切り替えます。括弧内の場合、その領域のみが影響を受けます。

16

(?: re)

一致したテキストを記憶せずに正規表現をグループ化します。

17

(?imx: re)

括弧内のi、m、またはxオプションを一時的にオンに切り替えます。

18

(?-imx: re)

括弧内のi、m、またはxオプションを一時的にオフに切り替えます。

19

(?#...)

コメント。

20

(?= re)

パターンを使用して位置を指定します。範囲がありません。

21

(?! re)

パターン否定を使用して位置を指定します。範囲がありません。

22

(?> re)

バックトラックなしで独立したパターンに一致します。

23

\w

単語の文字に一致します。

24

\W

単語以外の文字に一致します。

25

\s

空白に一致します。[\ t \ n \ r \ f]と同等です。

26

\S

非空白に一致します。

27

\d

数字と一致します。[0-9]に相当します。

28

\D

数字以外に一致します。

29

\A

文字列の先頭に一致します。

30

\Z

文字列の終わりに一致します。改行が存在する場合は、改行の直前と一致します。

31

\z

文字列の終わりに一致します。

32

\G

最後の試合が終了した試合ポイント。

33

\b

角かっこで囲まれていない場合、単語の境界に一致します。角かっこ内の場合、バックスペース(0x08)に一致します。

34

\B

単語以外の境界に一致します。

35

\n, \t, etc.

改行、キャリッジリターン、タブなどに一致します。

36

\1...\9

n番目のグループ化された部分式に一致します。

37

\10

すでに一致している場合は、n番目のグループ化された部分式に一致します。それ以外の場合は、文字コードの8進表現を指します。

正規表現の例

シニア番号 例と説明
1

/ruby/

「ルビー」に一致します。

2

¥

円記号と一致します。マルチバイト文字は、Ruby1.9およびRuby1.8でサポートされています。

シニア番号 例と説明
1

/[Rr]uby/

「ルビー」または「ルビー」に一致します。

2

/rub[ye]/

「ruby」または「rube」に一致します。

3

/[aeiou]/

任意の1つの小文字の母音に一致します。

4

/[0-9]/

任意の数字に一致します。/ [0123456789] /と同じです。

5

/[a-z]/

任意の小文字のASCII文字に一致します。

6

/[A-Z]/

任意の大文字のASCII文字に一致します。

7

/[a-zA-Z0-9]/

上記のいずれかに一致します。

8

/[^aeiou]/

小文字の母音以外のものに一致します。

9

/[^0-9]/

数字以外のものに一致します。

シニア番号 例と説明
1

/./

改行以外のすべての文字に一致します。

2

/./m

複数行モードでは、改行にも一致します。

3

/\d/

数字に一致:/ [0-9] /。

4

/\D/

数字以外に一致します:/ [^ 0-9] /。

5

/\s/

空白文字に一致します:/ [\ t \ r \ n \ f] /。

6

/\S/

空白以外に一致します:/ [^ \ t \ r \ n \ f] /。

7

/\w/

1つの単語の文字に一致します:/ [A-Za-z0-9 _] /。

8

/\W/

単語以外の文字に一致します:/ [^ A-Za-z0-9 _] /。

シニア番号 例と説明
1

/ruby?/

「rub」または「ruby」に一致:yはオプションです。

2

/ruby*/

「摩擦」に0以上のysを加えたものに一致します。

3

/ruby+/

「摩擦」と1つ以上のysに一致します。

4

/\d{3}/

正確に3桁に一致します。

5

/\d{3,}/

3桁以上に一致します。

6

/\d{3,5}/

3、4、または5桁に一致します。

これは最小の繰り返し数に一致します-

シニア番号 例と説明
1

/<.*>/

貪欲な繰り返し:「<ruby> perl>」に一致します。

2

/<.*?>/

欲張りでない:「<ruby> perl>」の「<ruby>」に一致します。

シニア番号 例と説明
1

/\D\d+/

グループなし:+繰り返し\ d

2

/(\D\d)+/

グループ化:+ \ D \ dペアを繰り返す

3

/([Rr]uby(, )?)+/

「Ruby」、「Ruby、ruby、ruby」などに一致します。

これは、以前に一致したグループと再び一致します-

シニア番号 例と説明
1

/([Rr])uby&\1ails/

ruby&railsまたはRuby&Railsに一致します。

2

/(['"])(?:(?!\1).)*\1/

一重引用符または二重引用符で囲まれた文字列。\ 1は、最初のグループが一致したものと一致します。\ 2は、2番目のグループが一致したものに一致します。

シニア番号 例と説明
1

/ruby|rube/

「ruby」または「rube」に一致します。

2

/rub(y|le))/

「ルビー」または「ルーブル」に一致します。

3

/ruby(!+|\?)/

「ルビー」の後に1つ以上!または1つ?

一致位置を指定する必要があります。

シニア番号 例と説明
1

/^Ruby/

文字列または内部行の先頭にある「Ruby」と一致します。

2

/Ruby$/

文字列または行の末尾の「Ruby」に一致します。

3

/\ARuby/

文字列の先頭にある「Ruby」と一致します。

4

/Ruby\Z/

文字列の末尾の「Ruby」に一致します。

5

/\bRuby\b/

単語の境界で「Ruby」に一致します。

6

/\brub\B/

\ Bは単語以外の境界です。「rube」と「ruby」の「rub」に一致しますが、単独では一致しません。

7

/Ruby(?=!)/

感嘆符が続く場合は、「Ruby」に一致します。

8

/Ruby(?!!)/

感嘆符が続かない場合は、「Ruby」に一致します。

シニア番号 例と説明
1

/R(?#comment)/

「R」に一致します。残りはすべてコメントです。

2

/R(?i)uby/

「uby」との照合では大文字と小文字は区別されません。

3

/R(?i:uby)/

同上。

4

/rub(?:y|le))/

\ 1後方参照を作成せずにのみグループ化します。

検索と置換

正規表現を使用する最も重要なStringメソッドのいくつかは次のとおりです。 sub そして gsub、およびそれらのインプレースバリアント sub! そして gsub!

これらのメソッドはすべて、正規表現パターンを使用して検索と置換の操作を実行します。ザ・subsub! パターンの最初の出現を置き換え、 gsubgsub! すべてのオカレンスを置き換えます。

ザ・ sub そして gsub 新しい文字列を返し、元の文字列を変更せずに残します。 sub! そして gsub! それらが呼び出される文字列を変更します。

以下は例です-

#!/usr/bin/ruby

phone = "2004-959-559 #This is Phone Number"

# Delete Ruby-style comments
phone = phone.sub!(/#.*$/, "")   
puts "Phone Num : #{phone}"

# Remove anything other than digits
phone = phone.gsub!(/\D/, "")    
puts "Phone Num : #{phone}"

これにより、次の結果が生成されます-

Phone Num : 2004-959-559
Phone Num : 2004959559

以下は別の例です-

#!/usr/bin/ruby

text = "rails are rails, really good Ruby on Rails"

# Change "rails" to "Rails" throughout
text.gsub!("rails", "Rails")

# Capitalize the word "Rails" throughout
text.gsub!(/\brails\b/, "Rails")
puts "#{text}"

これにより、次の結果が生成されます-

Rails are Rails, really good Ruby on Rails