• ベストアンサー

英数半角文字と「-」を指定する正規表現

英数半角文字と「-」を指定する正規表現が なかなか解りません。 ([a-z\-]+) ([a-z,-]+) いずれもエラーになります。 どなかたご存知のかた、ご教授下さい。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.5

#3の方がお書きの[a-z-]が正しいわけですが、 ・文字クラスの中でハイフン - を含めたいときは、途中に書くと範囲指定になるので、先頭または末尾に書きます ・文字クラスの中で山記号 ^ を含めたいときは、先頭に書くと否定になるので、先頭以外に書きます ・文字クラスの中で大括弧閉じ ] を含めたいときは、先頭以外に書くと文字クラスの終わりになるので先頭に書きます ・他の文字は [ ( ) { } | $ * + . なども文字クラスの中では特殊な意味を失うのでそのまま書きます ・\ も本来は文字クラスの中では特殊な意味を失い、\ という文字自身を指すのですが、このあたりはプログラムに寄っては動作が異なるようです

sunnylife
質問者

お礼

文字の置く場所で意味が変わってくる訳ですね。 正規表現は奥が深いです。 これらの項目は今後も参考にさせていただきます。 有難うございます。

その他の回答 (4)

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

英数半角文字と書いといて a-z なのはなぜでしょうか? これだと大文字は対象から外れてしまいます。 で、何の正規表現を使おうとしてどういうエラーになったのかがわからないとなんともならんのですが、 正規表現を文字列として与える言語であったりすると ([a-z\-]+) は ([a-z\\-]+) のように二重にエスケープしないとダメかもしれません。 大抵は #3のTacosanさんのいう [a-z-] で大丈夫のはずなんですが #例外はあります。 >#1どの >「または」という場合の結合子は|(垂線)です。 > "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。 ブラケットの中では | は or の意味を持ちませんよ。

sunnylife
質問者

お礼

すみません。環境はPHPで、 .htaccessで RedirectMatch permanent category_([A-Za-z-]+)_([0-9]+)_Sales_1.html$ /$2/ と移動させたいのですが、 通りません。 ([A-Za-z-]+) は、RewriteRuleではうまくいったのですが、 RedirectMatch permanent では使えないのでしょうか

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

一口に「エラーになる」と言われても「どのプログラムで」「その正規表現をどのように与えて」「どのようなエラーが表示されるのか」が分からんと本当はいかんともしがたい. 事実正規表現といってもプログラムによって微妙に違ったりするんだけど, これくらいはたぶんおなじだろうなぁ. 普通には [a-z-] でいいはず. これでダメなら最初に書いたように使ったプログラムの名前とか表示されたエラーメッセージとかを書いてください.

sunnylife
質問者

お礼

[a-z-] でうまくいきました。 ありがとうございます。

  • dezimac
  • ベストアンサー率56% (2365/4208)
回答No.2

[a-z\-]+ で、小文字のaからzまでと-を1回以上の繰り返しになります。 処理系によって微妙に解釈が異なる事ありますが、 グループ化の()を\(\)としたり、+を\+にしないと動作しない場合もあります。 http://www.kt.rim.or.jp/~kbk/regex/regex.html

参考URL:
http://www.kt.rim.or.jp/~kbk/regex/regex.html
sunnylife
質問者

お礼

参考URL、とても詳しく解説されてますね。 まだ理解不能な部分が多いですが、 今後このサイトを参考にさせていただきます。 ありがとうございます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

正規表現と言っても言語仕様により微妙に違います。 「または」という場合の結合子は|(垂線)です。 "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。 http://msdn.microsoft.com/ja-jp/library/cc392020.aspx 上記の言語仕様を想定しています。

sunnylife
質問者

お礼

.htaccessにおける「|」はエラーになりました。 プログラミング言語も無数にありますね。 VB関連は挫折中です。 ご解答ありがとうございます。