• ベストアンサー

正規表現について

正規表現について教えてください。 URLの指定をしたいのですが、その中からindex.htmlのみを除外したいのです。 例えば、 aaa.html aa1.html はあてはまるけれど、 index.html だけは除きたい、という場合です。 現在、 /([A-Za-z0-9]+)\.htm$ このように指定しており、これだと、index.htmlにもあてはまってしまいます。 この場合、どう指定すればよいのでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

#1の方の回答にあるように、二段階でチェックするのが無難です。 “index”でない文字列にマッチする正規表現て例えばこんなですよ? (?:(?:(?:(?:(?:(?:(?:(?:[^i]*)*(?:i+[^n][^i]*)*)*)*(?:i+[^d][^i]*)*)*)*(?:i+[^e][^i]*)*)*)*(?:i+[^x][^i]*)*)* まあ先読みを使うとか他にも手はありますけど。

akekure
質問者

お礼

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

akekure
質問者

補足

ありがとうございます。 なるほど・・・こんなことになってしまうのですか(^_^;) ちょっと他の方法を考えた方がよいかもしれませんね。 ツールの引数として、正規表現が必要だったので、これを考えていたのですが・・・。 もっと簡単な方法があるのかな、と思っていたので、こんなことになるとは思っていませんでした(^_^;) ちょっと勉強し直します。 ありがとうございました。

その他の回答 (4)

  • _chihiro_
  • ベストアンサー率63% (26/41)
回答No.5

> sakusaker7さん なるほど、僕の理解不足でした。 sakusaker7さんのおっしゃるとおり、先ほどの例([^index])では、indexもidexnもdexniもxdineもマッチしてしまいます。。 という事で、もっとシンプルに !preg_match('/.*\/index\.html$/', $url) で、'index.html'にマッチしない、になるのではないでしょうか? それとも、既に挙がっているように二重でチェックをするか。 sakusaker7さん、ご指摘ありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> [^(正規表現)]で(正規表現)にマッチしない、という意になります。 違います。 ブラケットの中ではカッコのペアを使ってもグループ化の役目をしません。 参考に挙げられたURLの文書にも --- 角カッコ 開き角カッコは文字クラス (character class) の開始を表し、 閉じ角カッコにより文字クラスは終了します。閉じ角カッコだけでは、 特別な意味を持ちません。閉じ角カッコを文字クラスのメンバとしたい場合は、 文字クラスの最初の文字(否定のハット記号がある場合はその直後)とするか、 バックスラッシュでエスケープする必要があります。 文字クラスは、検索対象文字列のたかだか 1 文字にマッチします。 マッチする文字は、その文字クラスによって定義された文字集合のうちの どれかです。ただし、文字クラスの最初の文字がハット記号の場合は、 マッチする文字は、その文字クラスに定義されていない文字となります。 ハット記号自体をクラスのメンバとしたい場合は、文字クラスの 最初の文字としないか、バックスラッシュでエスケープしてください。 --- ってありますよ。

  • _chihiro_
  • ベストアンサー率63% (26/41)
回答No.2

僕も正規表現かなり苦手ですが、簡単なマッチでよければ /^https?:\/\/[a-zA-Z0-9_\.\-\/\~]+[a-zA-Z0-9]+[^index]\.html$/ でいけるはず?です。(未確認) [^(正規表現)]で(正規表現)にマッチしない、という意になります。 ※上のサンプルは、だいぶ適当なのでそのまま利用するとバグが出ると思いますので注意してください。

参考URL:
http://jp.php.net/manual/ja/reference.pcre.pattern.syntax.php
akekure
質問者

補足

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

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

akekure
質問者

補足

実は、ちょっとしたツールを使っていて、そのツールの引数として、正規表現が必要になったのです・・・。 なので、if文などで分岐させることが出来ず、困っておりました。 言葉足らずですいませんでした。。。

関連するQ&A

専門家に質問してみよう