質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

1602閲覧

\dと[\d]の違いは何か

JADEN

総合スコア106

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/07/09 12:11

質問は、標題の通りです。

教科書に、文字クラス[0-9]の省略が[\d]と書かれています。(初めてのPerl 第6版 159ページ)
しかし、以下のコードの様に、[]を省略してもマッチしました。
[]の区切りがないため、dが続いた場合、見づらい問題はあると思いますが、
それを除けば両者は、同じと考えて良いのでしょうか。

実行環境
OS: Windows7

Perl

1#!perl -w 2use strict; 3use utf8; 4use 5.010; 5 6$_ = "d1d"; 7if(/d\dd/) { 8 say 1; 9}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

その通りで、\dと[\d]だけであれば、違いはありません。

補足して説明させていただくと、[]でくくるのは、見やすさのためではありません。
[]の中に囲まれた文字の中で「どれか」に該当させるときに使います。なので、[\d]と\dだけであれば結果は一緒ですが、例えば以下の場合は意味が違ってきます。

[abc]
abc

上はa「または」b「または」cに一致、
下はabcという「連続した文字列」に一致します。

投稿2016/07/09 12:38

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JADEN

2016/07/10 09:45

回答ありがとうございます。
guest

0

例えば二ケタの数字にマッチする正規表現を書きたい場合、\d\dまたは[\d][\d]と書きます。
これを[\d\d]とすると、一ケタの数字にマッチしてしまいます。
文字クラスを使った場合、カッコの中のどれか一つにマッチすることになりますので、例えば[abc]と書いた場合、abc という単語でなく、a または b または c にマッチします。

投稿2016/07/09 12:40

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JADEN

2016/07/10 09:45

回答ありがとうございます。
guest

0

ベストアンサー

文字クラスの[]の中に1つだけ書いた場合は、[]を外しても同じです。
つまり、\d[\d]は同じです。[]は中に複数の物を書いたときに有用です。[\d.]など。

投稿2016/07/09 12:30

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JADEN

2016/07/10 09:45

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問