正規表現についての質問です。


以下のような正規表現において、それぞれ部品ごと()ごととか
にわけて、解説していただきたいです。

^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])[0-9A-Za-z]{8,}$

?= ってどういう意味なんでしょうか。
また、(?=.*[0-9]) は、どのように解釈したらいいですか。

?が0または1回だけの文字で、=はなんですかね。
.*は、0個以上の任意の1文字で、その後、[0-9]0から9の数字と。。
まとめると、どういうことなんですかね。

最後に、半角数字と半角英字、半角記号がそれぞれ一文字以上含む正規表現を
教えてください。
どうぞよろしくお願いしますっ

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/12/26 00:47:16
  • 終了:2012/12/27 00:26:54

ベストアンサー

id:oil999 No.3

oil999回答回数1728ベストアンサー獲得回数3202012/12/26 06:33:29

ポイント200pt

(?=pattern) はセットで用いられ、先読みを実現します。
先読みとは、最初にpatternが出現する部分にマッチするものです。
ご質問の正規表現は、先読みの効果がありません。
たとえば

^(.*)(?=[A-Z].)

という正規表現であれば、(?=[A-Z].)は最初に英大文字が出現する部分にマッチします。すなわち、^(.*) は文字列の先頭から最初に英大文字が出現するまで(英大文字は含まない)にマッチします。

繰り返しますが、ご質問の正規表現は奇妙な構文なので、、その効果は説明できません。

半角数字と半角英字、半角記号がそれぞれ一文字以上含む正規表現

(?=[0-9].])(?=[A-Za-z].)(?=[!-~].)
id:yayayai

ありかどうございますっ!
おかげさまで、大体理解できましたっ!

2012/12/27 00:22:00

その他の回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4624ベストアンサー獲得回数19592012/12/26 01:48:25

ポイント100pt

まとめると、どういうことなんですかね。

「半角数字と半角英字をそれぞれ一文字以上含む、八文字以上の文字列」ということです。

?= ってどういう意味なんでしょうか。

(?=χ) は、「幅ゼロの肯定先読み」という表現です。
正規表現χを満たす文字列の直前の文字列の隙間を指します。
「隙間」というのは、文字(or 文字列)そのものを指しません。
グループとしては、行頭の ^ や、行末の $ と同じものです。

(?=.*[0-9]) は、どのように解釈したらいいですか。

.*[0-9] が任意の文字列の後に数字がある文字列だということは、分かりますよね。
その文字列の先頭の隙間を指しています。

最後に、半角数字と半角英字、半角記号がそれぞれ一文字以上含む正規表現を
教えてください。

半角記号に、何を含めるかに寄りますが、仮に [-+/*] を記号としましょうか。
文字列全体が、それに合致する正規表現は、以下のようになると思います。

^(?=.*[-+/*])(?=.*[0-9])(?=.*[A-Za-z])[-+/*0-9A-Za-z]+$ 

文字列の一部で良いのであれば、行頭の ^ と、行末の $ を外したものになります。

id:yayayai

ありかどうございますっ!
うーん自分には、隙間の意味がよく理解できませんが、解決の糸口はおかげさまでみつけられましたっ!

2012/12/27 00:24:39
id:pigmon88 No.2

pigmon88回答回数501ベストアンサー獲得回数252012/12/26 01:52:20

id:a-kuma3

肯定先読みなどについて、言及されてませんね。
「削除」する?

2012/12/26 01:57:47
id:yayayai

回答ありかどうございましたっ!

2012/12/27 00:22:43
id:oil999 No.3

oil999回答回数1728ベストアンサー獲得回数3202012/12/26 06:33:29ここでベストアンサー

ポイント200pt

(?=pattern) はセットで用いられ、先読みを実現します。
先読みとは、最初にpatternが出現する部分にマッチするものです。
ご質問の正規表現は、先読みの効果がありません。
たとえば

^(.*)(?=[A-Z].)

という正規表現であれば、(?=[A-Z].)は最初に英大文字が出現する部分にマッチします。すなわち、^(.*) は文字列の先頭から最初に英大文字が出現するまで(英大文字は含まない)にマッチします。

繰り返しますが、ご質問の正規表現は奇妙な構文なので、、その効果は説明できません。

半角数字と半角英字、半角記号がそれぞれ一文字以上含む正規表現

(?=[0-9].])(?=[A-Za-z].)(?=[!-~].)
id:yayayai

ありかどうございますっ!
おかげさまで、大体理解できましたっ!

2012/12/27 00:22:00
  • id:ku__ra__ge
    詳しい説明を理解できるよう書ける自信がないので、重要なポイントだけ。

    とりあえず、この正規表現は『全体が"数字"と"大文字アルファベット"と"小文字アルファベット"のみで構成された8文字以上の文字列。ただし文字列には、"数字"と"大文字アルファベット"と"小文字アルファベット"をそれぞれ1文字以上含む必要がある』を示します。

    『(?=.*[0-9])』というのは肯定先読みというもので、単独で出てくる『?』とは別の意味をもったものです。
    この正規表現は肯定先読みをちょっとトリッキーに使って、『(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])』という部分で『数字と大文字アルファベットと小文字アルファベットをそれぞれ1文字以上含む』という条件を表現してるようですね。(ここがポイントなのですが、理解できるよう上手く説明できる自信がありません)
  • id:a-kuma3
    >理解できるよう上手く説明できる自信がありません
    確かに、難しいですよね >先読み、後読み

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません