[解決済み] 01-12]レンジが期待通りに動作しないのはなぜですか?
質問
範囲指定パターンを使用しようとしている
[01-12]
の正規表現で2桁のmmにマッチさせることができますが、これは期待通りには動作しません。
解決方法は?
正規表現における文字クラスの定義がどのように機能するかを誤解しているようです。
いずれかの文字列にマッチするには
01
,
02
,
03
,
04
,
05
,
06
,
07
,
08
,
09
,
10
,
11
または
12
というようなことができます。
0[1-9]|1[0-2]
参考文献
-
regular-expressions.info/Caracter Classes
- 数値の範囲 (数値範囲として解釈される文字列のマッチングに関する多くの例があります)
説明
文字クラスは、それ自体で、次のようなマッチングを試みます。
1つだけ
の文字が入力されます。
[01-12]
実際に定義されているのは
[012]
入力の1文字を3文字のいずれかにマッチさせる文字クラスです。
0
,
1
または
2
.
は
-
範囲定義は
1
から
1
だけが含まれます。
1
. 一方、次のようなものは
[1-9]
には
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
.
初心者がよく間違えるのは、以下のような定義です。
[this|that]
. これはうまくいきません。この文字定義では
[this|a]
の6文字のいずれかとマッチします。
t
,
h
,
i
,
s
,
|
または
a
. より可能性が高いのは
(this|that)
が意図するところです。
参考文献
レンジの定義方法
というパターンがあることは、もう明らかですね。
between [24-48] hours
はうまくいきません。この場合の文字クラスは、次のものと同等です。
[248]
.
ということです。
-
の文字クラス定義では、パターン内の数値範囲は定義されません。Regex エンジンは、パターンの中の数字をあまり理解しませんが、有限反復構文(例えば
a{3,5}
は3から5の間にマッチします。
a
).
範囲定義の代わりに、文字のASCII/Unicodeエンコーディングを使用して範囲を定義します。文字
0
は、ASCIIでは10進数48でエンコードされています。
9
は57である。したがって、文字定義
[0-9]
は、10進数48から57の間の値を持つすべての文字をエンコーディングに含めます。むしろ感覚的に、デザイン上、これらの文字は
0
,
1
, ...,
9
.
こちらもご覧ください
もうひとつの例 AからZまで
もう1つの一般的な文字クラスの定義を見てみましょう。
[a-zA-Z]
ASCIIの場合。
-
A
= 65,Z
= 90 -
a
= 97,z
= 122
ということになります。
-
[a-zA-Z]
と[A-Za-z]
は同等です -
ほとんどのフレーバーで
[a-Z]
は不正な文字範囲である可能性が高い-
なぜなら
a
(97) は "greater than" よりも大きい。Z
(90)
-
なぜなら
-
[A-z]
は合法ですが、この6文字も含まれます。-
[
(91),\
(92),]
(93),^
(94),_
(95),`
(96)
-
関連する質問
関連
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] \0-9]よりも効率が悪い
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] Regex: 特定のパターン以外のすべてにマッチする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】正規表現でのコロン記号の使用について
-
[解決済み] 小数点以下2桁までの値にマッチする正規表現
-
[解決済み] Atomで改行文字を置き換えるには?
-
[解決済み] スペースとタブの任意のシーケンスにマッチする正規表現を作成する方法
-
[解決済み] 正規表現で「逆マッチ」を行うには?
-
[解決済み] sedで行全体を置き換えるには?
-
[解決済み] 正規表現で複数行にまたがる任意の文字にマッチさせるにはどうしたらよいですか?
-
[解決済み] 正規表現におけるワードバウンダリとは何ですか?
-
[解決済み] アドレスフィールド検証のための正規表現
-
[解決済み] RegExp マッチする文字列が my で始まらない