海外旅行から帰ってきたら、まず何を食べる?

正規表現について教えてください。

URLの指定をしたいのですが、その中からindex.htmlのみを除外したいのです。

例えば、
aaa.html
aa1.html
はあてはまるけれど、
index.html
だけは除きたい、という場合です。

現在、
/([A-Za-z0-9]+)\.htm$
このように指定しており、これだと、index.htmlにもあてはまってしまいます。
この場合、どう指定すればよいのでしょうか?
よろしくお願い致します。

A 回答 (5件)

#1の方の回答にあるように、二段階でチェックするのが無難です。



“index”でない文字列にマッチする正規表現て例えばこんなですよ?

(?:(?:(?:(?:(?:(?:(?:(?:[^i]*)*(?:i+[^n][^i]*)*)*)*(?:i+[^d][^i]*)*)*)*(?:i+[^e][^i]*)*)*)*(?:i+[^x][^i]*)*)*

まあ先読みを使うとか他にも手はありますけど。

この回答への補足

ありがとうございます。
なるほど・・・こんなことになってしまうのですか(^_^;)
ちょっと他の方法を考えた方がよいかもしれませんね。

ツールの引数として、正規表現が必要だったので、これを考えていたのですが・・・。
もっと簡単な方法があるのかな、と思っていたので、こんなことになるとは思っていませんでした(^_^;)

ちょっと勉強し直します。
ありがとうございました。

補足日時:2008/02/29 17:33
    • good
    • 0
この回答へのお礼

ご回答ありがとうございましたm(_ _)m

お礼日時:2008/02/29 17:39

> sakusaker7さん


なるほど、僕の理解不足でした。

sakusaker7さんのおっしゃるとおり、先ほどの例([^index])では、indexもidexnもdexniもxdineもマッチしてしまいます。。

という事で、もっとシンプルに
!preg_match('/.*\/index\.html$/', $url)
で、'index.html'にマッチしない、になるのではないでしょうか?

それとも、既に挙がっているように二重でチェックをするか。
sakusaker7さん、ご指摘ありがとうございました。
    • good
    • 0

>


[^(正規表現)]で(正規表現)にマッチしない、という意になります。

違います。
ブラケットの中ではカッコのペアを使ってもグループ化の役目をしません。

参考に挙げられたURLの文書にも
---
角カッコ

開き角カッコは文字クラス (character class) の開始を表し、 閉じ角カッコにより文字クラスは終了します。閉じ角カッコだけでは、 特別な意味を持ちません。閉じ角カッコを文字クラスのメンバとしたい場合は、 文字クラスの最初の文字(否定のハット記号がある場合はその直後)とするか、 バックスラッシュでエスケープする必要があります。

文字クラスは、検索対象文字列のたかだか 1 文字にマッチします。 マッチする文字は、その文字クラスによって定義された文字集合のうちの どれかです。ただし、文字クラスの最初の文字がハット記号の場合は、 マッチする文字は、その文字クラスに定義されていない文字となります。 ハット記号自体をクラスのメンバとしたい場合は、文字クラスの 最初の文字としないか、バックスラッシュでエスケープしてください。

---
ってありますよ。
    • good
    • 0

僕も正規表現かなり苦手ですが、簡単なマッチでよければ


/^https?:\/\/[a-zA-Z0-9_\.\-\/\~]+[a-zA-Z0-9]+[^index]\.html$/
でいけるはず?です。(未確認)

[^(正規表現)]で(正規表現)にマッチしない、という意になります。

※上のサンプルは、だいぶ適当なのでそのまま利用するとバグが出ると思いますので注意してください。

参考URL:http://jp.php.net/manual/ja/reference.pcre.patte …

この回答への補足

ANo.4のsakusaker7さんが言われるように、
[^index] では一致しないような気がしますが。。。

補足日時:2008/02/29 17:32
    • good
    • 0

正規表現でフィルタした後に、index.htmlのチェックをいれてみては?

この回答への補足

実は、ちょっとしたツールを使っていて、そのツールの引数として、正規表現が必要になったのです・・・。

なので、if文などで分岐させることが出来ず、困っておりました。
言葉足らずですいませんでした。。。

補足日時:2008/02/29 17:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報