- ベストアンサー
英数半角文字と「-」を指定する正規表現
英数半角文字と「-」を指定する正規表現が なかなか解りません。 ([a-z\-]+) ([a-z,-]+) いずれもエラーになります。 どなかたご存知のかた、ご教授下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3の方がお書きの[a-z-]が正しいわけですが、 ・文字クラスの中でハイフン - を含めたいときは、途中に書くと範囲指定になるので、先頭または末尾に書きます ・文字クラスの中で山記号 ^ を含めたいときは、先頭に書くと否定になるので、先頭以外に書きます ・文字クラスの中で大括弧閉じ ] を含めたいときは、先頭以外に書くと文字クラスの終わりになるので先頭に書きます ・他の文字は [ ( ) { } | $ * + . なども文字クラスの中では特殊な意味を失うのでそのまま書きます ・\ も本来は文字クラスの中では特殊な意味を失い、\ という文字自身を指すのですが、このあたりはプログラムに寄っては動作が異なるようです
その他の回答 (4)
- sakusaker7
- ベストアンサー率62% (800/1280)
英数半角文字と書いといて a-z なのはなぜでしょうか? これだと大文字は対象から外れてしまいます。 で、何の正規表現を使おうとしてどういうエラーになったのかがわからないとなんともならんのですが、 正規表現を文字列として与える言語であったりすると ([a-z\-]+) は ([a-z\\-]+) のように二重にエスケープしないとダメかもしれません。 大抵は #3のTacosanさんのいう [a-z-] で大丈夫のはずなんですが #例外はあります。 >#1どの >「または」という場合の結合子は|(垂線)です。 > "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。 ブラケットの中では | は or の意味を持ちませんよ。
お礼
すみません。環境はPHPで、 .htaccessで RedirectMatch permanent category_([A-Za-z-]+)_([0-9]+)_Sales_1.html$ /$2/ と移動させたいのですが、 通りません。 ([A-Za-z-]+) は、RewriteRuleではうまくいったのですが、 RedirectMatch permanent では使えないのでしょうか
- Tacosan
- ベストアンサー率23% (3656/15482)
一口に「エラーになる」と言われても「どのプログラムで」「その正規表現をどのように与えて」「どのようなエラーが表示されるのか」が分からんと本当はいかんともしがたい. 事実正規表現といってもプログラムによって微妙に違ったりするんだけど, これくらいはたぶんおなじだろうなぁ. 普通には [a-z-] でいいはず. これでダメなら最初に書いたように使ったプログラムの名前とか表示されたエラーメッセージとかを書いてください.
お礼
[a-z-] でうまくいきました。 ありがとうございます。
- dezimac
- ベストアンサー率56% (2365/4208)
[a-z\-]+ で、小文字のaからzまでと-を1回以上の繰り返しになります。 処理系によって微妙に解釈が異なる事ありますが、 グループ化の()を\(\)としたり、+を\+にしないと動作しない場合もあります。 http://www.kt.rim.or.jp/~kbk/regex/regex.html
お礼
参考URL、とても詳しく解説されてますね。 まだ理解不能な部分が多いですが、 今後このサイトを参考にさせていただきます。 ありがとうございます。
- nda23
- ベストアンサー率54% (777/1415)
正規表現と言っても言語仕様により微妙に違います。 「または」という場合の結合子は|(垂線)です。 "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。 http://msdn.microsoft.com/ja-jp/library/cc392020.aspx 上記の言語仕様を想定しています。
お礼
.htaccessにおける「|」はエラーになりました。 プログラミング言語も無数にありますね。 VB関連は挫折中です。 ご解答ありがとうございます。
お礼
文字の置く場所で意味が変わってくる訳ですね。 正規表現は奥が深いです。 これらの項目は今後も参考にさせていただきます。 有難うございます。