人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

●質問者: FujiiRock
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

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

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

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

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

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

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

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

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

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

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


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

2 ● pigmon88
●0ポイント

http://www.turtle.gr.jp/techno/regular-expression.html


a-kuma3さんのコメント
肯定先読みなどについて、言及されてませんね。 「削除」する?

FujiiRockさんのコメント
回答ありかどうございましたっ!

3 ● oil999
●200ポイント ベストアンサー

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

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

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

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

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

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

FujiiRockさんのコメント
ありかどうございますっ! おかげさまで、大体理解できましたっ!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ